当前位置: 首页 > news >正文

基于STM32F411的AM2320温湿度传感器

一、硬件连接配置

// 硬件连接定义(根据实际引脚调整)
#define AM2320_I2C_ADDR 0x5C << 1  // 7位地址左移1位(0xB8写/0xB9读)
#define AM2320_SDA_PIN  GPIO_PIN_9
#define AM2320_SCL_PIN  GPIO_PIN_8
#define AM2320_PORT     GPIOB// 上拉电阻配置(需外接5.1KΩ电阻)
void AM2320_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_GPIOB_CLK_ENABLE();// SDA配置为开漏输出GPIO_InitStruct.Pin = AM2320_SDA_PIN;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;GPIO_InitStruct.Pull = GPIO_PULLUP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(AM2320_PORT, &GPIO_InitStruct);// SCL配置为推挽输出GPIO_InitStruct.Pin = AM2320_SCL_PIN;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;HAL_GPIO_Init(AM2320_PORT, &GPIO_InitStruct);
}

二、I2C通信协议实现

// 基本I2C操作函数
void AM2320_I2C_Start(void) {HAL_GPIO_WritePin(AM2320_PORT, AM2320_SDA_PIN, GPIO_PIN_SET);HAL_Delay(2);HAL_GPIO_WritePin(AM2320_PORT, AM2320_SCL_PIN, GPIO_PIN_SET);HAL_Delay(4);HAL_GPIO_WritePin(AM2320_PORT, AM2320_SDA_PIN, GPIO_PIN_RESET);HAL_Delay(3);HAL_GPIO_WritePin(AM2320_PORT, AM2320_SCL_PIN, GPIO_PIN_RESET);
}void AM2320_I2C_Stop(void) {HAL_GPIO_WritePin(AM2320_PORT, AM2320_SDA_PIN, GPIO_PIN_RESET);HAL_Delay(3);HAL_GPIO_WritePin(AM2320_PORT, AM2320_SCL_PIN, GPIO_PIN_SET);HAL_Delay(4);HAL_GPIO_WritePin(AM2320_PORT, AM2320_SDA_PIN, GPIO_PIN_SET);HAL_Delay(5);
}uint8_t AM2320_I2C_WriteByte(uint8_t data) {uint8_t ack;for (int i=0; i<8; i++) {HAL_GPIO_WritePin(AM2320_PORT, AM2320_SDA_PIN, (data & 0x80) ? GPIO_PIN_SET : GPIO_PIN_RESET);HAL_Delay(4);HAL_GPIO_WritePin(AM2320_PORT, AM2320_SCL_PIN, GPIO_PIN_SET);HAL_Delay(4);HAL_GPIO_WritePin(AM2320_PORT, AM2320_SCL_PIN, GPIO_PIN_RESET);data <<= 1;}// 接收ACKHAL_GPIO_WritePin(AM2320_PORT, AM2320_SDA_PIN, GPIO_PIN_IN);HAL_Delay(4);ack = HAL_GPIO_ReadPin(AM2320_PORT, AM2320_SDA_PIN);HAL_GPIO_WritePin(AM2320_PORT, AM2320_SDA_PIN, GPIO_PIN_OUT);HAL_Delay(4);return ack;
}uint8_t AM2320_I2C_ReadByte(uint8_t ack) {uint8_t data=0;HAL_GPIO_WritePin(AM2320_PORT, AM2320_SDA_PIN, GPIO_PIN_IN);for (int i=0; i<8; i++) {HAL_GPIO_WritePin(AM2320_PORT, AM2320_SCL_PIN, GPIO_PIN_SET);HAL_Delay(4);data <<= 1;data |= HAL_GPIO_ReadPin(AM2320_PORT, AM2320_SDA_PIN);HAL_GPIO_WritePin(AM2320_PORT, AM2320_SCL_PIN, GPIO_PIN_RESET);HAL_Delay(4);}HAL_GPIO_WritePin(AM2320_PORT, AM2320_SDA_PIN, ack ? GPIO_PIN_SET : GPIO_PIN_RESET);HAL_Delay(4);return data;
}

三、传感器数据采集流程

#define AM2320_REG_HUMI_HIGH 0x00
#define AM2320_REG_TEMP_HIGH 0x02float Read_Humidity(void) {uint8_t data[4] = {0};// 唤醒传感器AM2320_I2C_Start();AM2320_I2C_WriteByte(AM2320_I2C_ADDR);  // 发送设备地址HAL_Delay(1000);  // 等待唤醒// 发送读取指令AM2320_I2C_Start();AM2320_I2C_WriteByte(AM2320_I2C_ADDR | 0x01);  // 读模式data[0] = AM2320_I2C_ReadByte(1);  // 湿度高字节data[1] = AM2320_I2C_ReadByte(1);  // 湿度低字节data[2] = AM2320_I2C_ReadByte(1);  // 温度高字节data[3] = AM2320_I2C_ReadByte(0);  // CRC校验AM2320_I2C_Stop();// CRC校验if (CRC16_Check(data, 4, data[4]) != 0) {return -999;  // 错误值}return (data[0] << 8 | data[1]) / 10.0f;
}float Read_Temperature(void) {// 类似湿度读取流程,修改寄存器地址为0x02// 省略重复代码...
}// CRC16校验算法
uint16_t CRC16_Check(uint8_t *buf, uint8_t len, uint8_t crc_buf) {uint16_t crc = 0xFFFF;for (int i=0; i<len; i++) {crc ^= (uint16_t)buf[i] << 8;for (int j=0; j<8; j++) {if (crc & 0x8000) crc = (crc << 1) ^ 0x1021;else crc <<= 1;}}return crc ^ crc_buf;
}

