EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这是stm32单片机串口通信中的问题,请会的教教我,谢谢!!
' m+ P. D$ J9 o% c3 Q4 M. m9 U, z: S( z% J
( u+ D0 x# I+ ]$ p, q* E6 x以下是串口通信主函数中接收数据的一段代码, len 这个变量是定义为U16类型。我的疑问是:(len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度)这句话中所谓数据长度是什么意思?是指二进制数据的长度吗?其长度又是怎么算出来的呢?视频讲解好像是说长度为2的13次方减1,对吗?可这是为什么呢?
# W m7 q7 c% ?6 g5 t2 e. Z2 A! ^& v' h6 D5 ?( y" Y
while(1)
+ Y- i% f. T# ] {
, }' [- Q9 k) \" M+ P" Q5 v if(USART_RX_STA&0x8000)- `: }3 x5 ]3 d# @0 ^ \7 l
{
7 e! K8 c/ B3 e- D' q3 X4 v$ B len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度! C& D. o9 r" k+ E5 O
printf("\r\n您发送的消息为:\r\n\r\n");$ |6 m9 ^! l" M* I. J
for(t=0;t<len;t++)
" L X" B/ X1 E, F$ ~ {
0 Z3 R( a3 w4 |$ _2 O USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
, z3 E' P* e, z/ B6 d- g while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
r* u+ o7 X' y }
$ u9 n) V5 R1 [5 O& k& g printf("\r\n\r\n");//插入换行
5 z' p8 g$ s, E) r USART_RX_STA=0;+ a- ~! U0 Q. v0 V9 _; f. u# ?
}else
' N2 I: Q, v6 W {" j0 r7 T) {0 @0 S- T' z! q
times++;0 L+ y$ Y5 J* x! I! X
if(times%5000==0)
4 Z. k) }9 |+ B6 j8 {! @3 Z: a {5 m2 R6 C0 v% b) F4 i- _) F
printf("\r\n战舰STM32开发板 串口实验\r\n");
q$ k' J" C, O6 ^2 s printf("正点原子@ALIENTEK\r\n\r\n");" e! B! W8 \' A6 i7 Y+ X- [6 c
}
* ]' U' D! O6 O- _+ W if(times%200==0)printf("请输入数据,以回车键结束\n"); ' u$ y% w+ I7 q3 p e8 M
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
z) Z+ C3 B; q1 u) q delay_ms(10);
) u- h1 Y s& H! B! G }
; w$ b, R2 w; }1 B8 w5 v9 b }
2 v* H8 w$ x& `" W4 R: @ |