打印

STM32 定时器比较输出,使用DMA,输出脉冲,第一个脉冲出错

[复制链接]
6319|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hflyer|  楼主 | 2012-9-4 11:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
新人发帖,请多关注,这个问题已经折腾一天了,翻了所有21上类似的帖子,没找到答案
我现在使用定时器3通道1,对应DMA1通道6 ;比较输出,输出模式是翻转

定时器分频后为1MHz,比较值分别是 (1000、2000、3000、4000……10000)10个数

DMA传送次数10次,产生10次翻转即5个脉冲,我预计应该是5个周期2ms的脉冲

示波器测试发现,第一次比较值是65ms 以后9个比较值都是1ms正常



比较输出波形问题.png (5.36 KB )

比较输出波形问题.png
沙发
hflyer|  楼主 | 2012-9-4 11:25 | 只看该作者
硬件调试发现第一个CCR1值的确是通过DMA读到了,但是没有起作用

硬件调试.png (6.53 KB )

硬件调试.png

使用特权

评论回复
板凳
figo20042005| | 2012-9-4 20:58 | 只看该作者
第一次值刚好越过了以上给定比较值,所以等一圈后再回来进行比较了,所以时间长

使用特权

评论回复
地板
hflyer|  楼主 | 2012-9-4 21:13 | 只看该作者
3# figo20042005

用示波器测了,的确是刚好计数器跑了一圈

感觉是定时器一启动就是从第一个比较值开始计数,而不是从0计数

使用特权

评论回复
5
figo20042005| | 2012-9-4 21:22 | 只看该作者
嗯,你把计数值清掉再开启,看还是不是从比较值开始计数

使用特权

评论回复
6
hflyer|  楼主 | 2012-9-4 21:32 | 只看该作者
5# figo20042005

只有第一次启动DMA的时候会,以后再开启就没这问题了,应该是什么地方设置不对;

DMA的寄存器一目了然,定时器就比较复杂了,手册上对比较输出描述的很少,关于比较输出触发DMA只有一句话……

使用特权

评论回复
7
figo20042005| | 2012-9-5 14:49 | 只看该作者
这个就要多试试了,再找下资料或例程了

使用特权

评论回复
8
香水城| | 2012-9-5 15:43 | 只看该作者
ST标准例程库的DMA例程库里有个ADC TIM DMA例程

不知道能不能给你点参考意见

使用特权

评论回复
9
hflyer|  楼主 | 2012-9-5 19:22 | 只看该作者
8# 香水城

谢谢香主帮忙,今天参考库里带的例程,用中断方式没有问题,DMA用在串口也很正常

后来好好看了定时器初始化代码,CCR应该用DMA读取,我在初始化定时器时候,自作聪明地把DMA对应的数组第一个值赋到了CCR里面

把这多余的步骤去掉之后就正常了,但是没找到为啥不能直接给CCR赋值

使用特权

评论回复
10
hflyer|  楼主 | 2012-9-7 19:21 | 只看该作者
基本测试OK,现在DMA发送脉冲已完成,准备做一个捕获加DMA做接收使用

结贴

使用特权

评论回复
11
一株水草| | 2015-9-17 22:09 | 只看该作者
hflyer 发表于 2012-9-7 19:21
基本测试OK,现在DMA发送脉冲已完成,准备做一个捕获加DMA做接收使用

结贴 ...

你好,我想问一下,我也是用的定时器触发DMA产生占空比可变的pwm波,为什么CCR的值没有变化呢,一直是第一个值

使用特权

评论回复
12
steel2006| | 2016-2-29 15:30 | 只看该作者
楼主能发下TIM 和 DMA的初始化代码吗?

使用特权

评论回复
13
lsz318| | 2018-8-13 10:03 | 只看该作者
,pwm模式,CC1捕获中断,DMA传输个数要为N+1;否则出错,

使用特权

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

本版积分规则

0

主题

22

帖子

0

粉丝