OpenEdv-开源电子网

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

用了TIM1定时器输出PWM,如何精确找到PWM的中间位置?

[复制链接]

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
发表于 2015-12-21 10:59:02 | 显示全部楼层 |阅读模式
5金钱
现用了TIM1定时器输出PWM,如何在PWM打开的高电平时间内找到PWM的中间位置?
用中央对齐模式吗?
但是这样会产生两个中断,不解,请教下,谢谢!

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-12-21 23:46:12 | 显示全部楼层
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3347
金钱
3347
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-1-27 05:50:52 | 显示全部楼层
本帖最后由 likunxue 于 2016-1-27 06:32 编辑

中断函数里判断 DIR 的值
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3347
金钱
3347
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-1-27 06:26:08 | 显示全部楼层
本帖最后由 likunxue 于 2016-1-27 06:36 编辑

(1)只能使用中央对齐模式
  (2) 在外部定义一个宏         
       #define BIT_ADM(addr,bitnum)     MEM_ADDR(BITBAND(((u32)&(addr)),(bitnum)))
(3)在TIM1的中断函数里如下如判断 (读取 CR1寄存器中的 DIR位来判断)
        
    void TIM1_UP_IRQHandler(void)  
           {
           if( BIT_ADM( TIM1->SR,0) ==1)   //只定时器溢出中断发生了
             {
             BIT_ADM(TIM1->SR,0) = 0; //清除中断标志
             if(BIT_ADM(TIM1->CR1, 4) == 0){ 这里就是PWM的中心位置,}
             }
           }
   也可以不定义宏,  但编译代码多很多行

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 11:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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