CH32V307 串口

发布时间 2023-07-14 14:40:35作者: zlib001

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

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

/* 如果发生了接收中断 */
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)                   //接收数据寄存器不为空中断
{

    while(1){
        RxBuffer = USART_ReceiveData(USART1);                           //库函数方式读取【接收到的1个字节】;

        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);    //等待上次发送结束
        USART_SendData(USART1, RxBuffer);                               //发送数据

        if(USART1_RX_Index >= USART_RX_MAX)
            USART1_RX_Index = 0;                                        //防止下标越界

        if(RxBuffer != '#')
            USART1_RX_Buffer[USART1_RX_Index++] = RxBuffer;
        else if(RxBuffer == '#')
        {
            USART1_RX_Buffer[USART1_RX_Index++] = RxBuffer;
            USART1_RX_OverFlag = 1;                                     //模式定义完成,设置:接收完成标志位,置1
            break;
        }
    }
  
}

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

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

}

"""