CH32V307 串口

由于官方的link(USB转串口模块)和板子都设置了防反二极管,使用时串联为2倍的二极管压降,导致串口下载不成功:
下载时需要移除TX_0、RX_0的跳线帽。
经过验证,涉及到使用USART1时也需要移除,否则串口调试助手会无法回显数据

"""
void USART1_IRQHandler(void)
{
uint8_t RxBuffer;

/* 如果发生了接收中断 */
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收数据寄存器不为空中断, 开始接收
{
    if(USART1_RX_Index >= USART_RX_MAX)
        USART1_RX_Index = 0;            //防止下标越界

    while(1)
    {
        while(USART_GetITStatus(USART1, USART_IT_RXNE) == RESET);       //等待接收数据
        RxBuffer = USART_ReceiveData(USART1);    //库函数方式读取【接收到1个字节】
        if(RxBuffer != '#')
        {
            USART1_RX_Buffer[USART1_RX_Index++] = RxBuffer;
            while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);    //等待上次发送结束
            USART_SendData(USART1, RxBuffer);                               //立即发送接收到的字符
        }
        else if(RxBuffer == '#')
        {
           USART1_RX_Buffer[USART1_RX_Index++] = RxBuffer;
           USART1_RX_OverFlag = 1;         //特定模式接收完成,标志位置1
           break;
        }
    }

// while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) // Data has been sent completely

}

/* 清除接收中断标志位,可选,读DR自动清除*/
USART_ClearFlag(USART1, USART_FLAG_RXNE);

/*检测到空闲线路中断*/
if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)
{
    USART1_RX_OverFlag = 1;           //数据帧结束标志位,置1
    USART_ReceiveData(USART1);        //读取DR,清除中断标志位
}

}

"""

posted @   zlib001  阅读(198)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示