- void uart_init(u32 bound) {4 A" J3 d# V! Q0 m5 I
- //GPIO端口设置
D6 A' b, R6 V4 D1 x, {9 f" M - GPIO_InitTypeDef GPIO_InitStructure;
# _6 v, k1 o. g, W( \2 I) } - USART_InitTypeDef USART_InitStructure;
$ C; y7 H6 m% s- B3 S- s4 x& b - NVIC_InitTypeDef NVIC_InitStructure;
# \! |6 Y4 u0 m% f
+ [( w4 T! _" j# E" \, T. E$ z- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟
& M7 {4 k2 }6 J# l - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
4 b, W! b' H7 V. z - RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);% G' g# |. s, @9 G/ L8 K
- GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);' s5 o3 _, a" S" D4 H q
- // //USART1_TX GPIOA.9& `* B: `% S/ E: I: h4 q R
- // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9. c) _, Y7 c8 s
- // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/ a+ ~2 M- \! c7 Z/ N7 G - // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出( `8 T* G* i# M6 \0 W3 u" q8 T
- // GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.95 C Y. d5 d3 \. H
- //0 |) {# G5 O R1 I# H' E
- // //USART1_RX GPIOA.10初始化% Y+ \! o0 D( T$ q% g, h. l
- // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10% Q5 C; K. h* `" L2 F5 }
- // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入8 ]2 y9 A3 t: X' U
- // GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10! y5 Q; c1 n+ s2 e) w+ P G; x
- /* TX PB6 */- ^* \0 N6 V/ n/ w, b% u4 _; S+ h
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;6 J$ m9 }/ M3 M7 D8 l
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
; x' o' T; ?/ ^1 B( n% h - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
& v p4 s' m3 Z1 u. E- Y; I - GPIO_Init(GPIOB, &GPIO_InitStructure);
, b; o; ~5 P+ r; l - ( h) c5 Q) C; a) q7 p/ h4 s6 }
- /* RX PB7 */
# @4 S1 Y$ Z) A5 q+ U; ]4 h - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
' x1 A: P- y7 J, b) O - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
( _3 d* V) K1 [ - GPIO_Init(GPIOB, &GPIO_InitStructure);
2 j& S. ]" T% X
* c, R- a6 p( _) j
w- W# I/ ^9 {$ `- //Usart1 NVIC 配置
5 Z% R$ e. S. Q2 S+ V2 ~0 A - NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;& X5 z# R2 {- M, B) B
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3 ; //抢占优先级3) S9 v a+ f! C A8 _+ Z
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3
) T5 F, H7 h( [9 v6 y' _' @3 A - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能0 Q4 L7 j" J0 _* Z: o4 t1 e
- NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
' n! R4 u b0 R7 M! x5 y6 P
5 B& b) z6 k8 y# K0 s% b! Q- //USART 初始化设置
( Z2 u: ?/ T5 d - / L9 k7 n8 V8 w3 |2 w( M' v
- USART_InitStructure.USART_BaudRate = bound;//串口波特率
2 F; K& Y3 o$ v( k/ O - USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
" u0 r2 s3 V1 ^* m& U, } - USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
6 i" D2 u2 G/ N* K* E' q8 G2 F+ T - USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
. c% L" p% y2 W$ S) d% b& e5 T1 y, P - USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制! B& s0 s# g4 K* d* S, p2 U- L
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
% ?. y! G# c+ r6 }4 d/ U4 o% W) x
+ c- a7 N. n) J- USART_Init(USART1, &USART_InitStructure); //初始化串口1
% q, L0 L; w# g - USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
7 }: r; N7 R4 d2 W# @$ M8 v - USART_Cmd(USART1, ENABLE); //使能串口1
, O* F1 i% W) P% i
- x( |& O& X# Z* W) q- s4 P- }4 R0 L2 \' z/ @
3 i# G3 T0 L+ G9 }4 }0 ]" g! `
- o* X8 G3 u7 b: P$ R% C
复制代码 版权声明:小盼你最萌哒% g: h3 {6 H; _" @5 G' C
如有侵权请联系删除
b. w6 I. T+ J; [$ A |