EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这是stm32单片机串口通信中的问题,请会的教教我,谢谢!!. h5 w/ L, }# ~+ n, O
0 L+ G U$ G! x B6 H0 j [
# A% i3 E1 O+ o- V4 [7 \1 K1 C
以下是串口通信主函数中接收数据的一段代码, len 这个变量是定义为U16类型。我的疑问是:(len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度)这句话中所谓数据长度是什么意思?是指二进制数据的长度吗?其长度又是怎么算出来的呢?视频讲解好像是说长度为2的13次方减1,对吗?可这是为什么呢? u* Z) e) r/ A. L) B( m4 B3 F. ]
6 x" q) B& ]- w, G+ U
while(1). L! z/ |9 ^/ L4 n2 z% n( B8 y
{! p1 e2 S, h! ^/ S) R
if(USART_RX_STA&0x8000)
5 q8 K" O( K# V( E' V) r {
. `: F2 ^( G4 U len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
( v- L4 ?. y+ I2 M! e printf("\r\n您发送的消息为:\r\n\r\n");; b2 s7 ?$ i; e. L
for(t=0;t<len;t++)( H5 M! ?: |, c' w2 b# `3 } Z l
{
# a+ c' N4 o3 h7 k! ]( Z+ W USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
" B0 [' u- X0 I% n; N while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
+ [( I0 ]) m y2 ` }
4 I7 [+ N8 _5 z8 e( O! r printf("\r\n\r\n");//插入换行
3 Z$ V" Q* j* F- V; C5 ^& _ USART_RX_STA=0;
7 X8 q" U2 x* } }else# W0 F5 |5 N8 Q' X, p3 A
{
& ]+ u* R9 B( S: j7 h& ] times++;
0 H! T, A+ \' V, Q# D1 u if(times%5000==0)
; u( M- |/ a( U. l n {
9 T2 {& q+ H4 g* z# E3 {* G/ u printf("\r\n战舰STM32开发板 串口实验\r\n");/ Z A$ n) {( M, X
printf("正点原子@ALIENTEK\r\n\r\n");. u1 J# I8 L8 R1 u
}! }$ A. K! u9 U" m
if(times%200==0)printf("请输入数据,以回车键结束\n");
; {- d% R' O1 r3 m) t- y# f if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
+ Y" x6 x2 e& \' C$ c/ U delay_ms(10);
) B, M$ x; F& |7 t0 N$ v4 R/ a5 u$ p }$ C0 ]1 I" M$ Q2 F: @# M8 ]
}
, P) O$ ~5 k% p |