You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Attiny2313 UART回显字节最高位异常置位问题排查求助

问题根因

你的UART初始化代码没有正确设置UCSRC寄存器,导致帧格式配置错误:
Attiny2313的UCSRC寄存器和UBRRH寄存器共用同一个地址,写操作时必须将URSEL位(寄存器第7位)置1,才能将数据写入UCSRC,否则实际写入的是UBRRH寄存器。你当前的配置代码UCSRC = (1 << USBS) | (3 << UCSZ0); 没有设置URSEL位,因此帧格式根本没有生效,实际运行的是默认的帧格式(7位数据+奇校验),校验位被当成了数据的最高位,才会出现所有低7位正确、最高位被异常置1的情况。

修复方案

  1. 修改init_uart函数中的UCSRC配置代码,加上URSEL位:
// 原错误代码
// UCSRC = (1 << USBS) | (3 << UCSZ0);   // asynchron 8n1
// 修改为
UCSRC = (1 << URSEL) | (1 << USBS) | (3 << UCSZ0);   // 正确配置8N1帧格式
  1. 额外优化:你的系统时钟是1MHz,9600波特率的计算误差约8.5%,接近UART通信的误差容忍上限,若修复后仍偶发通信错误,可将波特率降低为4800,此时误差仅0.15%,通信稳定性会大幅提升。

修复完成后,你在C代码中直接用if (c == 0x01)、if (c == 0x05)即可正确匹配你从Python端发送的字节,不需要做额外的位处理。

内容的提问来源于stack exchange,提问作者jonas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:45:04