OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3836|回复: 0

使用中断方式实现PWM的占空比控制

[复制链接]

7

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
371
金钱
371
注册时间
2015-9-28
在线时间
122 小时
发表于 2016-12-16 11:01:29 | 显示全部楼层 |阅读模式
在做F429例程移植到F407的时候发现TIM_SetTIM3Compare4这个函数是自己写的不是HAL库函数,并且此函数还是直接使用寄存器,所以个人想是否存在着某种方式,可以用库函数来实现相同功能,然后想到前面USART的中断时一种形式,那这种形式是否是通用当然呢?然后查询TIM文件发现定时器开启中断的方式和USART一样,所以想到是否可用中断方式来实现PWM的占空比控制。然后发现其实可以,在使用CUBEMX生成代码后在MX_TIM14_Init加上开启中断的函数HAL_TIM_PWM_Start_IT(&htim14,TIM_CHANNEL_1);后就开启中断,在IT文件中完成TIM8_TRG_COM_TIM14_IRQHandler就可以实现用中断方式来控制PWM了。
  1. void TIM8_TRG_COM_TIM14_IRQHandler(void)
  2. {
  3.   /* USER CODE BEGIN TIM8_TRG_COM_TIM14_IRQn 0 */
  4.   
  5.   
  6.   /* USER CODE END TIM8_TRG_COM_TIM14_IRQn 0 */
  7.   HAL_TIM_IRQHandler(&htim14);
  8.   /* USER CODE BEGIN TIM8_TRG_COM_TIM14_IRQn 1 */
  9.   if(HAL_TIM_PWM_GetState(&htim14) == HAL_TIM_STATE_READY)
  10.   {
  11.     if(dir)led0pwmval ++;
  12.     else led0pwmval --;
  13.     if(led0pwmval>500) dir = 0;
  14.     if(led0pwmval == 0) dir = 1;
  15.     __HAL_TIM_SetCompare(&htim14,TIM_CHANNEL_1,led0pwmval);//此处是个宏定义,在TIM文件中,作用就是设置占空比
  16.   }
复制代码


PWM.zip

12.43 MB, 下载次数: 62

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-11 10:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表