未分类 · 2023年2月3日

GD32E230串口模板

1、开启时钟
2、配置GOIO口
3、配置串口初始化
4、开启串口中断
5、编写串口发送函数与中断接收函数

1、开启时钟

void rcc_periph_clock_enable(void)
{
    //启动GPIOA时钟
    rcu_periph_clock_enable(RCU_GPIOA);
    //开启串口时钟
    rcu_periph_clock_enable(RCU_USART0);
}

2、配置GOIO口

void GPIO_MOde_init(void)
{
    //设置引脚复用1(USART)
    gpio_af_set(GPIOA,GPIO_AF_1,GPIO_PIN_9);
    gpio_af_set(GPIOA,GPIO_AF_1, GPIO_PIN_10);
    //设置引脚输出
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_9);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_9);

    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_10);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_10);
}

3、配置串口初始化

void com_usart_init(void)
{
    //设置缺省值
    usart_deinit(USART0);
    //配置串口波特率
    usart_baudrate_set(USART0,65536U);//波特率115200
    //配置数据位
    usart_word_length_set(USART0, USART_WL_8BIT);//8个数据位
    //配置停止位
    usart_stop_bit_set(USART0, USART_STB_1BIT); //1个停止位
    //配置奇偶校验位
    usart_parity_config(USART0, USART_PM_NONE);//无奇偶校验
    //RTS流控关闭
    usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);
    //CTS流控关闭
    usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);
    //配置串口接收使能
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);
    //配置串口发送使能
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
    //初始化串口配置
    usart_enable(USART0);
}
## 4、开启串口中断
void usart_IRQn_init(void)
{
    //使能中断
    usart_interrupt_enable(USART0,USART_INT_RBNE);
    //使能中断优先级
    nvic_irq_enable(USART0_IRQn, 0U);
}

5、编写串口发送函数与中断接收函数

/*!
    \brief      串口发送字节函数
    \param[in]  none
    \param[out] none
    \retval     none
*/
void USART0_Send_Byte(uint8_t Send_Byte)
{
    usart_data_transmit(USART0, Send_Byte);
    while ( usart_flag_get(USART0, USART_FLAG_TBE)== RESET) ;
}
/*!
    \brief      串口发送字符串函数
    \param[in]  none
    \param[out] none
    \retval     none
*/
void USART0_Send_Str(uint8_t *Str)
{
    while((*Str)!='\0')
    {
      USART0_Send_Byte(*Str);
      Str++;
    }
}
/*!
    \brief      重定向c库函数printf到串口,重定向后可使用printf函数
    \param[in]  none
    \param[out] none
    \retval     none
*/
int fputc(int ch, FILE *f)
{
        /* 发送一个字节数据到串口 */
        USART0_Send_Byte((uint8_t) ch);

        return (ch);
}

uint8_t receiver_buffer[10];
void EXTI0_1_IRQHandler(void)
{
    if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)){
        /* receive data */
        receiver_buffer[0] = usart_data_receive(USART0);
        //判断数据内容,进行逻辑处理
        if(receiver_buffer[0] == 0x1A)
        {

        }
    }
}