完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32定时器输出一路PWM(控制LED灯的亮度)
STM32的定时器具有强大的功能,今天的输出PWM功能是属于其中的输出比较功能。 stm32输出PWM原理:(以下为个人理解,如果错误的地方 请多多指教OoO) CNT是计数值 ARR是重装载值 CCRx是比较值 定时器输出PWM有两种模式: PWM 模式1 计数值大于比较值 输出有效电平 否则输出无效电平 PWM 模式2 计数值大于比较值 输出无效电平 否则输出有效电平(有效电平我们自己设定,电平输出作用在定时器PWM的输出通道) 例如: ARR=1000 CCRx=500 有效电平为:高电平 当CNT《CCRx 时(即CNT在(0,500)的范围时)输出无效电平(即低电平) 当CNT》CCRx 时(即CNT在(501,1000)的范围时) 输出有效电平(高电平) 高低电平时间各占一半,即PWM的占空比为50%,重装载值为PWM的周期(即定时器的更新时间为PWM的周期) 定时器时间的计算在我的另外一篇文章定时器控制LED灯中有说到,有不懂得如何计算小伙伴可以去看一下 一、定时器–》配置 1、新建工程,配置RCC、Clock、GPIO(这是对于STM32F407ZG,大家根据自己的开发板的具体参数去配置) RCC Clock GPIO(设置两个按键PE2、PE3,来改变CCRx的值的大小从而改变占空比的大小;PF10作为指示灯,按键按一次改变一次状态) 按键配置(K1、K2配置类似) 2、配置TIM(这里选用TIM14,CH1,输出端口为PF9) Pluse为比较值,这里先设置为0(在程序里面会有改动) 二、输出代码 输出配置 三、添加自定义代码 1、选择开发板型号 2、添加自定义代码 定义全局变量(Pulse比较值) uint16_t TIM_Pulse=500;//初值设置为500(占空比50%) 添加函数,功能:重新设定Pulse的值 void TIM14_SetPulse(uint16_t pulse) { TIM_OC_InitTypeDef sConfigOC = {0}; sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = pulse;//占空比的值 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim14, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } HAL_TIM_PWM_Start (&htim14,TIM_CHANNEL_1);//使通道一开始产生PWM } 添加按键函数 #define K1 HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)//读取PE2、PE3的状态 #define K2 HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3) void Key_Work() { if(K1==0) { HAL_Delay(10); if(K1==0) { TIM_Pulse+=50;//占空比增加 printf(“%dn”,TIM_Pulse);//使用串口输出占空比的值 HAL_GPIO_TogglePin(GPIOF,LED_Pin);//指示灯转态改变 TIM14_SetPulse(TIM_Pulse);//重新设置 } while(!K1); } else if(K2==0) { HAL_Delay(10); if(K2==0) { TIM_Pulse-=50; printf(“%dn”,TIM_Pulse); HAL_GPIO_TogglePin(GPIOF,LED_Pin); TIM14_SetPulse(TIM_Pulse); } while(!K2); } } 在主函数的while中调用按键函数,并添加 HAL_TIM_PWM_Start (&htim14,TIM_CHANNEL_1);//使通道一开始产生PWM,第一次启动 编译并烧入开发板,改变Pulse的值 LED灯的暗亮也随之改变 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1618 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1545 浏览 1 评论
979 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1597 浏览 2 评论
1864浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
645浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
516浏览 3评论
532浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
505浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 20:05 , Processed in 0.584563 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号