GD32串口通信

USART通信配置

  1. 初始化GPIO(需要能够复用为串口)
  2. 管脚模式输出输入设置
  3. 串口时钟使能
  4. 波特率、校验位、数据位、停止位、使能接受发送、使能串口
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值