完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
当预先不知道要接收的数据时,如何使用 DMA 在 UART 上读取数据的信息。
在STM32中,通常有以下几种模式:
在STM32中DMA有norma和circular两种模式,每种模式在数据进行传输时需要告知传输数据的大小
U(S)ART 大多数 STM32 系列U(S)ART都有带空闲(IDLE )检测。 如果没有IDLE检测,其中一些具有可编程延迟的接收器超时功能。 如果这甚至不可用,则应用程序可以仅使用带有 DMA 的轮询模式,示例如下。 IDLE模式或接收超时中断,可用于判断数据有么有接收完整。 假设我们以 115200 波特接收了 10 个字节。 115200 波特的每个字节在 UART 线上大约需要 10us,总共 100us。 IDLE中断将在检测到 RX 线上的 1 个字符不活动时通知应用程序,这意味着在最后一个字符后 10us 之后。应用程序可以对此事件做出反应并相应地处理数据。 DMA+U(S)ART 还是上述例子,程序等待接收20个字节,但实际只接收到了14个数据,如何解决这一问题。 解决方案
本节描述了可能的 4 种可能情况和另外一种情况,解释了应用程序需要 HT/TC 事件的原因 图片上使用的缩写 R: 下次读取数据的位置 W: DMA 将在内存中保存下一个字节位置 HT: 由 DMA 触发的半传输事件 TC: 由 DMA 触发的传输完成事件 IDLE: UART是否空间 DMA
应用程序通过 IDLE 线路检测或 DMA TC/HT 事件获得通知 应用程序只有在收到 3 个中断中的任何一个时才必须处理数据 P:应用程序不需要轮询新的变化 P:应用程序接收事件中断 P:应用程序可能会进入低功耗模式以延长电池寿命(如果使用电池) C:在中断中读取(处理)数据。 我们努力尽快执行中断程序 C:长时间中断执行可能会破坏应用程序中的其他兼容性 传入数据的处理来自 2 个中断向量,因此重要的是它们不会相互抢占。 将两者设置为相同的抢占优先级! |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2956 浏览 16 评论
3457 浏览 1 评论
8996 浏览 16 评论
4050 浏览 18 评论
1107浏览 3评论
572浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1858浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 12:51 , Processed in 1.280165 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号