STM32学习和实践笔记(24):PWM输出实验:呼吸灯

本实验所要实现的功能是:通过TIM3的CH1输出一个PWM信号,控制D7指示

灯由暗变亮,再由亮变暗,类似于人的呼吸。程序框架如下

1)初始化PC6管脚为PWM输出功能

2)PWM输出控制程序

本实验的硬件电路非常简单,只使用到开发板上的LED(D7),因为D7指

示灯接在PC6管脚,而通过对TIM3_CH1复用功能完全重映射就可以映射到

PC6脚。所以可以通过TIM3的CH1输出PWM信号,实现D7指示灯呼吸灯的控

制。

main.c

#include "system.h"
#include "led.h"
#include "SysTick.h"
#include "pwm.h"



/*	通过TIM3的CH1输出一个PWM信号,控制D7指示

灯由暗变亮,再由亮变暗,类似于人的呼吸。程序框架如下:

(1)初始化PC6管脚为PWM输出功能

(2)PWM输出控制程序
*/

int main()
{
	u16 i=0;
	u8 fx=0;
	SysTick_Init(72);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组
	LED_Init();
	TIM3_CH1_PWM_Init(500,72-1);//PWM频率设为2KHZ
	

	
	while(1)
	{
		if(fx==0)
		{
			i++;
			if(i==300)
			{
				fx=1;
			}
		}
			
			else
			{
				i--;
				if(i==0)
				{
					fx=0;
				}
			}
		
		TIM_SetCompare1(TIM3, i); //修改TIMx_CCRx的值控制占空比
		delay_ms(100);
		
	}
}


pwm.c

#include "pwm.h"
#include "led.h"

void TIM3_CH1_PWM_Init(u16 period,u16 prescaler)
{
		GPIO_InitTypeDef GPIO_InitStructure; //为将PC6引脚初始化而声明的结构体变量
		TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//定时器初始化的结构体变量声明
		TIM_OCInitTypeDef TIM_OCInitStructure; //初始化PWM输出各参数的结构体变量声明 
	
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能TIM3时钟
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PC端口的时钟
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能AFIO时钟以便进行端口映射
	
		GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6; //
		GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;// PC6为复用功能输出
		GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;	//
		GPIO_Init(GPIOC,&GPIO_InitStructure);
	
		GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//将通用定时器3的通道1的输出从PA6引脚重映射到PC6引脚
		
		TIM_TimeBaseInitStructure.TIM_Period=period;   //装入函数传过来的自动装载值
		TIM_TimeBaseInitStructure.TIM_Prescaler=prescaler; //装入函数传过来的分频系数
		TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//1分频(没有分频)
		TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式:从0开始计数到自动重载值后溢出产生中断
		TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3各参数:自动重装值、分频系统、计数方式等
	
		TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
		TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_Low;
		TIM_OCInitStructure.TIM_OutputState =	TIM_OutputState_Enable;
		TIM_OC1Init(TIM3,&TIM_OCInitStructure);
	
		TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能TIMx在CCRx上的预装载寄存器
		TIM_ARRPreloadConfig(TIM3, ENABLE);//使能 TIMx 在 ARR 上的预装载寄存器允许位
		
		TIM_Cmd(TIM3, ENABLE);//开启定时器
	
}
	



pwm.h

#ifndef _pwm_H
#define _pwm_H

#include "system.h"

void TIM3_CH1_PWM_Init(u16 period,u16 prescaler);


#endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/588487.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索AI工具的巅峰:个人体验与深度剖析

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.4--汇编LED驱动程序

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

省级财政收入、支出、第一、二、三产业增加值、工业增加值、金融业增加值占GDP比重数据(1978-2022年)

01、数据介绍 财政收支作为国家治理的基础,越来越受到社会各界的关注。同时,产业结构的优化与升级也是中国经济持续增长的关键因素。本数据对中国省级财政收入、支出占GDP的比重以及第一、二、三产业的增加值占GDP的比重和工业增加值占GDP的比重、金融业…

Python量化炒股的财务因子选股—质量因子选股

Python量化炒股的财务因子选股—质量因子选股 在Python财务因子量化选股中,质量类因子有2个,分别是净资产收益率和总资产净利率。需要注意的是,质量类因子在财务指标数据表indicator中。 净资产收益率(roe)选股 净资…

创建codereview

创建codereview流程 一、开始创建二、选择分支三、添加细节 一、开始创建 点击codereivew按钮 为新的codereview选择一个工程后点击create review 二、选择分支 选择目标分支和要比对的分支,比如develop 三、添加细节 Add branch后,可以继续Edit …

如何反向查看某个命令所属的rpm包的2个方法?(rpm -qf `which xxx`和yum provides和 rpm -ql xxx.rpm)

文章目录 快速回忆方法1: rpm -qf方法2:yum provides 其他rpm如何查看某个rpm包里面包含哪些命令: rpm -ql主推方法1: rpm -ql方法2:yum info 其他查看rdma-core中包含哪些cmd:一些其他命令所在包探索 快速回忆 rpm -…

