[STM32C0] 【STM32C092RC测评】 定时器中断驱动LED产生呼吸灯下效果

[复制链接]
 楼主| wuyu40 发表于 2025-5-20 22:55 | 显示全部楼层 |阅读模式
<
本帖最后由 wuyu40 于 2025-5-21 19:15 编辑

#申请原创# c58a62149f009440741ed6c91281620f
项目方案
在对直流电机控制时需要产生动态可调占空比的PWM波,所以这个测试就是使用周期性中断去调节占空比。
本文介绍了 Nucleo-STM32C092 开发板通过定时器中断控制LED。
6055b3be566375b1795da2e93ee79c7b
使用 STM32CubeMX 创建工程,配置 TIM1、PC9和NVIC;
STM32CubeIDE 代码编译和工程调试、固件上传;
实现在中断函数中修改占空比。
工程创建
使用 STM32CubeMX 快速创建工程,开启定时器设置。
5ebb7da3c6a3749faeb35f978441c4a2
希望在PC9输出PWM波控制led或者进行电机调速,在窗口设置PC9为tim1_ch2。
db1c9c22819a8f5e163de28c17b93712
为了能使用中断进行周期性修改占空比,还要配置中断,这里使用了比较中断:
8381a3d46f668187cbcc42b334c05d72
生成代码,然后添加代码:
这里要注意有一条语句,HAL_TIMEx_PWMN_Start_IT(&htim1,TIM_CHANNEL_2);使能了定时器通道2,但是始终没有PWM输出,在调试中现象是定时器不断计数,也可以产生中断进一步修改占空比,但是始终没有引脚上的PWM输出;之后参考其他帖子,加上这一条语句:
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);其中有这样的语句: /* Enable the Capture compare channel */     TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);说明这个函数使能了比较输出,所以这两条都要调用,HAL_TIMEx_PWMN_Start_IT函数的注释是Starts the PWM signal generation in interrupt mode也就是说使能PWM引发的中断;接着我们添加代码到中断函数中去:
void TIM1_CC_IRQHandler(void){/* USER CODE BEGIN TIM1_CC_IRQn 0 */if(speed<40000)                 //为了方便观察可设置为全局变量{__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,speed);//设置占空比CCR2寄存器speed+=240;}else speed=0;  /* USER CODE END TIM1_CC_IRQn 0 */  HAL_TIM_IRQHandler(&htim1); }  /* USER CODE END TIM1_CC_IRQn 1 */}最后给出调试结果:
e36fec12547499a143852d81a9138e1b

 楼主| wuyu40 发表于 2025-5-20 23:01 | 显示全部楼层
cooldog123pp 发表于 2025-5-21 16:05 | 显示全部楼层
这个应该是一个试用贴吧,可以上传视频看下效果,或者搞成gif也可以看到你呼吸的效果。
 楼主| wuyu40 发表于 2025-5-21 18:12 | 显示全部楼层
我一看  还要传到B站,觉得太麻烦了,算了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

64

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部