找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3508|回复: 7
打印 上一主题 下一主题
收起左侧

STC8A单片机硬件IIC驱动DS3231M芯片失败的问题

[复制链接]
跳转到指定楼层
楼主
这个项目在开发板上运行是没有问题的


使用的是DS3231的sop16封装的芯片,某宝上买的模块



功能测试通过后制作成小板



小板上用的是DS3231M的sop8芯片



调试了很多天STC8A单片机始终无法与DS3231M通讯,最多只能读取一秒的时间就卡死的IIC应答上







原理图



PCB正面



PCB反面



PCB上没有给IIC上拉电阻,但是在单片机内部上拉的4.7k的电阻,单片机寄存器初始化情况


DS3231驱动代码如下
  1. void Wait(){//I2C应答
  2. unsigned char a=0;
  3. while(!(I2CMSST&0x40)&&++a);
  4. I2CMSST&=~0x40;
  5. }
  6. void Start(){//发送START命令
  7. I2CMSCR=0x01;
  8. Wait();
  9. }
  10. void SendData(unsigned char dat){//发送数据
  11. I2CTXD=dat;
  12. I2CMSCR=0x02;
  13. Wait();
  14. }
  15. void RecvACK(){//接收ACK
  16. I2CMSCR=0x03;
  17. Wait();
  18. }
  19. void SendACK(){//设置ACK信号
  20. I2CMSST=0x00;
  21. I2CMSCR=0x05;
  22. Wait();
  23. }
  24. void SendNAK(){//设置NAK信号
  25. I2CMSST=0x01;
  26. I2CMSCR=0x05;
  27. Wait();
  28. }
  29. char RecvData(){//接收数据
  30. I2CMSCR=0x04;
  31. Wait();
  32. return I2CRXD;
  33. }
  34. void Stop(){//发送STOP命令
  35. I2CMSCR=0x06;
  36. Wait();
  37. }
  38. unsigned char DS3231_read(unsigned char site){//DS3231读取
  39. P_SW2|=B(1000,0000);
  40. Start();
  41. SendData(0xD0);
  42. RecvACK();
  43. SendData(site);
  44. RecvACK();
  45. Start();
  46. SendData(0xD1);
  47. RecvACK();
  48. site=RecvData();
  49. SendNAK();
  50. Stop();
  51. P_SW2&=B(0111,1111);
  52. return site;
  53. }
  54. void DS3231_wirte(unsigned char site,unsigned char dat){//DS3231写入
  55. P_SW2|=B(1000,0000);
  56. Start();
  57. SendData(0xD0);
  58. RecvACK();
  59. SendData(site);
  60. RecvACK();
  61. SendData(dat);
  62. RecvACK();
  63. Stop();
  64. P_SW2&=B(0111,1111);
  65. }
复制代码
搞定可以送个小红包
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2020-7-18 18:33 | 只看该作者
需要上拉电阻 4k7 在SDA和SCL  IIC接口

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:401564 发表于 2020-7-19 13:34 | 只看该作者
在下载器那设定单片机的时钟为6MHZ试一下

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:687694 发表于 2020-7-19 18:04 | 只看该作者
当年51芯片确实内部有上拉电阻,STC8也有,不过好像记得在数据手册上看过需要打开上拉才可以,默认是高阻态。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:161785 发表于 2021-5-11 20:30 来自手机 | 只看该作者
3231应该有上拉电阻。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:890869 发表于 2021-8-20 22:04 | 只看该作者
楼主解决了吗,看楼主代码上拉电阻是使能了的,问题出在哪呢。难道是内部上拉电阻只有4.1k造成的吗。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:541008 发表于 2021-12-21 08:54 | 只看该作者
有没有是因为驱动能力不足的原因
回复

使用道具 举报

8#
ID:71233 发表于 2021-12-21 11:45 | 只看该作者
我一般用模拟IIC驱动,不用内部的IIC驱动。使用芯片内置IIC驱动需要设置什么寄存器吧。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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