需要用到的外设文件有:+ C& b B* d6 E& I- Z
9 f4 o- q6 c1 U8 K: ?9 A* c' b- stm32f2xx_usart.c; //串口相应函数: p0 Z& ?8 _3 I
" y+ G7 w* O0 [( k+ b9 [$ d* U+ C- stm32f2xx_gpio.c; //GPIO初始化
/ G; W2 \; Q8 _+ d: T/ S6 v3 F$ K
: T& N, `3 D; Y* N) d2 x- stm32f2xx_rcc.c; //时钟初始化$ F9 y: I7 @2 a( U+ E6 _3 L
/ f8 D& i6 V. D$ t3 p" I- misc.c; //中断初始化
复制代码 % P5 K+ H/ x$ u+ N6 T3 I5 i
初始化主要包括8个部分。
$ a9 x7 A: d- ]9 N) S' t7 j+ A, D3 o X% l& y
1、 使能GPIO时钟:
# [4 B4 K. R+ N$ ^: q# Q; M6 W( G/ q
- RCC_AHB1PeriphClockCmd(GPIOX, ENABLE);
复制代码 2 I/ [; a s S7 a3 `3 T( Q5 [
2、 使能UART时钟:
4 w1 ^( J6 E7 A6 O/ X9 c# H- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USARTX, ENABLE);
复制代码 - R; h i9 E2 k$ y
3、 将GPIO引脚连接到USARTX:
; D$ S. q0 Z) R2 C2 I6 ?; X) ?% C! K- n" b. j+ H' E. A
原始函数:- GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);
复制代码
/ @5 U- c: G9 d! m+ T' S- NGPIO_AF可选如下:
M* | T" ^; r9 Y- GPIO_AF_RTC_50Hz;GPIO_AF_MCO;GPIO_AF_TAMPER;GPIO_AF_SWJ;GPIO_AF_TRACE;GPIO_AF_TIM1;GPIO_AF_TIM2;GPIO_AF_TIM3;GPIO_AF_TIM4;GPIO_AF_TIM5;GPIO_AF_TIM8;GPIO_AF_TIM9;GPIO_AF_TIM10;GPIO_AF_TIM11;GPIO_AF_I2C1;GPIO_AF_I2C2;GPIO_AF_I2C3;GPIO_AF_SPI1;GPIO_AF_SPI2;GPIO_AF_SPI3;GPIO_AF_USART1;GPIO_AF_USART2;GPIO_AF_USART3;GPIO_AF_UART4;GPIO_AF_UART5;GPIO_AF_USART6;GPIO_AF_CAN1;GPIO_AF_CAN2;GPIO_AF_TIM12;GPIO_AF_TIM13;GPIO_AF_TIM14;GPIO_AF_OTG1_FS;GPIO_AF_OTG2_HS;GPIO_AF_ETH;GPIO_AF_FSMC;GPIO_AF_OTG2_FS;GPIO_AF_SDIO;GPIO_AF_DCMI;GPIO_AF_EVENTOUT;
复制代码 # [" U! B2 p% e! C# z2 S/ Z
连接TX:1 h. L$ f& n/ ^0 J; U' Z2 G. _. N+ C
- GPIO_PinAFConfig(GPIOX, GPIO_PinSourceY, GPIO_AF);
复制代码
; Y2 T) v0 ~, x& F6 Z% ~* h) z连接RX:
" L* o5 e* U `2 U- GPIO_PinAFConfig(GPIOX, GPIO_PinSourceY, GPIO_AF);
复制代码 ) L5 H. b$ b J( d7 n( ^9 A
4、 配置GPIO的TX和RX:! _- [; H5 p1 E
; n) i k( \$ V, f I2 yTX配置:/ ]$ G% A) d8 T {& a8 A8 U# [9 y4 u
- GPIO_OType = GPIO_OType_PP;3 C \* ~2 }7 M( \) e
, _+ a* Z) l8 Y; p; C- Q7 O- GPIO_PuPd = GPIO_PuPd_UP;+ u2 ?4 M+ k& p/ q8 L
- , N0 J1 _& t* k% x$ Z: H% O# x
- GPIO_Mode = GPIO_Mode_AF;
; w% \) ~$ z. E& U$ d - ; ^0 o' T# }" z* Z" h. p
- GPIO_Pin = GPIO_Pin_XX;
. P) C2 M( w; R
, S8 S9 Q- H1 F, J- GPIO_Speed = GPIO_Speed_50MHz;
' C3 T( X3 u6 _2 L
复制代码
2 n ], L7 m0 A% z+ K. U- `) E4 HRX配置:
% o/ p" s9 B+ g! Q8 C- a* s- GPIO_Mode = GPIO_Mode_AF;
6 Y/ L+ O6 t! X7 S - ; [4 V& v/ z9 F" V f* n
- GPIO_Pin = GPIO_Pin_XX;# G1 W/ h% Y/ C8 h* {8 M }( C
复制代码 7 }: ]; g* y6 [" W* O- y* u6 _
5、 串口初始化:' e; U& k4 Z0 v& k
- USART_InitStructure.USART_BaudRate = 115200;
b2 N& } Y( M: w) n1 _2 S - ; C) F3 E' N- M/ j9 I b
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- Q4 P6 Q! d+ e- f8 {- t
, C& n& }! C" L- USART_InitStructure.USART_StopBits = USART_StopBits_1;$ F3 |' l+ g' F, h) Y
+ b% A) b }+ p- USART_InitStructure.USART_Parity = USART_Parity_No;
8 _/ h, P9 V+ P8 ?: p3 B
5 d7 T Y' Z, V+ i, r* r* B- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;$ j; U2 _0 A" I0 M: R
1 A. Q6 e% z8 {% D' _+ {4 C- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;2 C7 R# s8 R' @& k& a. A
0 L' o7 H+ z: D0 ^# A2 x- USART_Init(USARTx, &USART_InitStructure);
复制代码 0 V+ Z# d- J7 B' }4 s/ b3 l
3 j8 \) T3 O, C; F3 C* t
这样的配置是从网上下来的,为什么串口还是无法发送数据??
/ S- E1 x% \. b/ s, n5 C
I$ _; B, e. @* J1 Z( b# m1 R" m% P6 Z7 u; J/ Q0 [
|