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,清除中断标志位
}
}
"""
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!