找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3541|回复: 7
收起左侧

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

[复制链接]
ID:526108 发表于 2020-7-18 16:33 | 显示全部楼层 |阅读模式
这个项目在开发板上运行是没有问题的
IMG_20200718_160535(2).jpg

使用的是DS3231的sop16封装的芯片,某宝上买的模块
IMG_20200718_160557(2).jpg


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


小板上用的是DS3231M的sop8芯片
1594981976464.jpeg


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



IMG_20200718_154206.jpg


原理图
P}$LI3YP8_{PPR(DL]ZG.png


PCB正面
QMIUSOA8~3LL~38WTWVNU~6.png


PCB反面
V1}%X6K3~YC2R8~FKHTQEB1.png


PCB上没有给IIC上拉电阻,但是在单片机内部上拉的4.7k的电阻,单片机寄存器初始化情况
D05V~M_F$E(E`0QU8FKULIC.png

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. }
复制代码
搞定可以送个小红包
回复

使用道具 举报

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 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:161785 发表于 2021-5-11 20:30 来自手机 | 显示全部楼层
3231应该有上拉电阻。

评分

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

查看全部评分

回复

使用道具 举报

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

评分

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

查看全部评分

回复

使用道具 举报

ID:541008 发表于 2021-12-21 08:54 | 显示全部楼层
有没有是因为驱动能力不足的原因
回复

使用道具 举报

ID:71233 发表于 2021-12-21 11:45 | 显示全部楼层
我一般用模拟IIC驱动,不用内部的IIC驱动。使用芯片内置IIC驱动需要设置什么寄存器吧。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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