搜索
bottom↓
回复: 17

STM32F103串口一直收到0x0d

[复制链接]

出0入0汤圆

发表于 2020-3-8 10:57:12 | 显示全部楼层 |阅读模式
很多年没用STM32了,这次调试个GSM模块,又被虐了
用的是串口1与SIM800C通信,在DEBUG下看,模块注册成功,设置了TEXT模式后,ARM串口1就一直不停收到 0x0d。
请各位指教

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入475汤圆

发表于 2020-3-8 11:04:17 来自手机 | 显示全部楼层
是你程序不对还是? 直接把模块接到串口助手上调试岂不直接太多?

出0入0汤圆

 楼主| 发表于 2020-3-8 11:20:40 | 显示全部楼层
直接用PC串口调试没问题

出0入4汤圆

发表于 2020-3-8 11:40:17 | 显示全部楼层
共地了么?有可能是干扰。

出0入0汤圆

 楼主| 发表于 2020-3-8 11:56:37 | 显示全部楼层
共地了的

出0入475汤圆

发表于 2020-3-8 12:11:29 来自手机 | 显示全部楼层
那就是你mcu程序问题啊,还有啥麻烦的,串口处理出了问题:)

出0入0汤圆

 楼主| 发表于 2020-3-8 12:17:20 | 显示全部楼层
               
  1. void USART2_IRQHandler(void)                       
  2. {
  3.                         u8 Res=0;
  4.                         Res =USART_ReceiveData(USART2);
  5.                         Uart2_Buf[First_Int] = Res;           
  6.                         First_Int++;                                       
  7.                         if(First_Int > Buf2_Max)                      
  8.                         {
  9.                                 First_Int = 0;
  10.                         }   
  11. }
复制代码

出0入0汤圆

 楼主| 发表于 2020-3-8 12:17:44 | 显示全部楼层
改用串口2也有同样问题

出0入475汤圆

发表于 2020-3-8 12:23:29 来自手机 | 显示全部楼层
记者程序在干嘛?没有涉及到任何处理内容啊,还有你这是中断?是否要手动清中断?不清当然就是永远有数据收到...

出0入0汤圆

 楼主| 发表于 2020-3-8 12:31:42 | 显示全部楼层
多谢各位回复,我用的是卖家给的例程。
主要是时间比较紧,我自己研究一下

出0入0汤圆

 楼主| 发表于 2020-3-8 13:01:25 | 显示全部楼层
1a2b3c 发表于 2020-3-8 12:23
记者程序在干嘛?没有涉及到任何处理内容啊,还有你这是中断?是否要手动清中断?不清当然就是永远有数据收 ...

多谢老哥,这卖家的例程也太业余了

出0入8汤圆

发表于 2020-3-8 15:09:07 | 显示全部楼层
单片机的波特率、晶振这些选择对了吗

出0入0汤圆

 楼主| 发表于 2020-3-8 21:21:38 | 显示全部楼层
xujihu 发表于 2020-3-8 15:09
单片机的波特率、晶振这些选择对了吗

多谢,已经解决了。
卖家提供的例程,中断函数太坑,没有清中断

出0入0汤圆

发表于 2020-3-9 09:03:57 | 显示全部楼层
中断类型建议判断下,此外UART接收是读DR清中断,不需要清。

出0入0汤圆

发表于 2020-3-9 10:44:07 | 显示全部楼层
程序看着没问题啊,读DR会自动请接收中断的。估计配置串口时不仅开了接收中断,还开了其他中断,例如空闲中断。清空闲中断的方式就比较特殊,要先读SR再度DR

出0入0汤圆

 楼主| 发表于 2020-3-9 11:09:03 | 显示全部楼层
  1. void USART1_IRQHandler(void)                       
  2. {
  3.         u8 Res=0;
  4.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  5.         {
  6.                   USART_ClearITPendingBit(USART1, USART_IT_RXNE);       
  7.                   Res =USART_ReceiveData(USART1);
  8.                         Uart1_Buf[First_Int] = Res;         
  9.                         First_Int++;                                       
  10.                         if(First_Int > Buf1_Max)                      
  11.                         {
  12.                                 First_Int = 0;
  13.                         }   
  14.         }                       
  15. }        
复制代码

目前,改成这样就没问题了

出0入0汤圆

发表于 2020-3-9 11:56:22 | 显示全部楼层
等效偷懒的写法:
  1. void USART1_IRQHandler(void)
  2. {
  3.     if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  4.     {
  5.         Uart1_Buf[First_Int++] = USART1->DR;
  6.         First_Int %= Buf1_Max;
  7.     }
  8. }
复制代码

出0入0汤圆

 楼主| 发表于 2020-3-9 19:35:10 | 显示全部楼层
styleno1 发表于 2020-3-9 11:56
等效偷懒的写法:

多谢老哥
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-3 20:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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