查看: 1655|回复: 4

FM33LC025N使用UART0最后一个字节FF问题

[复制链接]

1

主题

3

帖子

41

积分

初级工程师

Rank: 1

积分
41
发表于 2022-2-28 16:15:11 | 显示全部楼层 |阅读模式
在使用FM33LC025N UART0接受485传感器数据时,发现MCU发送的最后一个字节总是为0xFF,调试了半天,最后发现是发送后需要等待一定时间,目前是加了1m后再切换接收485传感器数据,希望有遇到同样问题的参考下,若有更好方法也请分享下
void SerialPutStr(UART_Type *UARTx, unsigned char *p, unsigned short int leng)
{
  unsigned short int i;
        if(UARTx == UART0)
                RS485_TX;
  FL_UART_ClearFlag_TXShiftBuffEmpty(UARTx);
        for(i=0;i<leng;i++)
  {
    FL_UART_WriteTXBuff(UARTx, (uint8_t)*p++);
    while(FL_SET != FL_UART_IsActiveFlag_TXBuffEmpty(UARTx));       //等待发送完成
  }
        FL_DelayMs(1);//软件延时
        if(UARTx == UART0)
                RS485_RX;
}

回复

使用道具 举报

151

主题

845

帖子

4395

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4395
发表于 2022-3-7 16:08:34 | 显示全部楼层
问题出在 发送缓存器空,不是已经发送完成了。可能移位寄存器还在发送。 判断改成移位寄存器空。
FL_UART_IsActiveFlag_TXShiftBuffEmpty(UARTx));       //等待发送完成
  }
回复

使用道具 举报

0

主题

1

帖子

136

积分

中级工程师

Rank: 2

积分
136
发表于 2022-3-23 15:10:18 | 显示全部楼层
和楼主一样,不加延时,发送最后一个字节总是为0xFF,加了延时长时间测试会
使对端接收数据不完整,知道是移位寄存器还在发送,但是怎么判断 ?                                                  
此代码不是吗?--> while(FL_SET != FL_UART_IsActiveFlag_TXBuffEmpty(UARTx));  
不加while判断什么也发不出.
麻烦给出具体代码...
回复

使用道具 举报

151

主题

845

帖子

4395

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4395
发表于 2022-3-24 09:00:52 | 显示全部楼层
wowccba 发表于 2022-3-23 15:10
和楼主一样,不加延时,发送最后一个字节总是为0xFF,加了延时长时间测试会
使对端接收数据不完整,知道是移位 ...

代码不是在2楼给了么
回复

使用道具 举报

1

主题

5

帖子

119

积分

中级工程师

Rank: 2

积分
119
发表于 2022-5-10 10:06:52 | 显示全部楼层
直接用485转232芯片,方向管脚会自动切换的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表