本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设,读取SHT30温湿度传感器的数据并通过串口发送。
1. 准备工作
硬件准备
- 开发板
首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi):

- SHT30温湿度传感器
SHT30温湿度传感器是一个完全校准的、现行的、带有温度补偿的数字输出型传感器,具有 2.4V-5.5V 的宽电压支持,使用IIC接口进行通信,最高速率可达1M并且有两个用户可选地址,除此之外,它还具有8个引脚的DFN超小封装,如图:

SHT30的原理图如下:

软件准备
- 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码;
Keil MDK和串口助手的安装包都可以关注“小熊派开源社区”微信公众号,在资料教程一栏中可获取安装包。
2.生成MDK工程
选择芯片型号
打开STM32CubeMX,打开MCU选择器:

搜索并选中芯片STM32L431RCT6:

配置时钟源
- 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC;
- 如果使用默认内部时钟(HSI),这一步可以略过;
这里我都使用外部时钟:

配置串口
小熊派开发板板载ST-Link并且虚拟了一个串口,原理图如下:

这里我将开关拨到AT-MCU模式,使PC的串口与USART1之间连接。
接下来开始配置USART1:

配置I2C接口
查看小熊派E53接口的原理图:

接下来开始配置I2C接口1:

配置时钟树
STM32L4的最高主频到80M,所以配置PLL,最后使HCLK = 80Mhz即可:

生成工程设置

代码生成设置
最后设置生成独立的初始化文件:

生成代码
点击GENERATE CODE即可生成MDK-V5工程:

3. 在MDK中编写、编译、下载用户代码
重定向printf( )函数
修改I2C初始化代码的小BUG

4. 编写SHT30驱动程序
参考SHT30数据手册.pdf进行编程。
宏定义SHT30器件地址
先来编写sht30_i2c_drv.h头文件,SHT30的器件地址由ADDR端口的高低电平决定:

注意数据手册中给出了8位数据,只有低7位用作地址,结合原理图,可以定义如下:
/* ADDR Pin Conect to VSS */
#define SHT30_ADDR_WRITE 0x44<<1 //10001000
#define SHT30_ADDR_READ (0x44<<1)+1 //10001011
枚举SHT30命令列表
参考数据手册,在sht30_i2c_drv.h头文件中给出如下枚举定义:
typedef enum
{
/* 软件复位命令 */
SOFT_RESET_CMD = 0x30A2,
/*
单次测量模式
命名格式:Repeatability_CS_CMD
CS: Clock stretching
*/
HIGH_ENABLED_CMD = 0x2C06,
MEDIUM_ENABLED_CMD = 0x2C0D,
LOW_ENABLED_CMD = 0x2C10,
HIGH_DISABLED_CMD = 0x2400,
MEDIUM_DI
本文详细介绍了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C,连接SHT30温湿度传感器并读取数据。内容包括硬件准备、MDK工程生成、用户代码编写、SHT30驱动程序设计以及测试验证,最终通过串口输出温湿度数据。
最低0.47元/天 解锁文章
1845

被折叠的 条评论
为什么被折叠?



