54 lines
1.4 KiB
Plaintext
54 lines
1.4 KiB
Plaintext
/**
|
|||
|
|
* @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);
|
||
|
|
}
|