由于官方的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,清除中断标志位
}
}
"""
标签:Index,RxBuffer,USART,RX,CH32V307,串口,USART1 From: https://www.cnblogs.com/zlib/p/17553655.html