OpenEdv-开源电子网

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

突然间对串口通讯进入浆糊模式了

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-4-25
在线时间
1 小时
发表于 2019-4-25 15:35:33 | 显示全部楼层 |阅读模式
1金钱
主要是接收字符串这方面的问题。这是我写的一个中断函数,然后在串口助手发送1234。根据我的理解,因为串口都是8位8位发的,虽然我1234是同时从电脑串口发出,但实际操作是1发出进入一次中断,然后2发出进入一次中断。那么输出结果不应该是a1a2a3a4吗,但实际结果为a1a2a4。a3并没有出现。

我的理解是中断还没处理完,下个一中断就进入然后覆盖了之前的数据。但如果我把Usart_SendByte(USART1, 'a');这一句注释掉,不管我发多长的数据(比如1234567890),数据都不会丢失。

大佬们能不能帮小弟解释下,谢谢。

[mw_shl_code=c,true]void USART1_IRQHandler(void)
{
  uint8_t recv;
   
  if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  {
    Usart_SendByte(USART1, 'a');
    recv = USART_ReceiveData(USART1);
    Usart_SendByte(USART1, recv);
  }
}[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

317

帖子

0

精华

高级会员

Rank: 4

积分
863
金钱
863
注册时间
2015-2-12
在线时间
354 小时
发表于 2019-4-25 15:55:15 | 显示全部楼层
发送一个字符要消耗1ms(9600波特率),所以你不可以在接收中断中发送数据。 除非你串口助手发送每一个字符时,停留几毫秒。另外,你的程序中,没有清中断标志位
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-4-25
在线时间
1 小时
 楼主| 发表于 2019-4-25 20:52:08 | 显示全部楼层
csmjmcc 发表于 2019-4-25 15:55
发送一个字符要消耗1ms(9600波特率),所以你不可以在接收中断中发送数据。 除非你串口助手发送每一个字符时 ...

谢谢指点,意思是我一次性发送1234,系统处理起来是一个连续的过程,然后我在中断中发送其他数据,就打乱其发送节奏,也就是数据被我的a覆盖了。是不是能这么理解。
还有,中断标志位我记得好像是访问过自动清零的吧。(初学,可能记错了)
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2019-4-25 23:20:34 | 显示全部楼层
电脑发一个字节的时间,中断里要发两个字节,中断接收不过来
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-4-25
在线时间
1 小时
 楼主| 发表于 2019-4-26 10:00:34 | 显示全部楼层
d1z1y2 发表于 2019-4-25 23:20
电脑发一个字节的时间,中断里要发两个字节,中断接收不过来

谢谢,也就是我说的还没发送完,另一个中断就产生了对吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 12:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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