EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这是stm32单片机串口通信中的问题,请会的教教我,谢谢!!% A4 E8 [( U' ^5 l4 S6 {
" }0 |2 y# y; F: F: a- `
) h% J6 e- R6 I4 a" G3 r以下是串口通信主函数中接收数据的一段代码, len 这个变量是定义为U16类型。我的疑问是:(len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度)这句话中所谓数据长度是什么意思?是指二进制数据的长度吗?其长度又是怎么算出来的呢?视频讲解好像是说长度为2的13次方减1,对吗?可这是为什么呢?
" ~( j( n7 Q$ j2 b( h! r1 R& E( l; J0 \4 p
while(1)2 z% P* s8 |2 t9 o7 S: x
{6 _9 r" G4 E) C
if(USART_RX_STA&0x8000)
8 g U; H- w- o {
% Z1 v I4 m X) B5 R% I$ `% ` len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度& @8 r! d, e, L# D+ L* v
printf("\r\n您发送的消息为:\r\n\r\n");
& h( b7 H9 p( v& P ` K4 _ for(t=0;t<len;t++): J1 W7 V; H, {5 g$ F# G0 v5 ?' h
{/ {4 E7 L3 Z. s6 N0 \2 a ]0 t9 e
USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
+ |; O( Z" L8 G- X while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束( n! |/ x" y+ I2 m+ }
}
; v% \4 A6 U# N+ g& A printf("\r\n\r\n");//插入换行
" |- R* F6 S% V0 C USART_RX_STA=0;
0 z: B! g* J1 L' ]3 \5 j* ^ }else
, @: P6 Y9 H4 ^5 W' W. t {# c& n# o- m+ C" F/ G9 R/ x1 r
times++;
/ U6 e6 s1 k- F( s' Y if(times%5000==0)' f- t' w, l' f, F& _) E
{, @4 s: K) c' q8 H1 J
printf("\r\n战舰STM32开发板 串口实验\r\n");3 x* B2 t4 q" O7 S
printf("正点原子@ALIENTEK\r\n\r\n");% W6 M8 O# Z# a1 f
} l2 @+ g) J% K! f# a, u( V
if(times%200==0)printf("请输入数据,以回车键结束\n");
! H4 a" V/ Y' d0 E& D; r if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
8 y- o) L5 a; X' x delay_ms(10); - Y8 b- \; R, d9 ^
}
% C+ Q+ o) m# x. y5 b! \ }6 X5 h0 D* r l4 F5 ^
|