模拟I2C驱动DS1307日历模块是我常做的测试项目,本次测试时却不顺利,读芯片勉强通过,但写芯片却不成功,用逻辑分析仪抓取时序,发现延时达数百微秒,而正常情况下应该是5微秒左右。下面是抓取的时序截图:
放大之后看时钟周期接近1毫秒(0.994ms):
而代码中的延时已经接近最低限度,仅仅是一行NOP()指令。之后进入MCC查看时钟配置,原来是我的时钟配置不正确,频率仅为1MHz(见下图):
将时钟修改为32MHz后,速度提高了,读写操作就正常了。
然而又遇到了一个问题,编译时从main函数直接对DS1307日历模块设置日期时,编译却出错了:
出错提示如下:
在主函数中注释掉这行,将设置日期改在初始化函数中调用就不出错:
尚不清楚是什么原因造成的,似乎是代码中找不到什么词吧。
下面是测试过程的照片:
这是屏幕中显示的日期,时间每秒刷新一次,日期每分钟刷新一次:
这是DS1307日历模块的正面:
这是日历模块的反面:
|