初级会员

- 积分
- 178
- 金钱
- 178
- 注册时间
- 2020-6-21
- 在线时间
- 70 小时
|
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”。
2.第二个问题是被我注释掉的这两行
串口中断服务函数中的原代码是这样写的:
...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语句。
|