/** * @file usart0.cpp * @brief USART0 串口配置与 printf 重定向实现。 */ #include "main.h" #include "device/usart0.h" #include "sys/config.h" #define USARTx USART0 /** * @brief 重定向标准输出字符到 USART0。 * @param[in] ch 待输出的字符。 * @param[in] f 标准流指针;当前实现中未实际使用。 * @retval 返回已发送的字符值。 */ extern "C" int fputc(int ch, FILE *f) { (void)f; while(RESET == usart_flag_get(USARTx, USART_FLAG_TBE)) { } usart_data_transmit(USARTx, (uint16_t)ch); return ch; } /** * @brief 配置 USART0 相关 GPIO 引脚。 */ void usart0_gpio_config(void) { rcu_periph_clock_enable(RCU_GPIOA); gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9); gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10); } /** * @brief 配置并使能 USART0 外设。 * @note 当前使用 8N1 格式,115200 波特率,收发同时使能。 */ void usart0_config(void) { rcu_periph_clock_enable(RCU_USART0); usart_deinit(USARTx); usart_baudrate_set(USARTx, CONFIG_USART0_BAUDRATE); usart_word_length_set(USARTx, USART_WL_8BIT); usart_stop_bit_set(USARTx, USART_STB_1BIT); usart_parity_config(USARTx, USART_PM_NONE); usart_receive_config(USARTx, USART_RECEIVE_ENABLE); usart_transmit_config(USARTx, USART_TRANSMIT_ENABLE); usart_enable(USARTx); }