首先要感谢fighter版主提供的Nucleo-F411RE开发板,使我可以在Nucleo-F411RE上继续测试,我原来的那块坏了。
下面介绍在Nucleo-F411RE开发板上,使用Micropython控制DS3231时钟模块的方法。假设Micropython固件已经写入开发板,具体方法参考以前的帖子【在STM32F746G-Disco开发板上玩MicroPython】。
先将DS3231时钟模块(RTC)连接到F411开发板的I2C2接口上(I2C1无法使用,暂时没有找出原因)。DS3231有6根线,我们暂时只需要连接4个。具体连线是:
SCL -- B10
SDA -- B3
GND -- GND
VCC -- 3V3
我们先定义一个I2C对象
from pyb import I2C
i2c = I2C(2, I2C.MASTER, baudrate=100000)
|
再定义一个简单的函数,读取地址是0的寄存器,也就是秒,然后将它转换为十进制形式(原来是BCD码),并打印出来。
def test():
i2c.send(0, 104)
b = i2c.recv(1, 104)[0]
print(int(b/16),b%16)
while True:
test()
pyb.delay(500)
21
22
23
24
25
26
27
28
29
30
|
上面代码中,i2c.send是发送数据到I2C总线,它有两个参数,第一个是数据,第二个是I2C芯片的地址;i2c.recv函数类似。还可以用i2c.scan()函数搜索总线上已有的芯片,返回参数是这些芯片的地址。
注:
-
I2C芯片的地址是不包含读写位的
-
I2C1暂时无法使用,原因未知。
|