需要用到的外设文件有:( S3 E& J* [/ E: z+ o# @5 B2 e
2 b8 D" |( @* E% W
- stm32f2xx_usart.c; //串口相应函数
7 b: l4 a, U7 [+ A
9 v0 H( v) |' ]2 W- stm32f2xx_gpio.c; //GPIO初始化
. H) L7 T' X4 L - 4 T/ F- t. x6 d5 O- O
- stm32f2xx_rcc.c; //时钟初始化
0 r8 i0 U( _5 n( T, ]
# \4 J) N2 K+ p3 L' h- misc.c; //中断初始化
复制代码
8 T, p- j+ s: F9 b& @- P% b [初始化主要包括8个部分。
( l k2 o& d( r6 I- X% u, `3 T5 s/ z8 [8 n2 ^& \
1、 使能GPIO时钟:4 }- U5 Z: a" |3 q
R. N+ C8 o2 a7 U- RCC_AHB1PeriphClockCmd(GPIOX, ENABLE);
复制代码 2 r1 k8 D# p$ E a/ d: O
2、 使能UART时钟:/ ?9 l- T0 _2 O# Z' L' \# p
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USARTX, ENABLE);
复制代码 / _2 k/ `6 h4 B5 w/ U! j; B
3、 将GPIO引脚连接到USARTX:2 K) o- `' V5 e$ Z
9 ~/ ]' D+ X( k
原始函数:- GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);
复制代码 ( @. q0 o5 F; |) q
GPIO_AF可选如下:
5 O' N# R0 y W. \: e- 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;
复制代码 |: Y) z. q: \5 E+ Y
连接TX:
& D x" w3 X+ p1 R; W* g& {- GPIO_PinAFConfig(GPIOX, GPIO_PinSourceY, GPIO_AF);
复制代码 * H$ Z! _) ~5 D( x' _4 _( O* d
连接RX:
3 O; ~& i4 y/ ^0 `6 h. ^4 X+ ]- GPIO_PinAFConfig(GPIOX, GPIO_PinSourceY, GPIO_AF);
复制代码
) |; e+ N1 c6 b6 B- C" T G: T2 B4、 配置GPIO的TX和RX:
8 J" a; G3 u- Q! Q- K* o/ t
1 @& Y3 v. T7 u6 E& Y4 GTX配置:# P4 I& @* J7 c) H+ l0 d5 g# ~
- GPIO_OType = GPIO_OType_PP;
4 ?1 f0 _0 n8 o9 a
0 o0 u @+ g& P- H+ _' K( e3 o- GPIO_PuPd = GPIO_PuPd_UP;
" T, q' L$ G0 O( ~# I, x) A e* B0 g
, b1 h1 ~) G. h/ I2 j2 H- GPIO_Mode = GPIO_Mode_AF;
& M) j! ]+ Y: ]: E& l* a
' T; r+ H& e- `& l8 @5 v+ ^# j- GPIO_Pin = GPIO_Pin_XX;
. s# N# x7 T5 l- Z - : d/ C5 x, I+ S5 u- h1 G" h
- GPIO_Speed = GPIO_Speed_50MHz;# ]- | I& f+ d% \( V7 b1 e( W
复制代码 ) y" ^1 d4 C- |+ }6 b
RX配置:
2 @; B' W$ k- W+ B6 P; D- GPIO_Mode = GPIO_Mode_AF;' \4 a2 N5 n& W
- ' t4 n5 n9 U1 u; r$ q; p6 h
- GPIO_Pin = GPIO_Pin_XX;
$ B ~- Z5 f5 m, q4 T
复制代码
0 d( h1 X; `6 f' `/ W5、 串口初始化:% f3 j2 M: X/ {+ D
- USART_InitStructure.USART_BaudRate = 115200;
: A* |- F9 {% y% ?7 @
9 M# o) E: b$ B2 e4 F% D( h: S- USART_InitStructure.USART_WordLength = USART_WordLength_8b;0 @$ G) @% C/ T; H5 n5 L( o
- O% r, H' o# I r( p' ?' ]# Z- USART_InitStructure.USART_StopBits = USART_StopBits_1;
# i5 s9 ]+ S. G2 R
: e0 z$ R! E8 Z& y- USART_InitStructure.USART_Parity = USART_Parity_No;
4 c5 ] a7 y+ b: p - ; b7 Q! J5 E* @! u3 d+ N
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;8 D7 w1 z& ~! J K4 U$ M4 ], p3 |
/ ~3 C( I! w. R. ~5 v- N/ {- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
. K. W8 l9 {( Q1 m
* @# F; m4 W j' _; N* M0 m- V9 i- USART_Init(USARTx, &USART_InitStructure);
复制代码
4 ? N, A. l i- p+ S
% K6 \& ^& u" G/ r K6 Q这样的配置是从网上下来的,为什么串口还是无法发送数据??! n# I# b2 `( N! E( `
/ c5 A# J* v8 o% [) r# u3 U
# _! R/ o! c3 J: v8 a* n |