野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8580|回复: 5

求助,串口发送16进制数

[复制链接]
发表于 2018-5-10 20:36:46 | 显示全部楼层 |阅读模式
问题:1.如下一段程序
  1. USART_SendData(RS232_USART, 0x05);
  2. USART_SendData(RS232_USART, 0x04);
复制代码
main()函数中运行程序,为何串口只显示04,那05呢?单条程序显示完美,两个放一起就只显示后者,求解释!
2.求串口收发16进制数例程

回复

使用道具 举报

 楼主| 发表于 2018-5-10 21:44:33 | 显示全部楼层
第一问已经清楚了,由于数据还来不及发送,数据就被后面来的数据覆盖了。
  1. USART_SendData(RS232_USART, 0xD2);
复制代码

运行这段代码会同时出来D2 D2这两个数,崩溃
回复 支持 反对

使用道具 举报

发表于 2018-5-21 11:59:06 | 显示全部楼层
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
试试看,等待当前数据发送完成,在发送下一个数据
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-22 17:34:07 | 显示全部楼层
xsx127 发表于 2018-5-21 11:59
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
试试看,等待当前数据发送完成,在发送下 ...

问题解决了,你的这个方法是正确的,连续发送太快了,所以只有最后一条信息会被读取,其他的则丢失了,添加延时10MS正常了,但是延时耗费资源,采取发送中断是最好的解决方案。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-22 17:34:35 | 显示全部楼层
本帖最后由 qiyang1993 于 2018-5-22 17:35 编辑
xsx127 发表于 2018-5-21 11:59
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
试试看,等待当前数据发送完成,在发送下 ...

问题解决了,你的这个方法是正确的,连续发送太快了,所以只有最后一条信息会被读取,其他的则丢失了,添加延时10MS正常了,但是延时耗费资源,采取发送中断是最好的解决方案。如有错误请指正
回复 支持 反对

使用道具 举报

发表于 2018-5-24 18:03:43 | 显示全部楼层
这是我学M4时的一个中断作业 你可以看看。

中断_作业.rar

841.37 KB, 下载次数: 32

回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 20:57 , Processed in 0.032258 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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