STM32输入捕获触发DMA的配置代码,就是捕获一个上升沿后,让DMA往一个引脚输入一个数据

STM32输入捕获触发DMA的配置代码,就是捕获一个上升沿后,让DMA往一个引脚输入一个数据,第1张

其中TI1为CPU引脚的输入,经过滤波(新的电平必须保持一定时间才认为有效,以防止高频噪声的干扰)後进入後继的边沿极性选择,最後经过分频作为捕获信号的输入。这里TI2F为相邻通道经过滤波後的信号,也就是说一个引脚的信大搭号可作为TIMx两个通道的输入捕获信号,这样信号只需要接一个CPU引脚就可以触发两个时钟通道了。

将输入方波接到CPU一个引脚上,假设该引脚对应於图上的TI1,设定其在下降沿触发通道1的捕获事件,而其在上升沿触发通道2的捕获事件,事件发生後申请DMA将捕获的比较/捕获寄存器的值保存起来。示例代码如下:

其他部分与第3节中比较输出的代码基本一致。

5 总结

测试中STM32系列微控制器工作在36MHz,可产生出1路最高1.5MHz的方波,可捕获1MHz的方波,哪敏而此时CPU的执行几乎不受影响。这里采用DMA来实现方波的产生和捕获,极大地提高了系统的实时性和执行效率,减少了中断次数,节省了宝贵的资源。这种方案也可以用来实现高效的模拟串口。

DMA的传输需要多个系统周期的,例如采用DMA实现内存到内存的搬移,每次传输需要5个系统周期,而内存到外围的一次传输需要2个滚缓拿APB周期+5个AHB周期。这样用上述方法产生的方波最小沿(低沿或高沿)为14个周期(包括比较/捕获寄存器到内部影子寄存器的传输等)。若有更高的需求,应考虑其他的实现方案。另外,若有多个DMA同时工作,应考虑最坏情况下DMA的响应时间,以避免错误发生。

好几天没人回答这个问题,不知道你是否还关心这个答案。

1,旅轮ADC0809并不适合ARM处理器。因为目前流行的ARM处理器总线电压都是3.3V的,这个ADC0809是相当古老的ADC芯片,是5V的器件。为了连接这个器件到ARM的总线,必须通过电平转换器件。

2,ADC0809不是一个标准的SRAM Like器件,因此不能直接挂到ARM的外部数据总线上。建议的连接方法是使用ARM的GPIO来连接ADC0809器件。

3,目前不带拆丛信片内ADC的ARM芯片已经不多了,除了一些较为高级的ARM芯片,一般ARM7和低端ARM9以及最新的ARM-M3/M0基郑族本上都带有ADC。可以满足一般的AD转换需要。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12359482.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存