STM32F407ZET6 关于用PWM(做出呼吸灯)详解
来源:互联网 发布:数组是一种对象 编辑:程序博客网 时间:2024/04/28 16:46
说明:本作者亲测代码在板子上可用。
1、PWM定义
Pulse Width Modulation:脉冲宽度调制(PWM)脉冲:频率 ,方波脉冲宽度:占空比,高电平的宽度 :在同一个时间内,高电平所占比例频率与周期:f = 1/T f:频率(主频) T:周期
2、用途
控制输出的电压和电流灯光亮度的控制直流电机速度的控制
3、分析PWM产生与重点
(1)分析PWM产生(看图示PWM)(2)区别PWM1与PWM2模式(STM32F4xx中文参考手册 433页)(3)高低电平极性区别(STM32F4xx中文参考手册 457页)
4、PWM库函数开发流程
(1)使能定时器14和相关IO口时钟。 使能定时器14时钟:RCC_APB1PeriphClockCmd(); 使能GPIOF时钟:RCC_AHB1PeriphClockCmd ();(2)初始化IO口为复用功能输出。 函数:GPIO_Init(); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能(3)GPIOF9复用映射到定时器14 GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); (4)初始化定时器:ARR,PSC等:TIM_TimeBaseInit();(5)初始化输出比较参数:TIM_OC1Init();(6)使能预装载寄存器: TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); (7)使能自动重装载的预装载寄存器允许位 TIM_ARRPreloadConfig(TIM14,ENABLE);(8)使能定时器。(9)不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare1();
5、具体相关配置代码+超详细注释解释 如下:
void PWM_TIM14_INIT(){ GPIO_InitTypeDef GPIO_InitStructure; //GPIO结构体设置 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //定时器14结构体设置 TIM_OCInitTypeDef TIM_OCInitStruct; //定时器PWM结构体设置 //使能时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //LED9 在PF9引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //初始化的复用功能(因为本引脚还要用到PWM输出功能) GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOF, &GPIO_InitStructure); //复用映射到定时器14 GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); //定时器14的配置 TIM_TimeBaseInitStruct.TIM_Prescaler = 84 - 1; //预分频为84分频 TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStruct.TIM_Period = 500-1; //设置周期为500 TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM14,&TIM_TimeBaseInitStruct); //PWM初始化配置 TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; //模式选择 TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low; //选择低电平有效 TIM_OC1Init(TIM14,&TIM_OCInitStruct); //使能预装载寄存器 TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); //使能自动重装载寄存器 TIM_ARRPreloadConfig(TIM14,ENABLE); TIM_Cmd(TIM14,ENABLE); } int main(){ PWM_TIM14_INIT(); while(1) { //这个函数是控制改变有效电平占总周期的比例(上面写的周期是500),即此时的占空比为100/500 =20% //意思就是说,可以通过这个数100(不一定是100,可以改变),就可以控制LED的亮度 //呼吸灯就是循环递增或者递减来改变这个值,就有了渐亮到渐灭,再由渐灭到渐亮的效果了。 TIM_SetCompare1(TIM14,100); }}
阅读全文
2 0
- STM32F407ZET6 关于用PWM(做出呼吸灯)详解
- 【PIC32MZ】PWM呼吸灯
- PWM输出,呼吸灯
- STM8S PWM 应用 呼吸灯
- PWM --呼吸灯
- verilog PWM实现呼吸灯
- 基于PWM的呼吸灯
- 用PWM实现多个呼吸灯间歇发光
- 51单片机PWM的控制(呼吸灯)
- 基于stm32的pwm呼吸灯
- STM32 PWM简介及呼吸灯实验
- STM32定时器产生PWM--呼吸灯
- 通过矩阵键盘,用PWM来实现呼吸灯的效果
- JAVA版树莓派呼吸灯完整程序(PWM)及碰到的各种坑
- STM32使用PWM控制LED呼吸灯效果
- STM8S003F3通过PWM波实现三基色呼吸灯
- STM8S003F3通过PWM波实现三基色呼吸灯
- 单片机学习札记9 定时器模拟PWM呼吸灯
- Red Hat Enteprise 7 安装mysql-5.7.19
- Spring MVC 文件上传
- Electron RendererProcess 获取 HTML 元素失败
- python T检验
- java io流
- STM32F407ZET6 关于用PWM(做出呼吸灯)详解
- 盗梦空间
- LNK2019:“无法解析的外部符号”的解决
- js中的各种宽高
- 继承 重载
- .net core 1.x 2.0独立部署和框架依赖部署
- 服务器部署tamcat项目时遇到的问题
- 码率控制总体框架与代码解读(一)
- Scala中的方法和函数