需要用到的外设文件有:
+ J' i8 l2 x! O. Y" ^! M2 L
* d% T( R9 D" T& u0 Z- stm32f2xx_usart.c; //串口相应函数
8 D9 @, s! a- x( _
1 m: S1 c- Q) R; d* F3 S- stm32f2xx_gpio.c; //GPIO初始化0 c4 F2 B5 R( P- Q6 |
* Q9 H( ?) H. t% i1 l- stm32f2xx_rcc.c; //时钟初始化
/ `; r) u7 j" ^& f. Q - 4 j! D4 Y7 s& [1 w, z
- misc.c; //中断初始化
复制代码 8 K9 x1 K4 C) r% {
初始化主要包括8个部分。
* A: d* ?" k0 @0 C9 D$ {+ ^0 j; c. E( \" O4 v( S3 X: h ~
1、 使能GPIO时钟:
* w9 g8 ?" ~8 }1 y) @
' ~) w. i9 Z/ b5 I7 \! ?- RCC_AHB1PeriphClockCmd(GPIOX, ENABLE);
复制代码 1 {, b. r, {# i8 q$ f5 d4 C; k/ Q
2、 使能UART时钟:" j1 s' o! Z' O, z& F
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USARTX, ENABLE);
复制代码 $ E8 Q' _! @" K
3、 将GPIO引脚连接到USARTX:
1 v( r. S7 o' w2 x7 p- L, |5 w1 ~' \* P" G, S$ M1 X, l
原始函数:- GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);
复制代码 3 ^1 b/ g4 e1 X
GPIO_AF可选如下:
5 S+ h$ W+ T! n) h6 g0 A- 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;
复制代码
M- m- {" ~$ F% F) I, f2 _连接TX:
8 D& @$ q: s! O1 }5 _+ T1 \- GPIO_PinAFConfig(GPIOX, GPIO_PinSourceY, GPIO_AF);
复制代码
% Y+ }5 }: B8 e5 a: u连接RX:, r3 m) w& C9 `4 f# D$ g7 D
- GPIO_PinAFConfig(GPIOX, GPIO_PinSourceY, GPIO_AF);
复制代码
9 V- k- f" j' z( c7 t4、 配置GPIO的TX和RX:' I9 R6 F3 N7 |* e7 I7 V5 ~" G
; c: l4 F* M9 m4 N8 x' s. cTX配置:0 \; T& t* X2 t( f9 _
- GPIO_OType = GPIO_OType_PP;8 A/ X4 ^' d) X
+ P$ `: d8 Z) y- GPIO_PuPd = GPIO_PuPd_UP;% n( g& K' ^& z+ w
- ) S2 K5 k5 F+ S X" K
- GPIO_Mode = GPIO_Mode_AF;9 P O- T0 l. J
9 t& _2 A5 ~* l c1 n- GPIO_Pin = GPIO_Pin_XX;* o" T+ o; _2 G* r/ e8 V3 x
- 4 `5 S8 e' K2 y. W4 X) E
- GPIO_Speed = GPIO_Speed_50MHz;1 l! ? X8 n1 C, L
复制代码
6 h' C" p+ M0 C0 @' A9 FRX配置:# C' j: \0 B" i S
- GPIO_Mode = GPIO_Mode_AF;
" @$ j% i* Z* x7 v5 S' i - # K6 c% L6 X) ?
- GPIO_Pin = GPIO_Pin_XX;
+ x: R% D( J, G7 h: i
复制代码
: Q) [" v* V' C9 ^) h5、 串口初始化:; v- K4 Z, D; f3 t
- USART_InitStructure.USART_BaudRate = 115200;% B+ a' p9 ` [2 Q7 e% U& p& F _
% m1 N4 H P4 t1 j9 C- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
: c" R3 j# e: c8 ~7 Q - + _1 @' D/ o2 ^1 z2 S4 Q9 }
- USART_InitStructure.USART_StopBits = USART_StopBits_1;" L e% b! B7 @
- # {# n% S( f* f
- USART_InitStructure.USART_Parity = USART_Parity_No;
: T9 _2 t& @& L. ?( e7 i - h$ l( u6 x, x1 G' h
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;( n3 j/ R: F0 ~4 N/ o5 Q
- % c9 R: H; y3 L! e' k
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
6 V! h( o1 ?2 S! i! y8 u - : o, o& W5 K7 ]
- USART_Init(USARTx, &USART_InitStructure);
复制代码 " y# Y" {4 N, B, \' ?7 L
. ?4 u; T+ S& m. p. |, O这样的配置是从网上下来的,为什么串口还是无法发送数据??
/ T( J/ C6 `; Q( m5 D4 d! q& C- I2 v8 I* X( t' d
% h8 y' n3 q1 r' r |