以下是使用STM32读取HX711称重传感器模块的详细步骤和代码示例:
核心原理
HX711是24位高精度ADC模块,通过2线串行通信(DT数据线 + SCK时钟线)输出数据。
硬件连接
| HX711引脚 | STM32连接 | 说明 |
|---|---|---|
| VCC | 3.3V/5V | 电源 |
| GND | GND | 地线 |
| DT | GPIO输入引脚 | 数据线(如PA0) |
| SCK | GPIO输出引脚 | 时钟线(如PA1) |
代码实现(基于HAL库)
1. 初始化GPIO
// 引脚定义
#define HX711_DT_GPIO_Port GPIOA
#define HX711_DT_Pin GPIO_PIN_0
#define HX711_SCK_GPIO_Port GPIOA
#define HX711_SCK_Pin GPIO_PIN_1
void HX711_Init(void) {
// SCK配置为推挽输出
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = HX711_SCK_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(HX711_SCK_GPIO_Port, &GPIO_InitStruct);
// DT配置为上拉输入
GPIO_InitStruct.Pin = HX711_DT_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(HX711_DT_GPIO_Port, &GPIO_InitStruct);
// 初始拉低SCK
HAL_GPIO_WritePin(HX711_SCK_GPIO_Port, HX711_SCK_Pin, GPIO_PIN_RESET);
}
2. 读取HX711原始数据
int32_t HX711_Read(void) {
volatile int32_t data = 0;
// 等待DT变低(数据就绪信号)
while (HAL_GPIO_ReadPin(HX711_DT_GPIO_Port, HX711_DT_Pin) == GPIO_PIN_SET);
// 读取24位数据(高位在前)
for (uint8_t i = 0; i < 24; i++) {
// 产生时钟上升沿
HAL_GPIO_WritePin(HX711_SCK_GPIO_Port, HX711_SCK_Pin, GPIO_PIN_SET);
delay_us(1); // 短暂延时(需自定义微秒延时函数)
// 左移并读取数据位
data <<= 1;
if (HAL_GPIO_ReadPin(HX711_DT_GPIO_Port, HX711_DT_Pin) == GPIO_PIN_SET) {
data++;
}
// 产生时钟下降沿
HAL_GPIO_WritePin(HX711_SCK_GPIO_Port, HX711_SCK_Pin, GPIO_PIN_RESET);
delay_us(1);
}
// 发送第25个脉冲选择增益128(下一次读取通道A)
for (uint8_t i = 0; i < 1; i++) {
HAL_GPIO_WritePin(HX711_SCK_GPIO_Port, HX711_SCK_Pin, GPIO_PIN_SET);
delay_us(1);
HAL_GPIO_WritePin(HX711_SCK_GPIO_Port, HX711_SCK_Pin, GPIO_PIN_RESET);
delay_us(1);
}
// 扩展符号位(24位补码转32位有符号)
if (data & 0x00800000) data |= 0xFF000000;
return data;
}
3. 数据滤波函数(可选)
#define SAMPLE_COUNT 5 // 采样次数
int32_t HX711_Read_Average(void) {
int64_t sum = 0;
for (uint8_t i = 0; i < SAMPLE_COUNT; i++) {
sum += HX711_Read();
HAL_Delay(5); // 间隔采样避免干扰
}
return (int32_t)(sum / SAMPLE_COUNT);
}
关键细节
-
时序要求:
- 时钟频率建议 < 100kHz(每个脉冲周期 > 10μs)。
- 使用精确延时函数(可通过SysTick或TIM定时器实现微秒延时)。
-
数据格式处理:
- 原始数据为24位补码,需扩展为32位有符号整数。
- 计算公式:
真实值 = (原始值 - 零点偏移值) / 比例系数
-
校准步骤:
int32_t zero_offset; // 零点值(空载时读数) float scale_factor; // 比例系数(= 已知重量 / (有载读数 - 零点值)) void Calibrate(void) { zero_offset = HX711_Read_Average(); // 空载读取 // 放置已知重量物体后读取 int32_t known_weight_value = HX711_Read_Average(); scale_factor = 1000.0 / (known_weight_value - zero_offset); // 假设已知重量=1000g }
常见问题解决
-
数据不稳定:
- 增加硬件滤波(DT引脚并联104电容)。
- 提高电源质量(避免开关电源干扰)。
- 增加软件采样次数。
-
通信失败:
- 检查SCK/DT是否接反。
- 确保HX711供电正常(VCC≥4.5V)。
- 用逻辑分析仪检查时序是否符合手册要求。
通过以上步骤,您可稳定读取HX711数据并实现电子秤功能。实际应用中需根据传感器量程调整校准参数。
怎样去编写STM32F103读取HX711的程序代码呢
如何利用STM32F103去读取HX711呢?怎样去编写STM32F103读取HX711的程序代码呢?
一个黄人
2021-12-13 06:11:35
MCU HX711读取模块的相关资料分享
■ HX711读取模块通过对于 磁悬浮地球仪拆解 中,悬浮物所受到的磁力随着空间和电流的变化,可以建立起被控对象的数学模型。除了在理论上可以电磁相互作用力进行测量之外,通过实验完成数据的拟合,帮助
神船大幅
2021-11-04 08:06:23
hx711是什么
hx711是一个很常见的压力传感器模块,精度很高,在平时做嵌入式开发的时候也常常遇到。但是在网上找到的代码往往都很老了,用现在常用的stm32板子都或多或少有一些问题,尤其是在一些购买该模块地方那里
h1654155216.9102
2021-08-04 06:19:21
STM32压力传感器信号采集-24位AD HX720 HX711原理是什么?
STM32压力传感器信号采集-24位AD HX720 HX711原理是什么?
K_Ming
2022-01-27 07:01:37
Hi3861如何使用HX711模块进行称重?
我想使用润和的Hi3861开发板连接HX711称重模块并进行称重,HX711称重模块已经使用过Arduino与其示例代码完成称重,我仿造Arduino的称重代码将其移植到Hi3861上,但是称重一直
jf_10767501
2023-03-20 23:30:27
带HX711的ESP-07不工作要怎么处理?
我目前正在尝试使用带有 esp-07 的 hx711 从称重传感器获取读数。我正在使用 HX711 库,但我无法从中读取任何内容。有什么帮助吗?
hfgdzc
2023-02-27 09:27:28
51单片机hx711称重及程序
51单片机hx711称重及程序,(一)项目介绍基于51单片机的HX711称重计,最大称重量为5kg,并且在LCD1602上显示数值,可设置称重物品单价,称重精度可由按键key调节。误差可达0。传感器
tiantian55
2021-07-19 09:22:49
STM32称重传感器+HX711的使用方法及注意事项
STM32称重传感器+HX711的使用——HAL库文章目录STM32称重传感器+HX711的使用——HAL库前言一、接线二、CubeMax配置三、代码编写注意点前言因为在一个项目中使用到了称重
kingnet_520888
2022-02-25 07:38:29
如何去实现一种基于51单片机的HX711称重计的设计?
HX711是什么?HX711有哪些优点?HX711的管脚有哪些?其功能是什么?如何去实现一种基于51单片机的HX711称重计的设计?
tiantian55
2021-07-19 07:32:51
HX711使用教程-数字电子秤常用芯片 相关资料下载
单片机来说,获取此刻的重量值,只需一个简单函数读取此时AD值,并通过一个线性方程的转换后即可获取此时物体的精确重量。硬件电路介绍:先介绍HX711芯片的硬件电路,如图:该方案使用内部时...
小点zze
2021-07-01 09:18:18
电子秤设计 单片机 proteus 仿真 HX711 读取 精选资料分享
。超过后显示超重。HX711就是自带放大和A/D转换的器件。51单片机 Proteus仿真 重量报警 超重报警 HX711 称重报警:https://blog.csdn.net/x1131230123/article/details/107256006MSP430 单片机 HX711重量传感器接线
请叫我保尔
2021-07-19 06:36:29
HX711应变芯片采集力学信号笔记分享
如采集通道数64路的采集压力箱,需要64个HX711,共用时钟总线,用一块单片机读取需要比单通道减慢64倍; 09.解决方案是共用定时器中断,在代码上模拟IO口输出和读取; 10.多通道实现要电路
万物死
2023-03-27 11:38:12
HX711电子称计算关系分享!
的电压是 3300 / (2^19) = 0.006294 mV, 因为0.006294 < 0.02816,所以可以满足要求;如果我们通过HX711的串口读取到的AD值经过移位后是x,则对应的重量
60user183
2019-08-30 04:37:41
称重传感器和Hx711怎么与pic MCU连接?
我正在处理负载单元,它有四根导线,我用hx711模块从它那里得到数据,但是我对它发送的数据感到困惑,hx711模块发送24位数据,我的第一个问题是,由于hx711不使用spi,而i2c只发送24位数
ncwuerw2
2020-03-30 07:34:37
迅为RK3568开发板外接模块之HX711 称重模块
1.实验原理 该部分由应变片与 HX711 模数转换器组成。应变片上的压力变化引起应变片 内的电阻值大小发生变化,进而引起线路中的电流发生改变,该电流经过 HX711 内部的片内低噪声可编程放大器
平常心0
2023-08-30 15:30:35
HX711模块的程序该怎样去实现呢
HX711模块本身特别好,24位AD,加内部放大器(可以64和128增益,放大倍数),但无奈它的串口太智障,解释的也不是很清楚。现在我程序调试成功了,使用的HAL库,
小新1999
2022-01-05 06:13:56
详解HX711称重模块的使用
详解HX711称重模块的使用先贴一段网上传的飞起的文字,但无奈它的串口太智障,解释的也不是很清楚。现在我程序调试成功了,使用的HAL库,下载链接如下:注意,这里的说明只包含关键部分——串口部分,其他的自己看datasheet或者淘宝的资料了解。...
迷你洼哇
2021-08-12 07:38:51
用于电子秤的紧凑型双HX711板
描述双 HX711 秤板用于电子秤的紧凑型双 HX711 板。允许共用或单独的 VCC 和 VDD,以及共用或单独的 SCK、外部时钟 X-tal。如果安装了 LDO (IC1),则必须将 JP11
沈文强66
2022-07-11 07:48:14
ESP32要降频才能正确读取HX711的数据,但一直试不出, 请问有大神可以指点吗?
网上说要降频, ESP32才能正确读取HX711的数据, 但一直试不出, 请问有大神可以指点吗?
新星之火12138
2023-03-06 06:09:37
单片机托盘式电子秤制作(HX711)
的实物//读取HX711//****************************************************unsigned long HX711_Read(void)//增益
小猫猫爱吃鱼
2020-03-01 19:01:18
【LuckFox Pico 开发板免费试用】2. 添加压力传感器hx711
./hx711_app -c 187 root@Rockchip:/root# ./hx711_app 小结 本章实现了hx711的数据读取,以及计算出称量物品的重量,后续可以结合算法实现相关功能。
voidpbq
2023-10-28 13:39:50