步骤:
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);
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』