找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4779|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

STC8A單片機(jī)硬件IIC驅(qū)動(dòng)DS3231M芯片失敗的問題

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這個(gè)項(xiàng)目在開發(fā)板上運(yùn)行是沒有問題的


使用的是DS3231的sop16封裝的芯片,某寶上買的模塊



功能測試通過后制作成小板



小板上用的是DS3231M的sop8芯片



調(diào)試了很多天STC8A單片機(jī)始終無法與DS3231M通訊,最多只能讀取一秒的時(shí)間就卡死的IIC應(yīng)答上







原理圖



PCB正面



PCB反面



PCB上沒有給IIC上拉電阻,但是在單片機(jī)內(nèi)部上拉的4.7k的電阻,單片機(jī)寄存器初始化情況


DS3231驅(qū)動(dòng)代碼如下
  1. void Wait(){//I2C應(yīng)答
  2. unsigned char a=0;
  3. while(!(I2CMSST&0x40)&&++a);
  4. I2CMSST&=~0x40;
  5. }
  6. void Start(){//發(fā)送START命令
  7. I2CMSCR=0x01;
  8. Wait();
  9. }
  10. void SendData(unsigned char dat){//發(fā)送數(shù)據(jù)
  11. I2CTXD=dat;
  12. I2CMSCR=0x02;
  13. Wait();
  14. }
  15. void RecvACK(){//接收ACK
  16. I2CMSCR=0x03;
  17. Wait();
  18. }
  19. void SendACK(){//設(shè)置ACK信號(hào)
  20. I2CMSST=0x00;
  21. I2CMSCR=0x05;
  22. Wait();
  23. }
  24. void SendNAK(){//設(shè)置NAK信號(hào)
  25. I2CMSST=0x01;
  26. I2CMSCR=0x05;
  27. Wait();
  28. }
  29. char RecvData(){//接收數(shù)據(jù)
  30. I2CMSCR=0x04;
  31. Wait();
  32. return I2CRXD;
  33. }
  34. void Stop(){//發(fā)送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. }
復(fù)制代碼
搞定可以送個(gè)小紅包
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:155507 發(fā)表于 2020-7-18 18:33 | 只看該作者
需要上拉電阻 4k7 在SDA和SCL  IIC接口

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:401564 發(fā)表于 2020-7-19 13:34 | 只看該作者
在下載器那設(shè)定單片機(jī)的時(shí)鐘為6MHZ試一下

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:687694 發(fā)表于 2020-7-19 18:04 | 只看該作者
當(dāng)年51芯片確實(shí)內(nèi)部有上拉電阻,STC8也有,不過好像記得在數(shù)據(jù)手冊上看過需要打開上拉才可以,默認(rèn)是高阻態(tài)。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

5#
ID:161785 發(fā)表于 2021-5-11 20:30 來自手機(jī) | 只看該作者
3231應(yīng)該有上拉電阻。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

6#
ID:890869 發(fā)表于 2021-8-20 22:04 | 只看該作者
樓主解決了嗎,看樓主代碼上拉電阻是使能了的,問題出在哪呢。難道是內(nèi)部上拉電阻只有4.1k造成的嗎。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

7#
ID:541008 發(fā)表于 2021-12-21 08:54 | 只看該作者
有沒有是因?yàn)轵?qū)動(dòng)能力不足的原因
回復(fù)

使用道具 舉報(bào)

8#
ID:71233 發(fā)表于 2021-12-21 11:45 | 只看該作者
我一般用模擬IIC驅(qū)動(dòng),不用內(nèi)部的IIC驅(qū)動(dòng)。使用芯片內(nèi)置IIC驅(qū)動(dòng)需要設(shè)置什么寄存器吧。
回復(fù)

使用道具 舉報(bào)

9#
ID:437129 發(fā)表于 2025-1-19 20:17 | 只看該作者
Y_G_G 發(fā)表于 2020-7-19 13:34
在下載器那設(shè)定單片機(jī)的時(shí)鐘為6MHZ試一下

師傅在上,請(qǐng)受我一拜!
我也遇到同樣問題了,折騰了一個(gè)禮拜了沒結(jié)果。
按師傅的方法燒錄改為6M,直接成功。
回復(fù)

使用道具 舉報(bào)

10#
ID:1034262 發(fā)表于 2025-1-19 23:11 | 只看該作者
dsbk123 發(fā)表于 2025-1-19 20:17
師傅在上,請(qǐng)受我一拜!
我也遇到同樣問題了,折騰了一個(gè)禮拜了沒結(jié)果。
按師傅的方法燒錄改為6M,直接 ...

那就是I2C速度太快了。STC8系列的MCU速度很快的,操作IO值需要一個(gè)時(shí)鐘。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表