步驟:
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);
}