本人还是个STM32的菜鸟,用了库函数版本的USART配置不懂其原理,于是自己结合网上资料摸索,特地给出寄存器版本的串口配置以及源代码分享,同时也整理自己的思路。
; G" R8 \! k# ?8 E% ]. N
* @8 ~) I) J. W2 j8 _: n- #include<stm32f10x.h>) }. }/ T; ]! Y0 l" ^* G
- #define uchar8 unsigned char1 \9 t' Q& g" e7 w; J+ b
- #define uint32 unsigned int' U# C6 s! Z8 x( a/ G
- - Q- M' f# |' a6 i6 ?1 @$ w
- uchar8 a[13]="Hello World!";$ w/ M; B3 |3 F% t( S6 `$ _1 Z
- + ]$ v! Z1 P, B4 _
- void RCC_Config(void)
1 E' R! I9 ?& z( @" ^, K - {+ v# y# s4 S9 h9 L- ]
- RCC->APB2ENR |= 0X4005;
2 Z3 @. E+ O3 O% ]* h1 }9 [ - }- }' q% o" C x+ m+ T9 ]5 J% U" V
- void GPIO_Config(void)
& W- K7 s2 Y) g7 r5 T$ J - {
+ v- m$ L" Y" p5 m9 Q7 J) H7 y% J - GPIOA->CRH |= 0X000000b0;
* ]: y8 }' `# W2 Y - }5 O$ y" Y8 e; w! f, u7 C: z( P
- ]6 T. Q! \ `, ^8 v k9 [& T* M- void USART_Config(void)' C0 d$ G, z) C" j2 f6 L
- {
; b# r9 Z8 e* s* b( o( w; l+ s6 W - USART1->CR1 |= 0X200C;% {3 u, l3 q( w
- USART1->BRR |= 0X1D4C;
6 E( H% N+ R. _" P9 |1 d - ; B8 h+ k" \* j8 z. j( Y
- }
- d( R( m6 w" r6 }3 ] - int main(void); G3 F: M( U& o* s. d
- {
0 n) x( y( C4 F$ U$ O Q2 j - uchar8 i=0;
0 A/ U2 o7 ]' q. g! I& C - RCC_Config();+ O; {0 `5 |, W. K" F
- GPIO_Config();' p t) H3 q1 G* M+ p
- USART_Config();
3 j3 ~8 y" E3 k2 G8 L, c8 ~7 n" x - while(1); |: S- R- [& m g# T4 D) D
- {
; W3 c/ O& _/ D3 D7 ?5 l5 G - USART1->DR = a[i++]; 1 P! ^- y4 ?% p" m" m
- while((USART1->SR)==0);) E% x9 W1 t G+ F
- if(a[i] == '\0' )
- e7 E0 ~! K% t) `; G - {
2 f. L* ?$ a' q8 Y. q - i=0;" y, V3 E- P6 R) {
- while(1); : F6 @3 l) A& y% M: x
- }
* y, W! }0 @+ ~/ |1 Z* y - }
: ~7 y6 M0 n+ g+ e% @- X - }
复制代码
g8 _# W+ A, n/ C1 w1 J |