STM32的UART不带FIFO,通讯速度高时不使用DMA开销太大(LM3S有16级深的FIFO可以7/8满触发中断,带超时功能,亮点啊)。打算用DMA配置成外设到内存的数据传输方式实现数据接收,实现下来确实有难度啊。
具体如下
配置DMA时,必须先指定接收BUF大小,DMA传输中断可选择为传输错误、半传输或传输完成时产生。
关键问题是实现通讯时事先不知道要接收的数据包大小,对端不同类型数据包发送完成时DMA传输进度也会各不相同(和配置的DMA buf深度没有没系),无法保证所有包会产生半传输或传输完成中断。考虑增加一个定时器发送消息提示DMA进度,但高速通讯时,定时器的开销也较大。不知道有没有更好的办法。
应用中需要高传输速度与快速响应。STM32似忽很难实现啊。
实现不行只能放弃使用DMA,直接中断处理了。
此帖出自
小平头技术问答
ATMEL的DMA是支持超时中断的,类似于LM3S的FIFO超时中断。
不过DMA收发的话,对MCU的资源占用是非常小的,这是UART+FIFO不可比拟的。
一周热门 更多>