[技术讨论] USART发送数据需要延时200us

[复制链接]
6191|11
 楼主| 准备植发程序猿 发表于 2023-4-7 14:15 | 显示全部楼层 |阅读模式
本帖最后由 准备植发程序猿 于 2023-4-7 14:26 编辑

usart1使用sp3232芯片通讯,发送一个字节数据后需要延时200us,不然上位机接收到错误数据
cainiao518 发表于 2023-4-7 15:02 | 显示全部楼层
波特率多少?
 楼主| 准备植发程序猿 发表于 2023-4-7 15:17 | 显示全部楼层
本帖最后由 准备植发程序猿 于 2023-4-7 15:19 编辑

波特率57600
LcwSwust 发表于 2023-4-7 15:28 | 显示全部楼层
从硬件上讲,57600波特率发送一字节确实需要大约200us的时间,发完一字节才能发下一字节,一般可以根据状态位来判断是否发送完成.
hjl2832 发表于 2023-4-7 17:16 | 显示全部楼层
像STM32 ,要判断发送是否完成,正确的做法是判断发送完成标志位,而不是发送寄存器空标志位。这2个标志位是有区别的。

评论

你说的是TC标志位吧  发表于 2023-4-7 17:38
timerc 发表于 2023-4-7 17:26 | 显示全部楼层
是不是没等发送完成就开始写DR,
 楼主| 准备植发程序猿 发表于 2023-4-7 19:40 | 显示全部楼层
感谢大家,问题已解决。把
if(usart_flag_get(USART1,USART_TDBE_FLAG )!=RESET)
{
        usart_data_transmit(USART1,  *Buffer);
}
改成
usart_data_transmit(USART2,  *Buffer);
while(usart_flag_get(USART2,USART_TDBE_FLAG)==RESET);
就可以了
LorenandGabriel 发表于 2023-4-8 11:18 | 显示全部楼层
学到了呀,串口居然还有延时这种要求
icecut 发表于 2023-4-9 10:06 | 显示全部楼层
LorenandGabriel 发表于 2023-4-8 11:18
学到了呀,串口居然还有延时这种要求

最初 串口 带fifo. 一般不会超. 后面都降低成本要求用dma了.
天意无罪 发表于 2023-4-9 11:51 | 显示全部楼层
串口发送数据肯定不能简单粗暴只管写,还要判断上次数据是否发送完成才能发送下一个字节,用查询法或者中断法,或者用DMA方式。
1pwdzsj1 发表于 2023-4-10 15:03 | 显示全部楼层

USART发送数据需要延时200us

理论串口发送数据是不需要延时的,串口传输数据每个字节都是有停止位的,会根据停止位来判断是否一个字节数据。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

32

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部