OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2721|回复: 2

为什么发送函数需要加延时?

[复制链接]

138

主题

362

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2012-9-17
在线时间
29 小时
发表于 2015-9-6 14:20:24 | 显示全部楼层 |阅读模式
5金钱
碰到一个比较奇怪的问题,这是串口1的发送函数:
void USART1_Send_Data(u8 *buf,u8 len)
{
u8 t;
  for(t=0;t<len;t++) //循环发送数据
{
while((USART1->SR&0X40)==0);//等待发送结束  
USART1->DR=buf[t];
delay_ms(10);
}  
while((USART1->SR&0X40)==0);//等待发送结束
}
大家注意到那个延时函数没?延时10个毫秒,很奇怪,如果不加这个延时,我的串口调试助手接收到的数据偶尔就会有错, 只有加了这延时后,接收到的数据才是正确的,我的理解是,这个地方是不需要延时的,但是为什么不加延时,就会偶尔出现错误呢?请大家指教。



最佳答案

查看完整内容[请看2#楼]

回复【2楼】tivonliu: --------------------------------- 串口助手有问题。谢谢了!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

138

主题

362

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2012-9-17
在线时间
29 小时
 楼主| 发表于 2015-9-6 14:20:25 | 显示全部楼层
回复【2楼】tivonliu:
---------------------------------
串口助手有问题。谢谢了!
回复

使用道具 举报

0

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2015-8-29
在线时间
5 小时
发表于 2015-9-6 14:30:54 | 显示全部楼层
到汇编窗口看看while((USART1->SR&0X40)==0);,是否被编译器优化了?或者可以看看调整下优先级。
从不发帖,发帖必申酷。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-21 19:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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