步骤:
1.时钟使能:GPIO时钟使能,串口时钟使能。
RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
2.端口配置:GPIO引脚配置,复用模式。
GPIO_InitTypeDef GPIO_Struct;GPIO_Struct.GPIO_Pin=GPIO_Pin_9;GPIO_Struct.GPIO_Mode=GPIO_Mode_AF;GPIO_Struct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Struct.GPIO_OType=GPIO_OType_PP;GPIO_Struct.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(GPIOF,&GPIO_Struct);GPIO_Struct.GPIO_Pin=GPIO_Pin_10;GPIO_Struct.GPIO_Mode=GPIO_Mode_AF;GPIO_Struct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Struct.GPIO_OType=GPIO_OType_PP;GPIO_Struct.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(GPIOF,&GPIO_Struct);
端口为复用模式。
3.串口配置:串口参数初始化,串口使能,并开启中断。
USART_InitTypeDef Usart_Struct;Usart_Struct.USART_BaudRate=19200;Usart_Struct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;Usart_Struct.USART_Mode= USART_Mode_Tx;Usart_Struct.USART_Parity=USART_Parity_No;Usart_Struct.USART_StopBits=USART_StopBits_1;Usart_Struct.USART_WordLength=USART_WordLength_8b;USART_Init(USART1,&Usart_Struct);USART_Cmd(USART1,ENABLE);
4.中断配置:中断参数设置,中断处理函数配置(中断类型,使能,抢占优先级等)。
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);NVIC_InitTypeDef NVIC_Inst;NVIC_Inst.NVIC_IRQChannel= USART1_IRQn;NVIC_Inst.NVIC_IRQChannelCmd=ENABLE;NVIC_Inst.NVIC_IRQChannelPreemptionPriority=1;NVIC_Inst.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_Inst);//NVIC Init}void USART1_IRQHandler(void){u8 res;if(USART_GetITStatus(USART1,USART_IT_RXNE)){res=USART_ReceiveData(USART1);USART_SendData(USART1,res);}}
5.主函数配置:需设置中断优先级分组。
int main(void){NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);Usart_Init();while(1);}