#申请原创# #雅特力# 由于上海上月中旬一直疫情,导致开发板不在身边,还好大掌柜宽容几天,赶紧写了个测评,身边找了个SHT30温湿度传感器,之前一直在用模拟IIC来操作这款传感器,21ic给了使用AT425这款开发板,尝试使用上面的硬件iic进行操作一番,准备资料如下。官方网站:https://www.arterytek.com/cn/index.jsp,我们在上面可以下载到我们需要的资料,参考手册,数据手册,MDK包插件,以及at-link驱动包,demo程序例程包,我所写的程序,也是基于官方的iic的demo程序,具体配置如下,
我们的工程目录如下整体组织结构都是根据官方格式:
MDK的环境目录配置如下:
define这一行的宏,不要配置错,不然编译报错,对应的头文件目录包括一定要全。
代码部分我们主要实现的是main.c和sht30驱动,时间有限,还没有移植oled屏显示。
我们使用硬件iic,那么需要调用系统的库函数,由于官方给我们封装了第三方库,也可以说是中间层,i2c_application.c这个文件,封装了很多的函数,我们可以直接调用即可iic初始化部分代码如下:
void i2c_lowlevel_init(i2c_handle_type* hi2c)
{
gpio_init_type gpio_init_structure;
if(hi2c->i2cx == I2Cx_PORT)
{
/* i2c periph clock enable */
crm_periph_clock_enable(I2Cx_CLK, TRUE);
crm_periph_clock_enable(I2Cx_SCL_GPIO_CLK, TRUE);
// crm_periph_clock_enable(I2Cx_SDA_GPIO_CLK, TRUE);
/* gpio configuration */
gpio_pin_mux_config(I2Cx_SCL_GPIO_PORT, I2Cx_SCL_GPIO_PinsSource, I2Cx_SCL_GPIO_MUX);
gpio_pin_mux_config(I2Cx_SDA_GPIO_PORT, I2Cx_SDA_GPIO_PinsSource, I2Cx_SDA_GPIO_MUX);
/* configure i2c pins: scl */
gpio_init_structure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_structure.gpio_mode = GPIO_MODE_MUX;
gpio_init_structure.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
gpio_init_structure.gpio_pull = GPIO_PULL_UP;
gpio_init_structure.gpio_pins = I2Cx_SCL_GPIO_PIN;
gpio_init(I2Cx_SCL_GPIO_PORT, &gpio_init_structure);
/* configure i2c pins: sda */
gpio_init_structure.gpio_pins = I2Cx_SDA_GPIO_PIN;
gpio_init(I2Cx_SDA_GPIO_PORT, &gpio_init_structure);
i2c_init(hi2c->i2cx, 0, I2Cx_CLKCTRL);
i2c_own_address1_set(hi2c->i2cx, I2C_ADDRESS_MODE_7BIT, 0x44);
}
}
然后就是SHT30初始化代码:
初始化成功后,我们在while(1)里循环读取温湿度数据,读出的是原始数据,还需要我们CRC校验后进行转换成浮点格式显示出来。
红色方框内即为读取函数和转换数据函数。
在串口显示如下
开发板实际接线图如下:
程序源码见附件,可直接打开编译下载。最后还是要感谢提供开发板的官方与21论坛,后续会继续支持与学习,祝雅特力与21越办越好
|