找回密码
 立即注册
查看: 405|回复: 7

(已解决)咨询:STC12C5204AD串口通信问题

[复制链接]
  • TA的每日心情
    开心
    前天 05:38
  • 签到天数: 56 天

    [LV.5]常住居民I

    7

    主题

    96

    回帖

    313

    积分

    中级会员

    积分
    313
    发表于 2023-10-10 11:28:32 | 显示全部楼层 |阅读模式
    本帖最后由 haishi28 于 2024-3-15 15:33 编辑

    一款老的STC12C52芯片,串口通信问题很奇怪,大家帮忙看看。
    前两张图,发送结果与理论一致;后两张图,发送的最后一个字节,变成0x00,是什么原因造成的呢?
    截图202310101124331472.jpg
    截图202310101125182157.jpg
    截图202310101126088591.jpg
    截图202310101126408214.jpg
    回复 送花

    使用道具 举报

    该用户从未签到

    553

    主题

    9617

    回帖

    1万

    积分

    管理员

    积分
    14091
    发表于 2023-10-10 14:21:40 | 显示全部楼层
    烧录程序时一定要选择【下次重新上电使用外部晶振】
    截图202310101420489584.jpg

    截图202310101424266507.jpg

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 05:38
  • 签到天数: 56 天

    [LV.5]常住居民I

    7

    主题

    96

    回帖

    313

    积分

    中级会员

    积分
    313
     楼主| 发表于 2023-10-10 17:19:18 | 显示全部楼层
    神农鼎 发表于 2023-10-10 14:21
    烧录程序时一定要选择【下次重新上电使用外部晶振】

    感谢你的回复。我目前的确是使用的内部晶振,是会出现由于内部晶振偏差导致的数据乱码,但我不太理解的是为什么在连续调用SendData(temp)时,会出现第二次调用,就是00,如果我在调用SendData(temp)之前对temp赋值,则发送结果就不会错。上午我跟梁工沟通过,他觉得是我的变量不是全局的,可能被中途改写了。
    后面我会使用外部晶振,temp也改成全局试一下。
    会不会是我的编译器,配置的不对呢?
    或者是芯片损坏了?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 05:38
  • 签到天数: 56 天

    [LV.5]常住居民I

    7

    主题

    96

    回帖

    313

    积分

    中级会员

    积分
    313
     楼主| 发表于 2023-10-10 17:27:31 | 显示全部楼层
    神农鼎 发表于 2023-10-10 14:21
    烧录程序时一定要选择【下次重新上电使用外部晶振】

    再补充一个疑问:如果我用内部晶振,是不是只是应该影响发送的数据的波特率会有偏移,而不是不发送数据了?
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    553

    主题

    9617

    回帖

    1万

    积分

    管理员

    积分
    14091
    发表于 2023-10-10 17:50:13 | 显示全部楼层
    只是波特率不对,你可以换 STC12H1K16--内部时钟准
    截图202310101746378904.jpg


    截图202310101749058926.jpg

    https://www.stcaimcu.com/forum.p ... =4522&pid=30443

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 05:38
  • 签到天数: 56 天

    [LV.5]常住居民I

    7

    主题

    96

    回帖

    313

    积分

    中级会员

    积分
    313
     楼主| 发表于 2024-3-12 11:22:53 | 显示全部楼层
    解密问题!
    这个问题并不是代码导致的,也不是晶振不准导致的。
    原因是Keil里的工程配置:
    使用的芯片和Memory Model不匹配。有小伙伴遇到同样问题,可以联系我,一起探讨,
    我也没太理解这个配置的正确用法。
    我现在是配置成small。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 06:59
  • 签到天数: 81 天

    [LV.6]常住居民II

    5

    主题

    751

    回帖

    1247

    积分

    金牌会员

    积分
    1247
    发表于 2024-3-15 09:58:44 | 显示全部楼层
    keil配置还会影响运行结果
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 08:42
  • 签到天数: 149 天

    [LV.7]常住居民III

    20

    主题

    1129

    回帖

    2719

    积分

    金牌会员

    积分
    2719
    发表于 2024-3-15 10:09:21 | 显示全部楼层
    haishi28 发表于 2024-3-12 11:22
    解密问题!
    这个问题并不是代码导致的,也不是晶振不准导致的。
    原因是Keil里的工程配置:

    我记得这个small 和 large 会改变编译器编译代码的时候变量的内存位置,,small 是存放在data区,large模式是优先存放在xdata,,我感觉你可以看看map地址,,看看你的那个temp变量地址在什么地方又被使用了,,主要是观察中断函数,,
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-26 05:42 , Processed in 0.066099 second(s), 60 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表