ch592x的单字节发送直接操作寄存器的问题
  1. 情况描述:需要通过592的3个串口和多个设备通讯,其中一个串口是和成品模组通讯,移植模组端的通讯文件到592的工程中,因为模组端的文件有较多宏定义和592库函数中的宏定义冲突,所以没有调用串口单字节发送库函数UART2_SendByte(val);而是直接操作寄存器(*((volatile unsigned char  *)0x40003808)) = val;进行单字节的发送。

  2. 移植后测试,发现UART2单字节发送会不稳定。目前根据手册加了一条语句while(R8_UART2_TFC != 0); 之后数据就稳定了。

  3. 请问如果不加这个while有什么办法能确保数据发送的稳定

  4. 如果必须要加这个while   会不会对我其他串口中断产生影响?其他两路串口也在不停的收发数据!

    微信图片_20250102162135.png

每个串口的发送FIFO都是最大8字节。代码里按字节发,只能填慢点,填快了会覆盖还没来得及发出的数据。

或者可以用中断方式发出,在FIFO空/使能发送中断时,会触发UART发送中断。

串口发送中断的应用 - JayWell - 博客园


只有登录才能回复,可以选择微信账号登录