1.1 RTC时钟模块硬件准备 图4.1-1 RTC时钟模块
图4.1-2 RTC时钟模块在WiFiIoT套件上的连接
1.2 RTC时钟模块硬件介绍
RTC时钟模块使用I2C接口为I2C0,对应管脚连接说明:
SDA -----底板的TX ----- GPIO_13
SCL -----底板的RX ------ GPIO_14
1.3 RTC时钟模块功能软件实现
RTC时钟模块通过I2C协议进行通信。
1. 首先初始化I2C配置,需要调用两个函数,分别是:
hi_u32 hi_i2c_init(hi_i2c_idx id, hi_u32 baudrate);
hi_u32 hi_i2c_set_baudrate(hi_i2c_idx id, hi_u32 baudrate);
以下对这两个函数进行详细介绍:
l hi_u32 hi_i2c_init(hi_i2c_idx id, hi_u32 baudrate);
此函数为I2C初始化函数。
hi_i2c_idx id:I2C硬件设备选择,取值范围为hi_i2c_idx枚举类型,如下:
- typedef enum {
- HI_I2C_IDX_0,
- HI_I2C_IDX_1,
- } hi_i2c_idx;
复制代码 hi_u32 baudrate:I2C通信波特率。
例如:RTC时钟模块与板子通过I2C0连接,通讯波特率为400K,故使用hi_i2c_init(HI_I2C_IDX_0, 400000);对其进行初始化。
l hi_u32 hi_i2c_set_baudrate(hi_i2c_idx id, hi_u32 baudrate);
此函数功能为配置相对应的I2C通讯波特率。
hi_i2c_idx id为I2C硬件设备选择,
hi_u32 baudrate所需配置波特率。
例如:对RTC时钟模块配置I2C0为400K波特率,其函数实现为hi_i2c_set_baudrate (HI_I2C_IDX_0, 400000);
2.写数据。通过I2C传递设备地址和数据给从机。函数实现如下:
图4.3-1
此处电源监控传感器的调用如下:
图4.3-2
3.读数据。通过I2C的读函数读回时间数据。
l hi_u32 hi_i2c_read(hi_i2c_idx id, hi_u16 device_addr, const hi_i2c_data *i2c_data);
hi_i2c_idx id:I2C硬件设备选择,取值范围为hi_i2c_idx枚举类型,如下:
- typedef enum {
- HI_I2C_IDX_0,
- HI_I2C_IDX_1,
- } hi_i2c_idx;
- hi_u16 device_addr:从机设备地址
- const hi_i2c_data *i2c_data:I2C发送/接收数据描述符,发送的数据类型如下:
- typedef struct {
- hi_u8* send_buf; /*CNcomment:数据发送指针CNend */
- hi_u32 send_len; /* CNcomment:发送数据长度(单位:byte)CNend */
- hi_u8* receive_buf; /**< Data RX pointer. CNcomment:数据接收指针CNend */
- hi_u32 receive_len; /*CNcomment:接收数据长度(单位:byte)CNend */
- } hi_i2c_data;
复制代码例子中,RTC时钟模块读数据函数实现如下:
图4.3-3
4.最后将读取到的年、月、日、时、分、秒、星期显示在oled屏上。以秒举例,编码如下:
图4.3-4