完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
stm32性能强大,但其开发难度又显著高于Arduino等单片机。本文将通过“呼吸灯”程序,介绍stm32中PWM方波的产生及中断函数的应用。
往期回顾 STM32开发入门(一)——流水灯 https://blog.csdn.net/m0_51908955/article/details/113528296 STM32开发入门(二)——Hello World https://blog.csdn.net/m0_51908955/article/details/113529909 软件
GPIO、RCC、SYS的配置、生成文件的方法详见往期。 打开“Clock Configuration”,将时钟配置改为如下图所示,此时的时钟频率为72MHz。 打开“Timers”中的“TIM2”,设置“Clock Source”为“Internal Clock”。点击下方的“Parameter Settings”,设置第一项为72,第三项为10000。打开“NVIC Settings”,勾选“Enabled”。(更严谨的写法为72-1和 10000-1,此处不深入探讨) 设置的具体含义: 打开“Timers”中的“TIM3”,设置“Clock Source”为“Internal Clock”。选择“Channel”为“PWM Generation CH1”。点击下方的“Parameter Settings”,设置第一项为72,第三项为1000(更严谨的写法同上)。设置“Pulse”为500。打开“NVIC Settings”,勾选“Enabled”。 Pulse:占空比。500:表示500/1000=50%,产生一个占空比为50%,频率为1kHz的方波。这个参数也可以在程序中进行调节。 在右图中找到输出方波的引脚(以实际型号为准),生成文件。 代码 打开keil,在/* USER CODE BEGIN 2 */和/* USER CODE BEGIN 2 */之间插入下列代码: /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start_IT(&htim2); //初始化定时器 HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); //初始化PWM输出 /* USER CODE END 2 */ 在在/* USER CODE BEGIN 4*/和/* USER CODE BEGIN 4 */之间(约为250-300行处)插入下列代码: /* USER CODE BEGIN 4 */ int duty=0; int flag=0; void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) //定时器中断函数,按照刚才的配置每10ms会进入此函数一次 { if(htim->Instance == htim2.Instance) { if(flag==0) { duty+=10;//方波占空比增大,表现为灯变暗 if(duty>=1000) flag=1;//转换状态 } else if(flag==1) { duty-=10;//方波占空比减小,表现为灯变亮 if(duty<=0) flag=0;//转换状态 } __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,duty);//设置方波比占空的函数 } } /* USER CODE END 4 */ 编译上传代码,并按下开发板的“Reset”按键,观察现象。 备注 本实验也可以不引入中断函数,但中断函数具有计时更加精准的特点,在自动控制程序中有重要的应用,stm32初学者应力求掌握。 |
|
|
|
只有小组成员才能发言,加入小组>>
2545 浏览 0 评论
1142浏览 2评论
742浏览 1评论
495浏览 0评论
256浏览 0评论
418浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 02:33 , Processed in 1.358311 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号