本人还是个STM32的菜鸟,用了库函数版本的USART配置不懂其原理,于是自己结合网上资料摸索,特地给出寄存器版本的串口配置以及源代码分享,同时也整理自己的思路。
3 X0 o) Q" u, e5 X8 d5 {
8 F0 f6 C2 t4 ^$ b" K- #include<stm32f10x.h>3 |; V" d; X+ D9 Y
- #define uchar8 unsigned char
: S4 r- _( y& B" S - #define uint32 unsigned int
, w: @, E7 r8 z- d9 H! A" j) z% h( J
- a8 x7 H$ v# X, P3 \ q- uchar8 a[13]="Hello World!";9 R7 _0 ~ [( I% Y
- 1 T7 L( r2 `" i% d, t. f( j+ I
- void RCC_Config(void)1 g, p+ ^ Z( |) F
- {( r& X4 U; T |5 ^
- RCC->APB2ENR |= 0X4005;& i" ^( @: E$ v a
- }
# ~4 W+ P6 J" i5 I! ^) k: d; V - void GPIO_Config(void)" d' B1 J+ F; x: O# O" c
- {
* a2 x/ C) ^# }* p8 I - GPIOA->CRH |= 0X000000b0;4 ?$ Y! G+ _8 I5 C: K7 {
- }+ ] C- u. P! c5 e0 T9 h5 ?
$ I9 c6 H8 u! K/ [- void USART_Config(void)
7 A1 x! x% O: w) d; G0 G - {; u1 k L$ e" Z0 k- `! w- G' l
- USART1->CR1 |= 0X200C;
V( f9 ]0 D6 y t* E9 ^$ j3 s% m - USART1->BRR |= 0X1D4C;
% U2 N- U# ?8 Q$ k
% T& x a9 y; P: z1 m- }/ k2 J* l) A; f4 O
- int main(void); n9 b6 U* {' a3 {) X
- {
6 Y P- s* I- T h# u4 w - uchar8 i=0;: r/ J# t( ~0 Q# M
- RCC_Config();
) ^* _* v. k- F1 e - GPIO_Config();8 C8 K: Q% h" ^( D8 v( q
- USART_Config();
) I6 n n% ]/ a) h' U! `5 g; ]2 ^ - while(1)
9 @+ d/ ?8 K0 c' p5 M - {6 x" y% p2 z, q2 b! \$ [( G
- USART1->DR = a[i++];
. }7 u( i8 J' K% `4 V/ g - while((USART1->SR)==0);, G; R5 `; ~8 s, P4 w
- if(a[i] == '\0' )
3 l) o9 w* g8 S - {$ ]& _# r2 m$ E5 c( j! C- X
- i=0;2 `) p' u6 B) V
- while(1);
. V# @7 @' O) q7 \1 ~, Z - }
2 g% i0 g: E. B# j - }, n/ A7 e2 ~! [4 a
- }
复制代码
1 w5 A) x& D; f3 p* [ |