1、usart
uint8_t rxbuffer[100] = {0};
uint8_t txbuffer[100] = {0};
#define ARRAYNUM(arr_name) (uint32_t)(sizeof(arr_name) / sizeof(*(arr_name)))
/**
* @brief 重定向c库函数printf到USARTx
* @Param None
* @retval None
*/
int fputc(int ch, FILE *f)
{
usart_data_transmit(USART0, (uint8_t)ch);
while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
return ch;
}
/**
* @brief 重定向c库函数getchar,scanf到USARTx
* @Param None
* @retval None
*/
int fgetc(FILE *f)
{
uint8_t ch = 0;
ch = usart_data_receive(USART0);
return ch;
}
/**
* @brief 串口驱动初始化
* @Param buad:串口波特率
* @retval None
*/
void Usart0_init(uint32_t buad)
{
// GPIO时钟使能
rcu_periph_clock_enable(RCU_GPIOA);
// USART时钟使能
rcu_periph_clock_enable(RCU_USART0);
// 配置TX为推挽复用模式
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
// 配置RX为浮空输入模式
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
// 配置串口的工作参数
usart_deinit(USART0);
usart_baudrate_set(USART0, buad); // 波特率
usart_word_length_set(USART0, USART_WL_8BIT); // 帧数据字长
usart_stop_bit_set(USART0, USART_STB_1BIT); // 停止位
usart_parity_config(USART0, USART_PM_NONE); // 奇偶校验位
usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE); // 硬件流控制RTS
usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE); // 硬件流控制CTS
usart_receive_config(USART0, USART_RECEIVE_ENABLE); // 使能接收
usart_transmit_c