USART通信配置
- 初始化GPIO(需要能够复用为串口)
- 管脚模式输出输入设置
- 串口时钟使能
- 波特率、校验位、数据位、停止位、使能接受发送、使能串口
void USART_Config(void)
{
/* 初始化GPIO外设 */
rcu_periph_clock_enable(RCU_GPIOA);
/* TX管脚,PA9,复用推挽输出,速度50MHz */
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
/* RX管脚,PA10,下拉输入,速度50MHz */
gpio_init(GPIOA, GPIO_MODE_IPD, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
/* 初始化USART外设 */
rcu_periph_clock_enable(RCU_USART0); // 使能串口0时钟
usart_baudrate_set(USART0, 115200); // 波特率115200
usart_parity_config(USART0, USART_PM_NONE); // 无校检
usart_word_length_set(USART0, USART_WL_8BIT); // 8位数据位
usart_stop_bit_set(USART0, USART_STB_1BIT); // 1位停止位
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE); // 使能串口发送
usart_receive_config(USART0, USART_RECEIVE_ENABLE); // 使能串口接收
usart_enable(USART0); // 使能串口
}
串口发送数据
第一段代码只能发送单个字符
void usart_send_data(uint8_t ucch)
{
usart_data_transmit(BSP_USART, (uint8_t)ucch);
while(RESET == usart_flag_get(BSP_USART, USART_FLAG_TBE)); // 等待发送数据缓冲区标志置位
}
第二段代码可以发送字符串
void usart_send_String(uint8_t *ucstr)
{
while(ucstr && *ucstr) // 地址为空或者值为空跳出
{
usart_send_data(*ucstr++);
}
}
串口重定向
C语言中的printf函数默认输出设备是显示器,如果要在串口显示,必须重新定义标准库函数里调用的与输出设备相关的函数。需要注意的是,添加stdio.h
int fputc(int ch, FILE *f)
{
usart_data_transmit(USART0, (uint8_t) ch);
while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
return ch;
}