打印

GD32F207串口进不去接收中断

[复制链接]
3871|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
刘十九|  楼主 | 2022-7-14 08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 刘十九 于 2022-7-14 14:20 编辑

以下附上源码,求各位大佬解答

void Usart_Init(void)
{
    rcu_periph_clock_enable(RCU_AF);  // 使能 AF 时钟
    rcu_periph_clock_enable(RCU_GPIOD);  // 使能 GPIO 时钟
    rcu_periph_clock_enable(RCU_USART1);  // 使能串口时钟

    gpio_pin_remap_config(GPIO_USART1_REMAP,ENABLE);  // 重映射 USART1 管脚

    // 引脚初始化:推挽输出, 速度50MHz, PD5 TX
    gpio_init(USART1_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, USART1_TX);

    // 引脚初始化:浮空输入, 速度50MHz, PD6, RX
    gpio_init(USART1_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, USART1_RX);

    // 串口配置
    usart_deinit(USART1);  // 复用 USART1
    nvic_irq_enable(USART1_IRQn, 0, 0);  // 配置中断优先级
    usart_baudrate_set(USART1, 9600);  // 波特率设置
    usart_word_length_set(USART1, USART_WL_8BIT);  // 8位数据位
    usart_stop_bit_set(USART1, USART_STB_1BIT);  // 1位停止位
    usart_parity_config(USART1, USART_PM_NONE);  // 无校验位
    // usart_hardware_flow_rts_config(USART1, USART_RTS_DISABLE);  // 配置RTS硬件控制流
    // usart_hardware_flow_cts_config(USART1, USART_CTS_DISABLE);  // 配置CTS硬件控制流
    usart_receive_config(USART1, USART_RECEIVE_ENABLE);  // 配置 USART1 接收
    usart_transmit_config(USART1, USART_TRANSMIT_ENABLE);  // 配置 USART1 发送
    usart_enable(USART1);  // 使能 USART1

    usart_interrupt_enable(USART1, USART_INT_RBNE);  // 使能 读缓冲区非空中断和溢出错误中断
}

/*
函数:串口中断函数
*/
void USART1_IRQHandler(void)
{
    uint8_t res;

    // 判断接收中断是否产生
    if(RESET != usart_interrupt_flag_get(USART1, USART_INT_FLAG_RBNE))
    {
        usart_interrupt_flag_clear(USART1, USART_INT_FLAG_RBNE);  // 清除标志位

        res = (uint8_t)usart_data_receive(USART1);  // 读取数据

        // 判断是否溢出
        if(ReadCount < USART_READ_BUF_SIZE)
        {
            ReadBuf[ReadCount++ = res;
        }
        timeout_flag = 160;
    }

    // 判断发送中断是否产生
    if(RESET != usart_interrupt_flag_get(USART1, USART_INT_FLAG_TBE))
    {
        static uint8_t i = 0;  // 发送数据下标

        usart_interrupt_flag_clear(USART1, USART_INT_FLAG_TBE);  // 清除标志位

        if(datalen > 0)
        {
            usart_data_transmit(USART1, SendBuf[i++);
            datalen--;
        }
        else if(datalen == 0)
        {
            usart_interrupt_disable(USART1, USART_INT_TBE);
            i = 0;
        }
    }
}

使用特权

评论回复

相关帖子

沙发
刘十九|  楼主 | 2022-7-14 14:21 | 只看该作者
dddddddd

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