OpenEdv-开源电子网

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

串口通信控制LED灯的亮灭相关问题

[复制链接]

20

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2020-6-21
在线时间
70 小时
发表于 2020-6-21 20:23:51 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 flyingPiggy 于 2020-6-25 17:39 编辑

我用的是F103MINI板,在看USART通信部分,用的是HAL库,遇到了一点疑问。
我要达到的效果是这样的:
用串口助手发送汉字“继续”
单片机LED0点亮
----------------------------------------
我的程序是这样写,但是却无法点亮

这样写为什么不行?

这样写为什么不行?

不是发送新行的问题。

我这样写却可以发送"1"点亮
if(USART_RX_BUF[0]==0X31)
{
LED0=!LED;
}



但是我想发送汉字点亮却不行,这是为什么?
-----------------------------------------------------------------------------------------------------------------
6月25日更新
我终于解决了 !!
问题回顾:
当时遇到的问题是 用“1”能点亮小灯,用“继续”不能点亮小灯。
解决方法:
其实为什么不行呢?这里面有两个大问题。
1.“继续”的编码不是7ee7,这点很多朋友在回复中也给我提到了。我用仿真器去看了一下,“继续”的编码应该是“BC CC D0 F8”。
Annotation 2020-06-25 105649.png

2.第二个问题是被我注释掉的这两行
Annotation 2020-06-21 204912_LI.jpg

串口中断服务函数中的原代码是这样写的:
...
USART_RX_BUF[USART_RX_STA&0X3FFF]=aRxBuffer[0] ;
                                        USART_RX_STA++;
...
每一次串口中断触发后把aRxBuffer[0]的值给USART_RX_BUF这个数组
数组下标每次都加一

但是这个下标清空为0是在mian.c里面完成的。
我把这句话注释掉了,所以下标就不会清空了。
当接收到0x0a,0x0d的时候
USART_RX_STA就变成了0x8000了
然后调用串口中断回调函数的时候
if((USART_RX_STA&0x8000)==0)
{
...
}
USART_RX_STA & 0x8000 就等于8000  
if(..)中的条件不满足,就不会执行下去了,相当于串口中断回调函数没用了。

------------------------------------------------------------

最佳答案

查看完整内容[请看2#楼]

0x31是ASCII码“1”,所以能点亮。汉字“继续”的编码不是0x31,所以自然不执行LED=!LED语句。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2020-6-19
在线时间
11 小时
发表于 2020-6-21 20:23:52 | 显示全部楼层
本帖最后由 ldmzhd 于 2020-6-23 14:14 编辑

0x31是ASCII码“1”,所以能点亮。汉字“继续”的编码不是0x31,所以自然不执行LED=!LED语句。
回复

使用道具 举报

20

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2020-6-21
在线时间
70 小时
 楼主| 发表于 2020-6-21 20:51:18 | 显示全部楼层
“继续”的ASCII码是7ee7
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14425
金钱
14425
注册时间
2018-8-3
在线时间
1157 小时
发表于 2020-6-22 12:40:59 | 显示全部楼层
仿真  去看你BUF的值是什么 不就是什么问题了吗
回复

使用道具 举报

12

主题

3399

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8677
金钱
8677
注册时间
2020-5-11
在线时间
4155 小时
发表于 2020-6-22 15:01:16 | 显示全部楼层
RXD、TXD短接,HEX显示,可以看到你发的啥。
如果条件成立,循环中的条件会一直成立,一直执行LED取反。
收到数据帧结束应有标志,主循环检测到标志就处理数据并清除标志。
专治疑难杂症
回复

使用道具 举报

34

主题

255

帖子

0

精华

高级会员

Rank: 4

积分
912
金钱
912
注册时间
2019-7-5
在线时间
189 小时
发表于 2020-6-23 11:56:38 | 显示全部楼层
把你串口收到的值,通过printf打印出来看看
回复

使用道具 举报

20

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2020-6-21
在线时间
70 小时
 楼主| 发表于 2020-6-25 10:58:39 | 显示全部楼层
嗯 我用仿真看了,继续的编码不是7EE7,不知道这个XCOM用的是什么字库。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 06:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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