四、完整工程配置

  1. STM32CubeMX配置
    • 时钟配置:HSE 8MHz → PLL 168MHz
    • GPIO配置:PB8/PB9设为GPIO_Output(开漏模式)
    • 禁用HAL库默认I2C驱动
  2. 系统初始化
int main(void) {HAL_Init();SystemClock_Config();AM2320_GPIO_Init();while (1) {float hum = Read_Humidity();float temp = Read_Temperature();printf("Temp: %.1fC, Hum: %.1f%%\r\n", temp, hum);HAL_Delay(2000);}
}

参考代码 AM2320的温度湿度采集的STM32F411程序 www.3dddown.com/cna/51683.html

五、关键参数说明

参数 数值 说明
工作电压 3.3V-5V 推荐3.3V供电
测量范围 -40℃~80℃ 温度精度±0.5℃
0-99.9%RH 湿度精度±3%RH
通信方式 I2C 默认地址0x5C(7位)
数据更新周期 2秒 连续读取需间隔>2秒

六、调试技巧

  1. 逻辑分析仪捕获

    • 捕获I2C波形验证时序(起始/停止条件)
    • 检查数据帧格式是否符合规范
  2. 错误处理

    if (hum < -40 || hum > 80) {// 触发错误处理
    }
    
  3. 低功耗优化

    // 进入睡眠模式前关闭GPIO
    HAL_GPIO_DeInit(AM2320_PORT, AM2320_SDA_PIN | AM2320_SCL_PIN);
    

七、扩展功能实现

1.数据存储

#define EEPROM_ADDR 0x50
void Save_Calibration(uint16_t offset) {HAL_I2C_Mem_Write(&hi2c1, EEPROM_ADDR, 0x00, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&offset, 2, 100);
}

2.OLED显示

void Display_Data(float temp, float hum) {OLED_Clear();OLED_ShowString(0,0,"Temp:");OLED_ShowNum(0,4,temp,1,16);OLED_ShowString(0,6,"C  ");OLED_ShowString(1,0,"Hum:");OLED_ShowNum(1,4,hum,1,16);OLED_ShowString(1,6,"%");
}

该方案通过标准I2C协议实现AM2320数据采集,实际应用中需注意:

  1. 确保SCL/SDA上拉电阻(建议4.7KΩ)
  2. 首次读取前需等待传感器唤醒(>200ms)
  3. 连续读取需间隔>2秒避免数据冲突
  4. 建议添加软件滤波算法处理异常数据
http://www.jsqmd.com/news/112775/

相关文章:

  • DS-ZOOKEEPER安装集群
  • 2025年北京有名遗产继承律师排名,有实力经验丰富的遗产继承律师哪家好推荐 - mypinpai
  • 2025好评如潮的多孔塑料材料品牌盘点,附厂家联系方式 - 品牌推荐大师
  • 2025 年 12 月羊绒衫品牌权威推荐榜:女式/男士/小香风羊绒衫甄选,匠心工艺与高级质感年度口碑之选 - 品牌企业推荐师(官方)
  • 2025年船用起货绞车源头厂家权威推荐榜单:船用万米深水取样绞车/船用小绞车/船用液压绞车源头厂家精选 - 品牌推荐官
  • 南京超级学长怎么样?出国语培机构真实体验参考 - 品牌排行榜
  • 2025权威遗产继承律师事务所TOP5推荐:专业律师咨询指南,解决继承纠纷难题 - mypinpai
  • 点财网简介 - 资讯焦点
  • 办公室设计施工一体化公司推荐:行业优质选择指南 - 品牌排行榜
  • 2025年靠谱婚姻股权律师推荐,专业婚姻股权律师收费标准全解析 - mypinpai
  • 2025年正规的个人出书平台推荐,个人出书专业平台解析 - myqiye
  • 47、有同事充值了300元去公司车辆,然后不知道在哪里下载发票
  • 47、有同事充值了300元去公司车辆,然后不知道在哪里下载发票
  • 点财网 简介 - 资讯焦点
  • 2025年韩国名义雇主EOR服务商:Safeguard Global 让跨国业务更轻松! - 品牌2025
  • 2025年pcabs合金改性配方供货厂家权威推荐榜单:改性PCABS合金耐磨材料/改性PCABS合金/pcabs改性合金源头厂家精选 - 品牌推荐官
  • 2025布局北美市场:选择Safeguard Global作为加拿大名义雇主EOR合作伙伴 - 品牌2025
  • 2025国产灌装机生产厂TOP5权威推荐:灌装机哪家好? - 工业推荐榜
  • 【2025实测报告】10款常见降AI率工具大汇总(含免费降AI版本) - 殷念写论文
  • 【2025实测报告】10款常见降AI率工具大汇总(含免费降AI版本) - 殷念写论文
  • 2025年海外用工新选择:国际名义雇主EOR公司优质推荐 - 品牌2025
  • 源码解析:CRMEB商品迁移的数据处理与关联数据同步机制
  • 选对品牌!2025年高口碑环境试验设备厂商指南,高低温交变量热试验箱/光伏组件湿演式验箱/砂尘试验箱/淋雨试验箱环境试验设备源头厂家推荐 - 品牌推荐师
  • 第十二周第二天12.2
  • Centos系统如何更改root账户用户名?需要注意什么?
  • 2025直播电商智能管理系统TOP5权威推荐:领航星盘评价如何? - myqiye
  • 背景
  • MATLAB 进行长方形房间的混响仿真
  • 2025一物一码公司真实排名,适合不同规模企业 - 品牌智鉴榜
  • 2025专业影像存储品牌推荐榜索尼相机适配存储卡选购指南 - 真知灼见33