C++_set和map的学习

1. 关联式容器 STL中的容器有序列式容器和关联式容器。 其中 vector 、 list 、 deque 、 forward_list(C11)就是序列式容器, 因为其底层为线性序列的数据结构,里面 存储的是元素本身 关联式容器 也是用来存储数据的,与序列式容器不同的是&am…

Word域代码学习(简单使用)-【SEQ】

Word域代码学习(简单使用)-【SEQ】 快捷键 序号快捷键操作1 Ctrl F9 插入域代码花括号2 F9 显示域代码结果3 Shift F9 切换为域代码4 Windows Alt F9 切换全部域代码 域代码说明 域代码不区分大小写在word中,依次选择插入➡文档部件➡域即可选择插入…

2.4Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3-基础-Vue组件

初识Vue组件 Vue中的组件是页面中的一部分,通过层层拼装,最终形成了一个完整的组件。这也是目前前端最流行的开发方 式。下面是Vue3官方给出的一张图,通过图片能清楚的了解到什么是Vue中的组件。 图的左边是一个网页,网页分为了…

初识Vue-组件化开发(应用实例)

目录 一、任务管理应用 1.介绍 2.代码 1. 任务列表组件 (TaskList.vue) 2. 添加任务组件 (AddTask.vue) 3. 应用入口组件 (App.vue) 4. 主入口文件 (main.js) 3.效果 4.总结 二、购物车 1.介绍 2.代码 1. 商品列表组件 (ProductList.vue) 2. 购物车组件 (Cart.vue…

医疗大模型华佗GPT-2:医学问答超越GPT-4,通过2023年国家执业药师考试

前言 随着人工智能技术的快速发展,特别是在自然语言处理(NLP)领域,大型预训练模型如GPT系列已经显示出在多个领域的强大应用潜力。最近,华佗GPT-2医疗大模型的发布,不仅标志着人工智能在医学领域的一大进步,更是在202…

国产服务器操作系统部署NTP服务 _ 统信UOS _ 麒麟 _ 中科方德

原文链接:国产服务器操作系统部署NTP服务 | 统信UOS | 麒麟 | 中科方德 Hello,大家好啊!在保持服务器时间的精确同步方面,时间同步服务器(NTP服务器)扮演着至关重要的角色,它能确保系统操作的时…

小程序商城|基于Spring Boot的智能小程序商城的设计与实现(源码+数据库+文档)

小程序商城目录 目录 基于Spring Boot的智能小程序商城 一、前言 二、系统设计 三、系统功能设计 1用户信息管理 2 商品信息管理 3公告信息管理 4论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: …

LeetCode 面试题 17.14 —— 最小 k 个数

阅读目录 1. 题目2. 解题思路一3. 代码实现一4. 解题思路二5. 代码实现二 1. 题目 2. 解题思路一 第一种方法就是利用快速排序,第一次排序后,数组被划分为了左右两个区间 [ 0 , i ] , [ i 1 , a r r . s i z e ( ) − 1 ] [0, i], [i1, arr.size()-1]…

Windows下载MingGW

因为要配置vscode的c/c环境,需要下载一个编译器,gcc官方推荐开源的MingGW-W64,看了几个下载方法,决定用最简单的离线安装。 niXman/mingw-builds-binaries/releases 32位的操作系统:i686,64位的操作系统&a…

画渐变色的圆弧练习

import sysfrom PySide6.QtCore import QPointF from PySide6.QtWidgets import * from PySide6.QtGui import *class MyWidget(QWidget):def paintEvent(self, event):painter QPainter(self) # 设定画板painter.setRenderHint(QPainter.Antialiasing) # 抗锯齿size min(s…

Rust Turbofish 的由来

0x01 什么是 Turbofish 我们运行如下 Rust Snippet&#xff1a; fn main() {let numbers: Vec<i32> vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];let even_numbers numbers.into_iter().filter(|n| n % 2 0).collect();println!("{:?}", even_numbers); }不出意…

在线听歌播放器 梨花带雨网页音乐播放器 网页音乐在线听 源码

最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 下 载 地 址 &#xff1a; runruncode.com/php/19749.html 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容&#xff1a;修复播放器接口问题&am…

Java零基础入门到精通_Day 11

1.继承 定义&#xff1a; 继承是面向对象三大特征之一。可以使得子类具有父类的属性和方法&#xff0c;还可以在子类中重新定义&#xff0c;追加属性和方法 格式&#xff1a; public class 子类 extends 父类{} 子类&#xff1a;也叫派生类 父类&#xff1a;基类/超类 继…

【c++】反向迭代器的探究实现

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 在list中我们实现了正向的迭代器&#xff0c;学习完优先级队列后&#xff0c;我们也对适配器模式有了一个深刻的理解&#xff0c;这篇文章基于这种模式下&#xff0c;实现各类容器的反向迭…
最新文章