STM32L051使用HAL库操作实例(13)- 读取IAQ-CORE-C传感器实例
目录
三、STM32CubeMX配置(本文使用的STM32CubeMX版本为6.1.2)例程使用模拟I2C进行数据读取
一、前言
iAQ‐core 传感器是 AMS 公司生产的室内空气质量检测模块,是一个可用于检测恶劣空气质量的低成本、超紧凑解决方案。 该模块采用微加工金属氧化物半导体 (MOS) 技术,以检测范围广泛的 VOC,并同时利用室内的 CO2 和TVOC 水平进行直接修正。检测原理为通过铂加热器和跨数字电极结构放置在约一微米薄的氮化硅膜上。通过加热来分析所处的空气中VOC的比例,转换为CO2的PPM值/TVOC的PPB值输出。
二、传感器参数
- ?工作电压:3.3±0.1V ? ? ?
- ?测量范围:相当于450-2000ppm的CO2,125-600ppb的TVOC
- ?输出信号:I2C
- ?高灵敏度,响应速度快 ? ? ?
- ?测量周期:1ms(脉冲工作模式),11ms(持续工作模式) ? ? ?
- ?低功耗:在9mW(脉冲工作模式)到67mW(持续工作模式
三、STM32CubeMX配置(本文使用的STM32CubeMX版本为6.1.2)例程使用模拟I2C进行数据读取
思路:配置相关外设及使用模拟I2C进行数据读取,再将读取的数据通过串口打印出来;
1.MCU选型
本例程使用的为STM32L051C8T6型号
2.使能时钟
3.时钟配置
4.GPIO口配置
模拟I2C引脚设置
USART串口参数设置
???????
四、配置STM32CubeMX生成工程文件
五、点击GENERATE CODE生成工程文件
六、案例程序
1.I2C部分代码说明
关于模拟的IIC时序代码可参考原子的例程,这里不再复述。
IAR-CORE-C模块的IIC通讯与传统的IIC设备读取存在一个特别的地方,再DATAsheet中有相关的说明,即在读取模块数据时,模块接收读取指令后会强制将SCL线上的电平拉低,待数据准备完成后再将SCL线电平释放为高电平。所以在读取模块数据时需要去判断SCL线的电平状态,再进行数据的读取处理,如果不等待直接去进行数据操作会导致无法读取到正确的数据;其它的读取时序与标准的IIC设备一致;
uint8_t Emul_i2c_RdByte_clk_stretching(uint8_t rdata)
{
uint8_t i=8 ,rec =0;
Emul_SDA_H;
SDA_IN(); //SDA 设置为输入
for (i=0; i<8; i++)
{
Emul_SCL_L;
delay_us(4);
Emul_SCL_H;
rec<<=1;
if( FALSE == Emul_i2c_waitSCL())return FALSE; //等待 slave 释放 SCL 线,关键代码
if (READ_SDA()) rec|=0x01;
delay_us(4);
}
Emul_SCL_L;
SDA_OUT();//用完输入 再配置为输出供下次使用
if (!rdata)
Emul_i2c_Ack();//发送 ACK
else
Emul_i2c_NAck(); //发送 NACK
return rec;
}
IAQ-CORE-C数据结构
注意数据的第2byte位为模块状态位,模块初始上电都要经过约5分钟左右的预热期,预热期为0x10,经过预热后当状态字节位为0时,数据为有效数据。
模块数据的读取时序图可参考附件的IAQ-CORE-C的DATAsheet。
2.串口重定义
串口重定义主要参考原子部分,通过printf将数据打印到上位机可直观的查看数据;
3.硬件连接
注意引脚参数设置:不加上拉电阻是用 PP 模式,加了上拉电阻用 OD 模式。
七、IAQ-CORE-C参数读取图
1.初始上电预热阶段数据
2.预热后数据状态
??????????????
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!