打印
[STM32F1]

STM32多定时器同时工作问题

[复制链接]
8031|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shenjinliang02|  楼主 | 2018-11-7 17:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定时器单独可以工作,但同时开两个定时器的时候,有些消息就接受不到,只能等到程序中重开定时器才可以。任务如下:一个定时器定时20MS,触发方式控制另外一个定时器发送PWM脉冲,20MS定时时间到,改变PWM脉冲的脉宽,可以正常工作。但如果开另外一个定时器,每10MS用来检测串口接受数据,如果接受到数据,然后就进行处理。现在是当两个定时器同时工作时,发送出的脉冲频率不对,中间有不定间隔的攒动,导致电机抖动。麻烦遇到的朋友分享下!
沙发
airwill| | 2018-11-7 20:09 | 只看该作者
你不要在两个地方控制 PWM 脉宽,  混乱了
当然你可以使用影子寄存器的办法解决

使用特权

评论回复
板凳
磨砂| | 2018-11-8 10:03 | 只看该作者
请问什么是影子寄存器

使用特权

评论回复
地板
shenjinliang02|  楼主 | 2018-11-8 11:47 | 只看该作者
airwill 发表于 2018-11-7 20:09
你不要在两个地方控制 PWM 脉宽,  混乱了
当然你可以使用影子寄存器的办法解决 ...

我需要定时,在一定时间内改变PWM的脉宽。假如用一个定时器,可以计时并同时产生PWM波吗?影子寄存器不太懂,麻烦多说说可以吗?

使用特权

评论回复
5
晓伍| | 2018-11-8 12:13 | 只看该作者
磨砂 发表于 2018-11-8 10:03
请问什么是影子寄存器

影子寄存器的引入是ARM的一个特点(X86,PowerPC都没有)。我们知道,ARM有16个通用寄存器,这16个通用寄存器在指令中使用4个bit来标识,但是在不同的模式下,同样的4个bit 指向不同的物理寄存器,这些不同的物理寄存器就被称之为影子寄存器。不同的通用寄存器的影子寄存器个数也不相同,有的没有,有的只有1个,有的多达5个。要记住一点:所有的影子寄存器都是一个实际存在的物理寄存器。

使用特权

评论回复
6
xuanhuanzi| | 2018-11-8 15:01 | 只看该作者
设计合理点。

使用特权

评论回复
7
airwill| | 2018-11-9 07:00 | 只看该作者
用一个定时器,可以计时并同时产生PWM波吗? 可以,  可以用定时器的溢出中断计时

使用特权

评论回复
8
磨砂| | 2018-11-9 09:07 | 只看该作者
晓伍 发表于 2018-11-8 12:13
影子寄存器的引入是ARM的一个特点(X86,PowerPC都没有)。我们知道,ARM有16个通用寄存器,这16个通用寄 ...

感谢热心解答

使用特权

评论回复
9
晓伍| | 2018-11-9 09:20 | 只看该作者

客气了 举手之劳

使用特权

评论回复
10
huzi2099| | 2018-11-9 12:14 | 只看该作者
开启预装载就行了

使用特权

评论回复
11
shenjinliang02|  楼主 | 2018-11-12 09:49 | 只看该作者
airwill 发表于 2018-11-9 07:00
用一个定时器,可以计时并同时产生PWM波吗? 可以,  可以用定时器的溢出中断计时 ...

用溢出中断计时,适合脉宽固定的吧,我现在脉宽需要每20MS改变一次,脉宽改变了,定时基准变了,中断次数肯定就得改变了吧。

使用特权

评论回复
12
香水城| | 2018-11-12 10:13 | 只看该作者
只是大致了解你描述什么了。
你注意修改ARR/CCR时是否开启了影子寄存器的预装功能;
如果2个定时器都启用了中断去修改,注意优先级的合理安排,以及中断服务程序要简洁点;

使用特权

评论回复
13
airwill| | 2018-11-12 19:45 | 只看该作者
shenjinliang02 发表于 2018-11-12 09:49
用溢出中断计时,适合脉宽固定的吧,我现在脉宽需要每20MS改变一次,脉宽改变了,定时基准变了,中断次数 ...

溢出中断里计时, 你可以加重装寄存器, 而不是加一

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

14

帖子

1

粉丝