OpenEdv-开源电子网

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

求助大神,关于USART_SendData函数用于中断服务中出现的问题i

[复制链接]

0

主题

0

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2022-9-4
在线时间
2 小时
发表于 2022-9-4 21:45:29 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 axaonollll 于 2022-9-4 21:56 编辑

昨天晚上学了STM32F103串口寄存器库函数配置方法,然后在实验过程中遇到了这样的问题。
void USART1_IRQHandler(void)
{
   u8 res;
         if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
      res= USART_ReceiveData(USART1);
      res= 'a';
      USART_SendData(USART1,res);  

  }
}

当我把这里的res给定一个值时,单片机给电脑发送的一直会比接收的多两个。比如电脑向单片机发送空白,收到的就会是两个a,发送随便一个字,返回的又是三个a。
下载 (1).png 下载.png
我专业基本上不接触c语言,起初我以为是自己对数据类型理解的问题,但是也不应该是出现这种情况;后来考虑了是不是寄存器收发延迟的问题,但是如果res使用USART_ReceiveData又没有这种情况,从昨晚折腾到现在了,还是没搞明白为啥,求帮助!!!

最佳答案

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

多两个是正常的。你看你的串口调试助手那里,是勾选了发送新行的。也就是说,你发送“11”,实际上发送的数据是“11\r\n”,\r\n就是这个回车换行。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

912

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4524
金钱
4524
注册时间
2019-9-4
在线时间
916 小时
发表于 2022-9-4 21:45:30 | 显示全部楼层
多两个是正常的。你看你的串口调试助手那里,是勾选了发送新行的。也就是说,你发送“11”,实际上发送的数据是“11\r\n”,\r\n就是这个回车换行。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 13:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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