OpenEdv-开源电子网

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

串口接收中断接收数据调试成功

[复制链接]

53

主题

566

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2092
金钱
2092
注册时间
2017-2-11
在线时间
306 小时
发表于 2020-6-1 08:58:44 | 显示全部楼层 |阅读模式
本帖最后由 jiangyy 于 2020-6-3 13:47 编辑

串口接收准备中断使能 UART1->UCR1 |= (1 << 9);然后根据USR1的第九位RRDY状态寄存器判断是否接收到数据,在串口中断里面写如下代码:
if((UART1->USR1) & (1 << 9))
{
  处理接收到的数据;
}
UART1->USR1 &= ~(1 << 9); 清除接收准备状态位

具体见图片,测试结果正常。但是有人知道 MobaXterm软件怎么给串口发送数据的吗?我是用MobaXterm接收数据,发送通过串口调试助手发送数据。有人能告知一下MobaXterm或PUTTY软件怎么给串口发送数据?谢谢,希望我分析的同事,有贴友们帮我解决一下我的问题。



a38092b69f325a90bf53c605d0bf07c.jpg
12cb541f608bf121fbb648fc577a722.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

53

主题

566

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2092
金钱
2092
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2020-6-3 22:07:05 | 显示全部楼层
有需要的可以下载

13_uart.zip

470.58 KB, 下载次数: 70

回复 支持 反对

使用道具 举报

4

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2019-7-17
在线时间
57 小时
发表于 2020-6-3 22:31:20 | 显示全部楼层
按照你这样写中断处理函数,我这还是不行,中断可以进去,但是主函数卡住了。

PS:MobaXterm或PUTTY 直接在窗口输入就是发送到串口,你可以再中断函数里添加回显就能看到自己输入的字符。
或者可以在这两个工具设置一下【发送新行】
或者用 xshell 设置 【new line mode】
回复 支持 反对

使用道具 举报

53

主题

566

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2092
金钱
2092
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2020-6-4 13:54:19 | 显示全部楼层
anqh 发表于 2020-6-3 22:31
按照你这样写中断处理函数,我这还是不行,中断可以进去,但是主函数卡住了。

PS:MobaXterm或PUTTY 直 ...

可以在这两个工具设置一下【发送新行】,能截图我看一下吗?我可以正常使用,你主循环使用了什么导致卡死了?
回复 支持 反对

使用道具 举报

53

主题

566

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2092
金钱
2092
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2020-6-4 13:55:26 | 显示全部楼层
anqh 发表于 2020-6-3 22:31
按照你这样写中断处理函数,我这还是不行,中断可以进去,但是主函数卡住了。

PS:MobaXterm或PUTTY 直 ...

你直接用我的代码烧录进去,不可以运行吗?
回复 支持 反对

使用道具 举报

4

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2019-7-17
在线时间
57 小时
发表于 2020-6-4 22:12:50 | 显示全部楼层
比较你这代码和我之前基于原子改的代码,一点一点排除终于发现问题了
你用的是uart_setbaudrate(UART1, 115200, 80000000)配置波特率,我那个是用寄存器配置的,换了后中断可以进,主函数也正常了。

没用过MobaXterm或PUTTY这两个应用,但是你可以把中断处理函数改一下不用【\r\n】结束,直接用【\n】为结束符
  1. u8 Res = 0;

  2.     if((UART1->USR1) & (1 <<  9)) /* 是否是RX中断 */
  3.     {
  4.      Res = UART1->URXD;
  5.      if((USART_RX_STA & 0x8000) == 0)
  6.     {
  7.         if(Res == 0x0d)
  8.         {
  9.              USART_RX_STA |= 0x8000;
  10.        }
  11.       else
  12.       {
  13.            USART_RX_BUF[USART_RX_STA & 0X3FFF] = Res;
  14.            USART_RX_STA++;
  15.            if(USART_RX_STA > (USART_REC_LEN - 1))
  16.            {
  17.                   USART_RX_STA = 0;
  18.            }
  19.            else
  20.            {
  21.                 putc(Res);
  22.            }
  23.      }
  24.   }
  25.     }
复制代码


回复 支持 反对

使用道具 举报

53

主题

566

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2092
金钱
2092
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2020-6-5 10:47:33 | 显示全部楼层
anqh 发表于 2020-6-4 22:12
比较你这代码和我之前基于原子改的代码,一点一点排除终于发现问题了
你用的是uart_setbaudrate(UART1, 11 ...

我用串口助手调试,可是显示的是乱码,可能是串口助手不支持  UT8。
回复 支持 反对

使用道具 举报

3

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2019-6-18
在线时间
87 小时
发表于 2020-12-7 23:16:42 | 显示全部楼层
anqh 发表于 2020-6-3 22:31
按照你这样写中断处理函数,我这还是不行,中断可以进去,但是主函数卡住了。

PS:MobaXterm或PUTTY 直 ...

并不是卡死了,可能是被优化了优化等级你调整为0试试
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2019-12-10
在线时间
55 小时
发表于 2022-8-21 10:26:30 | 显示全部楼层
本帖最后由 IrohaIsshiki 于 2022-8-22 19:51 编辑

我用大佬的程序,刚上电就中断了很多次,还收到一些莫名其妙的内容。这是为什么?



您发送的消息为:
&#9618;&#9618;q&#9618;B&#9618;&#1628;&#9618;mO&#9618;q&#9618;# F<&#9618;&#9618;      &#9618;&#9618;&#9618;&#9618;&#9618;&#9618;+&#9618;&#9618;&#9618;&#9618;&#9618;(&#9618;
&#9618;1FO&#9618;q&#9618;B&#9618;&#9618;H&#9618;R&#9618;&#9618;&#9618;&#9618;&#9618;#&#9618;    &#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618; F&#9618;&#9618;h&#9618;iF#&#9618;/&#9618;B
+&#9618;&#9618;&#9618;p&#9618;&#9618;&#9618;&#9618;#&#9618;&#9618;0&#9618;&#9618;p&#9618;p&#9618;&#9618;&#9618;&#9618;H&#9618;&#9618;&#9618;O&#9618;@B               &#9618;3&#9618;


回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 10:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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