OpenEdv-开源电子网

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

记录一下自己的串口程序现象

[复制链接]
回帖奖励 100 金钱 回复本帖可获得 10 金钱奖励! 每人限 1 次

13

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
407
金钱
407
注册时间
2016-5-26
在线时间
108 小时
发表于 2020-8-12 09:51:36 | 显示全部楼层 |阅读模式
想弄清串口发送字符,发送16进制数据,串口队例等等……
这个程序,for 循环200次实际只运行了一次,然后直接进while循环了。
但是进debug单步运行,串口助手确定显示正常,一直单步下去真的能发送200个数据
我还是对串口不太了解,再看看视频吧
微信截图_20200812094051.png

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2018-12-27
在线时间
19 小时
发表于 2020-8-12 10:09:54 | 显示全部楼层

回帖奖励 +10 金钱

你在for循环里加个延时,或者是加个检测发送完成的标志位,等上一个发送完成了再下一个
回复 支持 反对

使用道具 举报

9

主题

219

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1433
金钱
1433
注册时间
2020-5-12
在线时间
394 小时
发表于 2020-8-12 10:21:02 | 显示全部楼层

回帖奖励 +10 金钱

                while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
                USART_SendData(USART1, Data);
要这样。
回复 支持 1 反对 0

使用道具 举报

13

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
407
金钱
407
注册时间
2016-5-26
在线时间
108 小时
 楼主| 发表于 2020-8-12 09:53:12 | 显示全部楼层
实际运行情况0x33也不发送,直接跳过。STLINK调试正常
回复 支持 反对

使用道具 举报

21

主题

132

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1230
金钱
1230
注册时间
2020-7-14
在线时间
272 小时
发表于 2020-8-12 10:03:41 | 显示全部楼层

回帖奖励 +10 金钱

123456
回复 支持 反对

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13118
金钱
13118
注册时间
2012-11-26
在线时间
3813 小时
发表于 2020-8-12 10:12:34 | 显示全部楼层

回帖奖励 +10 金钱

你要等待发送完成的。。。。或者你用DMA
学无止境
回复 支持 反对

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2020-8-12 10:26:21 | 显示全部楼层

回帖奖励 +10 金钱

串口发送要检测是否发送完成  不然会出现覆盖现象
单步调试间隔时间比较长 所以能看到正常发送数据
让我们的思维驾驭在电的速度之上!
回复 支持 反对

使用道具 举报

11

主题

131

帖子

0

精华

高级会员

Rank: 4

积分
757
金钱
757
注册时间
2020-5-11
在线时间
71 小时
发表于 2020-8-12 10:33:43 | 显示全部楼层

回帖奖励 +10 金钱

串口发送要检测,给予时间差,等待发送完成,否则会覆盖,从而达不到效果
回复 支持 反对

使用道具 举报

4

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
471
金钱
471
注册时间
2019-4-12
在线时间
92 小时
发表于 2020-8-13 11:23:09 | 显示全部楼层

回帖奖励 +10 金钱

可以打示波器或者是逻辑分析仪看一下实际的波形
回复 支持 反对

使用道具 举报

2

主题

459

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4498
金钱
4498
注册时间
2018-5-14
在线时间
962 小时
发表于 2020-8-13 11:29:17 | 显示全部楼层

回帖奖励 +10 金钱

肯定是没判断串口有没有发送完就继续下一个发送了,你单步是手动加了时间的,所以正常(因为单步只是内核停止,硬件还在工作的)。
回复 支持 反对

使用道具 举报

5

主题

269

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1053
金钱
1053
注册时间
2020-5-11
在线时间
253 小时
发表于 2020-8-13 11:29:32 | 显示全部楼层

回帖奖励 +10 金钱

看原子哥例程啊。发送完成标志位要等待的
回复 支持 反对

使用道具 举报

1

主题

41

帖子

0

精华

高级会员

Rank: 4

积分
504
金钱
504
注册时间
2019-3-21
在线时间
103 小时
发表于 2020-8-13 17:35:13 | 显示全部楼层

回帖奖励 +10 金钱

        while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;
回复 支持 反对

使用道具 举报

4

主题

380

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3088
金钱
3088
注册时间
2015-10-17
在线时间
320 小时
发表于 2020-8-14 08:13:55 | 显示全部楼层
单片机的运行速度,比串口的发送速度快多了,没发送完,你又送。加个串口空闲判断标志,完成再继续发。单步运行,肯定没问题,你按键也没那么快
回复 支持 反对

使用道具 举报

13

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
407
金钱
407
注册时间
2016-5-26
在线时间
108 小时
 楼主| 发表于 2020-8-14 08:57:01 | 显示全部楼层
233333333333333感谢大家 的回复,申请结贴
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 07:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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