野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20653|回复: 8

USART—串口通讯中断函数问题请教

[复制链接]
发表于 2021-2-2 21:22:47 | 显示全部楼层 |阅读模式
本帖最后由 奔跑的五花右丶 于 2021-2-2 21:24 编辑

按书本《【野火®】零死角玩转STM32—F103霸道》第21章 USART—串口通讯的第一个例程——“21.5 USART1 接发通信实验”编写的程序,中断函数内我加了如图两句,目的是为了换行显示,功能正常的 野火论坛202102022119077439..png
但是如果我想加一句提示“收到的数据是:” ,如图所示,程序收发就不正常,不知道什么原因
野火论坛202102022120451948..png 野火论坛202102022122314655..png
求助,谢谢!


回复

使用道具 举报

发表于 2021-2-3 08:15:12 | 显示全部楼层
发送用中断了吗,如果用了,就很有可能出现问题,别在中断中同时收发
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-3 08:35:31 | 显示全部楼层
a5820736 发表于 2021-2-3 08:15
发送用中断了吗,如果用了,就很有可能出现问题,别在中断中同时收发

没有哦,只开了接收中断 野火论坛202102030835171346..png
回复 支持 反对

使用道具 举报

发表于 2021-2-3 09:13:20 | 显示全部楼层
可以试试换下收发顺序,先接收再发送
回复 支持 反对

使用道具 举报

发表于 2021-2-3 09:14:51 | 显示全部楼层
这个问题挺有意思的。我觉得是因为Usart_SendStrings和USART_ReceiveData都是操作DR寄存器造成的。
建议你在中断先接收数据,再发送其他数据。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-3 10:02:11 | 显示全部楼层
还有梦与你 发表于 2021-2-3 09:14
这个问题挺有意思的。我觉得是因为Usart_SendStrings和USART_ReceiveData都是操作DR寄存器造成的。
建议你 ...

谢谢
我觉得也是因为操作了多次DR寄存器引起的,就是不知道改变了啥。
我试过中断中先接收数据,然后再发送,还是一样。。。不知道为啥
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-3 10:02:50 | 显示全部楼层
ZZZ_XXJ 发表于 2021-2-3 09:13
可以试试换下收发顺序,先接收再发送

谢谢
我有试过先收后发还是一样。。。不知道为啥
回复 支持 反对

使用道具 举报

发表于 2021-2-3 10:39:37 | 显示全部楼层
奔跑的五花右丶 发表于 2021-2-3 10:02
谢谢
我有试过先收后发还是一样。。。不知道为啥

又看了下代码,发现一个小问题,串口接收中断是每接收一个字符就会中断一次,然后串口助手发过来的也是字符。

所以如果想实现“收到的数据是:1234567”这样的效果,就要等串口把所有字符都接收完了才行。

可以用"\r\n"来判断是否接收完,如果收到这个就说明字符结束了。串口助手里勾选发送新行,就会在结尾加上"\r\n"
回复 支持 反对

使用道具 举报

发表于 2021-2-3 10:43:11 | 显示全部楼层
还有就是建议不要在中断里用while死等的方式,中断需要尽可能快的执行完成
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 23:30 , Processed in 0.033277 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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