高级会员

- 积分
- 580
- 金钱
- 580
- 注册时间
- 2015-1-12
- 在线时间
- 76 小时
|

楼主 |
发表于 2026-2-3 17:01:47
|
显示全部楼层
战舰版串口例程len=USART_RX_STA&0x3f;//得到此次接收到的数据长度,取得字节数,最大取到0x3f,64个字节,道理上最多汉字是32个。而MINI版本的标准例程中已经修改为len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度,取得字节数,最大取到0x3fff,最大2的14次方个字节,所以超过了31个汉字。
至于汉字为什么最大个数是31而不是32,和同类毛病的F413例程中#define USART_REC_LEN 200 //定义最大接收字节数 200。为什么是99个汉字而不是100个汉字,这是因为USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;//USART_RX_STA数值没有包含回车换行。收到的回车换行\r\n没被计算到数组的长度里面,也就是接收的数组元素中不含有\r\n 2021.12.4
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收
先得到数组元素的下标,然后USART_RX_STA会+1,当取得199下标的时候,也就是数组的第200个元素,USART_RX_STA+1变为了200,if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//,200>(200-1)接收数据错误,重新开始接收 |
|