|
****香版主请教USART1串口与DMA-5的一点疑问
[复制链接]
串口使用DMA接收。
手册上有这么说明: 溢出错误 如果RXNE 还没有被复位,又接收到一个字符,则发生溢出错误。数据只有当 RXNE 位被清零后才能从移位寄存器转移到RDR 寄存器。RXNE 标记是接收到每个字节后被置位的。如果下一个数据已被收到或先前DMA 请求还没被服务 时,RXNE 标志仍是置起的,溢出错误产生。 当溢出错误产生时: ● ORE 位被置位。 ● RDR 内容将不会丢失。读USART_DR 寄存器仍能得到先前的数据。 ● 移位寄存器中以前的内容将被覆盖。随后接收到的数据都将丢失。 ● 如果RXNEIE 位被设置或EIE 和DMAR 位都被设置,中断产生。 ● 顺序执行对USART_SR 和USART_DR 寄存器的读操作,可复位ORE 位 现在加入让DMA接收200字节,后DMA传输完毕并停止工作。 但此时仍有数据往串口发送,于是产生RXNE 标志 接着:再有数据往串口发送,此时数据没有被读出,而且RXNE已经置位,便会产生ORE溢出标志。 情况发生:“RDR 内容将不会丢失。读USART_DR 寄存器仍能得到先前的数据” 即是串口不在接收数据!非的清除相关标志? 偶遇到就是这情况,每次初始化DMA同时对串口的状态标志清零,读RDR.确实罗说啊! 有什么更合理的方法?
|
|