一、串口初始化
void Serial_Init(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_USART1);
gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_2);
gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_3);
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_2);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_3);
usart_deinit(USART1);
usart_baudrate_set(USART1, 115200);
usart_parity_config(USART1, USART_PM_NONE);
usart_word_length_set(USART1, USART_WL_8BIT);
usart_stop_bit_set(USART1, USART_STB_1BIT);
usart_data_first_config(USART1, USART_MSBF_LSB);
nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
nvic_irq_enable(USART1_IRQn, 0, 0);
usart_interrupt_enable(USART1, USART_INT_RBNE);
usart_transmit_config(USART1, USART_TRANSMIT_ENABLE);
usart_receive_config(USART1, USART_RECEIVE_ENABLE);
usart_enable(USART1);
}
二、串口发送一个字节数据
void Serial_SendByte(uint16_t txData)
{
usart_data_transmit(USART1, txData);
while(usart_flag_get(USART1, USART_FLAG_TBE) == RESET);
}
三、串口接收一个字节数据
uint16_t Serial_ReceiveByte(void)
{
uint16_t rxData;
while(usart_flag_get(USART1, USART_FLAG_RBNE) == RESET);
rxData = usart_data_receive(USART1);
return rxData;
}
四、串口中断处理函数
void USART1_IRQHandler(void)
{
if(usart_flag_get(USART1, USART_FLAG_RBNE) == SET)
{
receive_Byte = Serial_ReceiveByte();
}
usart_interrupt_flag_clear(USART1, USART_INT_FLAG_RBNE);
}
其他功能函数可以参考我的stm32的内容