This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

RE: CC3235MODSF: UART 串口中断

对最先问题的回答。

仔细看了UART2的实现源码,慢慢理解了UART2_Mode_CALLBACK模式的工作过程,才明白版主给的答案。

问题:实现接收0x10 02开头,0x10 03结尾的数据包。

答案:

a. 准备好一个用户缓冲(rx_my_buf)。

b. 配置串口参数:readmode= UART2_Mode_CALLBACK

c. 执行UART2_read(handle, rx_my_buf, sizeof(rx_my_buf));     

d. 在read的回调函数(如readCallback)中实现:处理刚刚接收的N个数据,并当bytesRead == readCount时,!!重新调用UART2_read()。

这样,就一直read下去,不断地、默默地读取着。读到的数据放在了UART2驱动自带的RingBuf,再放入用户缓冲rx_my_buf。

e. 用户处理数据时,就在readCallback()。就能判断读到的数据:是否有0x10 02的头,0x10, 03的尾。这样再发消息过去。

从UART2源码,知道一个方法:传输必用DMASunglasses

疑惑的是RingBuf的环形缓冲,怎么应对DMA的自动自增模式,不怕越出Ringbuf的边界吗。

20220214补充:RingBuf中,做了和DMA的匹配,即将RingBuf当前位置至Ringbuf的边界之间的个数作为本次DMA的传输个数,这样,DMA对地址自增时,不会越界RingBuf的buf的边界。