
STM32用USART发送字符串 % r4 r# R: {) W1 v; Z. C ![]() ![]() 7 Y% `5 K; z3 D4 ^1 X/ z1 A ![]() 8 y# Y, k+ k" m* X T2 B; U ![]() % X$ N# E' P8 Z$ Y$ y7 R V 代码含义是: 当接收引脚有数据时,状态寄存器的USART_FLAG_RXNE就会为1,此时USART_GetFlagStatus(USART1,USART_FLAG_RXNE)的返回值就为1(SET),若无数据则为RESET。( E/ \/ S; Y! O 代码常见写法,及其接收数据效果0 A9 [$ X- Y8 r- a+ n 1 ![]() / r7 j( B; w" k ![]() 这种写法在不是特殊(不掉电、不待机等)情况下,问题不大,USART数据会成功发送出去。但是在上面说的特殊情况下,问题就来了,代码只将数据放到了发送缓冲区,而没有发送出去就掉电或待机了,这个时候其实最后两个字符是没有发送出去的。% a3 J% D3 I. T7 u8 C 22 R( R$ n1 z1 L4 e9 A" E5 I & h' d- t8 |% j+ g h1 G ![]() ![]() 这种写法达到的效果和上面存在不同的就是倒数第二个数据发送出去了,也就是只有最后一个字符是没有发送出去的。; Y" f- o+ ^, _ q. g9 j0 X2 S " C7 K3 ^+ s% d; b) O5 C 3 ![]() 0 q! s: W/ ]* R) ^+ z! w% @ ![]() 4 H) \8 Z- e1 u2 F 这种写法达到的效果和上面两种写法有不一样,发送了10个字符。; t) w- P$ J/ h0 u* X 6 l7 @1 x' \4 P3 v0 K; C ( p9 g+ L% l: r) D 4+ i8 d; c" l2 \/ E) |8 `+ t ) }( e& h4 `/ T2 z. Z; i& k* [ ![]() ![]() , u. z! p8 d7 R 这种写法按理说可以实现功能,但实际多次试验结果确实第一字节数据丢失了。) V7 h( a( s3 l% C* W 5 , d% X6 c' q" g" K+ B; I7 X7 N ![]() ![]() + W, g) U2 I, F7 n) e' ^( A, f 这种写法是比较完成,为了保守起见,在特殊情况下使用该写法。 0 |/ o+ x8 e+ n! k 转载自: 一起学嵌入式' J$ ^, V! ]6 G( |9 | 如有侵权请联系删除 |
OpenBLT移植到STM32F405开发板
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
【NUCLEO-WB09KE评测】STM32WB09KE的内部BootLoader使用
11111111111111111111111111111111111
STM32芯片ISP串口程序一键下载—FlyMcu
如何使用CubeMX实现STM32的串口通信以及对printf等函数的重定向
基于STM32串口中断之缓存区溢出卡死经验分享
基于STM32 Azure USBx 开发的经验分享
NUCLEO-U545RE-Q评测】4. 串口实用收发测试
NUCLEO-U545RE-Q板卡评测 (第二篇外传)UART的单线半双工的上拉电阻问题