查看: 35712|回复: 60
STM32写的HX711程序
当前离线积分
初级会员, 积分 73, 距离下一级还需 127 积分
积分金钱73
注册时间2014-8-20
在线时间0 小时
电梯直达
发表于 2014-9-6 19:55:40
|
只看该作者
|只看大图
|倒序浏览
|阅读模式
5金钱
我用32写的一个读HX711的程序用来做一个称重传感器,为什么会出现重量越大数值越小
while(1)
{
PAin(1)=1;
delay_us(5);
PAout(2)=0;
temp=0;
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==1);
//while(1)
//{
PAout(2)=0;
for(i=0;i<24;i++)
{
PAout(2)=1;
//GPIO_SetBits(GPIOA,GPIO_Pin_2);
temp=temp<<1;
delay_us(10);
PAout(2)=0;
//GPIO_ResetBits(GPIOA,GPIO_Pin_2);
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==1)
{
temp++;
}
}
GPIO_SetBits(GPIOA,GPIO_Pin_2);
delay_us(10);
//temp=temp^0x800000;
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
//temp=(temp+22020)*0.0676-67880;
//temp=(temp*0.000000298)*240;
temp=(temp*0.00298)/42;
Weight=temp-1;
printf("%f\n",Weight);
LCD_ShowNum(30,30,Weight,16,16);
delay_ms(1000);
最佳答案
回复【7楼】欣晨:---------------------------------unsigned long Read_HX711(void) //读HX711芯片输出的数据。{unsigned long val = 0;unsigned char i = 0;GPIO_SetBits(GPIOB,GPIO_Pin_13); //DOUT=1GPIO_ResetBits(GPIOB,GPIO_Pin_12); //SCK=0while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)); & ...
当前离线
中级会员, 积分 335, 距离下一级还需 165 积分
积分金钱335
注册时间2013-6-1
在线时间0 小时
发表于 2014-9-6 19:55:41
|
只看该作者
回复【7楼】欣晨:
---------------------------------
unsigned long Read_HX711(void) //读HX711芯片输出的数据。
{
unsigned long val = 0;
unsigned char i = 0;
GPIO_SetBits(GPIOB,GPIO_Pin_13); //DOUT=1
GPIO_ResetBits(GPIOB,GPIO_Pin_12); //SCK=0
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)); //等待DOUT=0
delay_us(1);
for(i=0;i<24;i++)
{
GPIO_SetBits(GPIOB,GPIO_Pin_12); //SCK=1
val=val<<1;
delay_us(1);
GPIO_ResetBits(GPIOB,GPIO_Pin_12); //SCK=0
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)) //DOUT=1
val++;
delay_us(1);
}
GPIO_SetBits(GPIOB,GPIO_Pin_12);
val = val^0x800000;
delay_us(1);
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
delay_us(1);
return val;
}
亲测无误,不用谢
当前离线
中级会员, 积分 335, 距离下一级还需 165 积分
积分金钱335
注册时间2013-6-1
在线时间0 小时
发表于 2014-9-6 19:55:41
|
只看该作者
回复【17楼】xingzhe:
---------------------------------
那就是传感器受力方向反了。。。
积分金钱157747
注册时间2010-12-1
在线时间1919 小时
发表于 2014-9-6 22:23:43
|
只看该作者
帮顶....
新手上路, 积分 33, 距离下一级还需 17 积分
积分金钱33
注册时间2014-9-7
在线时间0 小时
发表于 2014-9-7 11:47:21
|
只看该作者
可能是传感器放的方向不对,你用的是应变片式的称重传感器吗?
金牌会员, 积分 2222, 距离下一级还需 778 积分
积分金钱2222
注册时间2011-12-15
在线时间37 小时
发表于 2014-9-7 12:37:19
|
只看该作者
说明你操作错误了,HX711还是蛮简单的。
专业制作STM32 物联网通信模块板,模块交流群:369840039。
当前离线积分
初级会员, 积分 73, 距离下一级还需 127 积分
积分金钱73
注册时间2014-8-20
在线时间0 小时
楼主|
发表于 2014-9-8 15:03:14
|
只看该作者
回复【3楼】大叔的萌妹纸:
---------------------------------
我用的是S型的
新手上路, 积分 34, 距离下一级还需 16 积分
积分金钱34
注册时间2014-9-8
在线时间5 小时
发表于 2014-9-8 18:20:19
|
只看该作者
你怎么定义的端口啊
当前离线积分
新手上路, 积分 39, 距离下一级还需 11 积分
积分金钱39
注册时间2014-3-15
在线时间0 小时
发表于 2014-10-18 10:46:06
|
只看该作者
楼主是怎么解决的我也出现了同样的问题 求指导
当前离线
高级会员, 积分 568, 距离下一级还需 432 积分
积分金钱568
注册时间2014-5-12
在线时间149 小时
发表于 2014-10-21 14:34:32
|
只看该作者
回复【8楼】Scy:
---------------------------------
跪求完整程序 包括端口设置的 我的估计是端口设置问题
当前离线
中级会员, 积分 335, 距离下一级还需 165 积分
积分金钱335
注册时间2013-6-1
在线时间0 小时
发表于 2014-10-21 21:11:44
|
只看该作者
回复【9楼】新生:
---------------------------------
void HX711_Init(void)//初始化HX711端口
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //SCK
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //DOUT
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
}
新手上路, 积分 47, 距离下一级还需 3 积分
积分金钱47
注册时间2012-9-19
在线时间0 小时
发表于 2014-10-22 13:42:51
|
只看该作者
回复【10楼】Scy:
---------------------------------
请教一下去皮清零功能如何写?最近有个项目做个电子秤测试压力的。对这个不是很熟悉?能交流一下吗?
当前离线
高级会员, 积分 568, 距离下一级还需 432 积分
积分金钱568
注册时间2014-5-12
在线时间149 小时
发表于 2014-10-22 17:32:19
|
只看该作者
#ifndef __HX711_H__
#define __HX711_H__
void ADInit(void); //??????AD?????????ü??????I/O??????
unsigned long HX711_Read(void); //??AD???????????????
#endif
#include "stm32f10x.h"
#include "hx711.h"
#include "delay.h"
#define ADIO GPIOC //?¨??AD??????????I/O????×é??
#define DATA GPIO_Pin_11 //?¨??AD????????????????????????
#define CLK GPIO_Pin_10 //?¨??AD???????±????????????????
#define ADCLK RCC_APB2Periph_GPIOC //?¨??AD?????ù??????I/O???????±???
void ADInit(void) //??????AD??????????I/O??????
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(ADCLK,ENABLE);
GPIO_InitStructure.GPIO_Pin = CLK;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //CLK?????¨??????????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ADIO,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = DATA;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//DATA?????¨??????????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ADIO,&GPIO_InitStructure);
}
unsigned long HX711_Read(void) //??AD????????????????
{
unsigned long val = 0;
unsigned char i = 0;
GPIO_SetBits(ADIO,DATA);
GPIO_ResetBits(ADIO,CLK);
while(GPIO_ReadInputDataBit(ADIO,DATA));
delay_us(1);
for(i=0;i<24;i++)
{
GPIO_SetBits(ADIO,CLK);
val=val<<1;
delay_us(1);
GPIO_ResetBits(ADIO,CLK);
if(GPIO_ReadInputDataBit(ADIO,DATA))
val++;
delay_us(1);
}
GPIO_SetBits(ADIO,CLK);
val = val^0x800000;
delay_us(1);
GPIO_ResetBits(ADIO,CLK);
delay_us(1);
return val;
}
当前离线
高级会员, 积分 568, 距离下一级还需 432 积分
积分金钱568
注册时间2014-5-12
在线时间149 小时
发表于 2014-10-22 17:33:07
|
只看该作者
调试通过 .H .C文件都上传了 供有需要的人下载吧
新手入门, 积分 23, 距离下一级还需 -3 积分
积分金钱23
注册时间2013-5-8
在线时间0 小时
发表于 2014-12-3 16:08:55
|
只看该作者
跟楼主出现了一样状况,程序也是调试通过的程序,信号线也对掉过 还是不行! 求指导
当前离线
中级会员, 积分 335, 距离下一级还需 165 积分
积分金钱335
注册时间2013-6-1
在线时间0 小时
发表于 2014-12-3 16:53:22
|
只看该作者
回复【14楼】xingzhe:
---------------------------------
输出信号是带符号的,负数时这个数据的bit23是符号位
你确定你的程序里写了val = val^0x800000; ?
当前离线
中级会员, 积分 335, 距离下一级还需 165 积分
积分金钱335
注册时间2013-6-1
在线时间0 小时
发表于 2014-12-3 16:53:54
|
只看该作者
回复【11楼】nishuizhou:
---------------------------------
抱歉没看到,我没有继续做下去,所以没办法帮你
新手入门, 积分 23, 距离下一级还需 -3 积分
积分金钱23
注册时间2013-5-8
在线时间0 小时
发表于 2014-12-3 17:18:47
|
只看该作者
回复【15楼】Scy:
---------------------------------
I’m SURE!! 程序如下: 基本和你的一样 !
unsigned long ReadAD(void) //??AD????????????????
{
unsigned long val = 0;
unsigned char i = 0;
GPIO_SetBits(ADIO,DATA);
GPIO_ResetBits(ADIO,CLK);
while(GPIO_ReadInputDataBit(ADIO,DATA));
delay_us(1);
for(i=0;i<24;i++)
{
GPIO_SetBits(ADIO,CLK);
val=val<<1;
delay_us(1);
GPIO_ResetBits(ADIO,CLK);
if(GPIO_ReadInputDataBit(ADIO,DATA))
val++;
delay_us(1);
}
GPIO_SetBits(ADIO,CLK);
val = val^0x800000;
delay_us(1);
GPIO_ResetBits(ADIO,CLK);
delay_us(1);
return val;
}
新手入门, 积分 23, 距离下一级还需 -3 积分
积分金钱23
注册时间2013-5-8
在线时间0 小时
发表于 2015-1-5 11:16:18
|
只看该作者
回复【18楼】Scy:
---------------------------------
已解决,确实是信号线 S+ 与S— 接反了,3Q very much!!
中级会员, 积分 404, 距离下一级还需 96 积分
积分金钱404
注册时间2013-1-11
在线时间107 小时
发表于 2015-5-12 14:55:04
|
只看该作者
回复【8楼】Scy:
---------------------------------
谢谢,好使
为啥还要考试啊。。。。。。。
初级会员, 积分 58, 距离下一级还需 142 积分
积分金钱58
注册时间2015-1-26
在线时间6 小时
发表于 2015-5-27 21:11:19
|
只看该作者
你好,请问你们用711做的电子称转换速度为多大,能达到毫秒级别么
初级会员, 积分 66, 距离下一级还需 134 积分
积分金钱66
注册时间2012-9-12
在线时间8 小时
发表于 2015-5-29 16:51:50
|
只看该作者
回复【8楼】Scy:
---------------------------------
你好!请问你有做温度补偿的吗?
当前离线
中级会员, 积分 335, 距离下一级还需 165 积分
积分金钱335
注册时间2013-6-1
在线时间0 小时
发表于 2015-6-4 20:48:47
|
只看该作者
回复【22楼】刀锋1937:
---------------------------------
没有
当前离线积分
新手上路, 积分 36, 距离下一级还需 14 积分
积分金钱36
注册时间2015-6-24
在线时间0 小时
发表于 2015-6-25 10:46:36
|
只看该作者
回复【8楼】Scy:
---------------------------------
还要有其他的配置程序吧
初级会员, 积分 54, 距离下一级还需 146 积分
积分金钱54
注册时间2015-5-21
在线时间11 小时
发表于 2015-7-8 14:58:44
|
只看该作者
/*******************************************************
±?????????????×÷?????????÷ר??AD???? HX711 ?????ò??
********************************************************/
#include
#include "ad_hx711.h"
#include "delay.h"
#include "usart.h"
#define ADIO GPIOA //?¨??AD??????????I/O????×é??
#define DATA GPIO_Pin_0 //?¨??AD????????????????????????
#define CLK GPIO_Pin_1 //?¨??AD???????±????????????????
#define ADCLK RCC_AHB1Periph_GPIOA //?¨??AD?????ù??????I/O???????±????
void ADInit(void) //??????AD??????????I/O??????
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(ADCLK,ENABLE);
GPIO_InitStructure.GPIO_Pin = CLK;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//CLK?????¨?????????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ADIO,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = DATA;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//DATA?????¨?????????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ADIO,&GPIO_InitStructure);
}
unsigned long ReadAD(void) //??AD????????????????
{
unsigned long val = 0;
unsigned char i = 0;
GPIO_SetBits(ADIO,DATA);
GPIO_ResetBits(ADIO,CLK);
while(GPIO_ReadInputDataBit(ADIO,DATA));
delay_us(5);
for(i=0;i<24;i++)
{
GPIO_SetBits(ADIO,CLK);
val=val<<1;
delay_us(5);
GPIO_ResetBits(ADIO,CLK);
if(GPIO_ReadInputDataBit(ADIO,DATA))
val++;
delay_us(5);
}
GPIO_SetBits(ADIO,CLK);
val = val^0x800000;
delay_us(5);
GPIO_ResetBits(ADIO,CLK);
delay_us(5);
return val;
}
long double filter(void) //?????ù?????¨·¨????????
{
unsigned long max=0,min=0,SUM,BUF[12],Average;
int i=0;
for(i=0;i<12;i++)
{
BUF=ReadAD();
printf("%ld\r\n",BUF);
if(i==0)
{
max=BUF[0];
min=BUF[0];
}
if(i>0)
{
if(BUF>max) max=BUF;
if(BUF
}
}
for(i=0;i<12;i++)
{
if(!(BUF==max||BUF==min))
{
SUM=SUM+BUF;
}
}
Average=SUM/(12-2);
return Average;
}>
初级会员, 积分 54, 距离下一级还需 146 积分
积分金钱54
注册时间2015-5-21
在线时间11 小时
发表于 2015-7-8 14:59:58
|
只看该作者
回复【25楼】zhangfeng:
---------------------------------
大神们能不能帮我看一看,有什么问题,为什么读出来的数一只是8388608
新手入门, 积分 21, 距离下一级还需 -1 积分
积分金钱21
注册时间2015-7-12
在线时间0 小时
发表于 2015-7-12 22:52:05
|
只看该作者
回复【13楼】新生:
---------------------------------
请问.h和.c是上传到哪里了啊?
新手入门, 积分 22, 距离下一级还需 -2 积分
积分金钱22
注册时间2015-9-14
在线时间0 小时
发表于 2015-9-15 18:54:45
|
只看该作者
回复【19楼】xingzhe:
---------------------------------
请问你下, 你的压力传感器 用的是什么啊 , 量程是多少的,可以发下链接吗
新手入门, 积分 22, 距离下一级还需 -2 积分
积分金钱22
注册时间2015-9-14
在线时间0 小时
发表于 2015-9-15 18:55:38
|
只看该作者
请问你下, 你的压力传感器 用的是什么啊 , 量程是多少的,可以发下链接吗
中级会员, 积分 418, 距离下一级还需 82 积分
积分金钱418
注册时间2015-5-5
在线时间23 小时
发表于 2015-12-25 13:48:15
|
只看该作者
回复【8楼】Scy:
---------------------------------
帅哥。把称重模块的完整程序发一份给我吧
弹起华丽的乐章 撕下最后的伪装
中级会员, 积分 418, 距离下一级还需 82 积分
积分金钱418
注册时间2015-5-5
在线时间23 小时
发表于 2015-12-25 14:43:31
|
只看该作者
回复【8楼】Scy:
---------------------------------
主程序是如何写。
弹起华丽的乐章 撕下最后的伪装
新手入门, 积分 7, 距离下一级还需 13 积分
积分金钱7
注册时间2016-5-8
在线时间0 小时
发表于 2016-5-8 20:44:49
|
只看该作者
楼主你好,能发一份正确的程序给我参考下吗?m18710317500@163.com 谢谢
积分金钱3635
注册时间2015-4-18
在线时间370 小时
发表于 2016-7-4 09:29:31
|
只看该作者
确实是可以的。。。。
新手上路, 积分 42, 距离下一级还需 8 积分
积分金钱42
注册时间2016-7-9
在线时间9 小时
发表于 2016-7-9 16:29:14
|
只看该作者
积分
新手入门, 积分 9, 距离下一级还需 11 积分
积分金钱9
注册时间2016-7-9
在线时间0 小时
发表于 2016-7-9 21:04:08
|
只看该作者
亲,可以给个注释么,新手,谢谢哈
初级会员, 积分 132, 距离下一级还需 68 积分
积分金钱132
注册时间2016-6-1
在线时间33 小时
发表于 2016-7-25 10:07:48
|
只看该作者
初级会员, 积分 130, 距离下一级还需 70 积分
积分金钱130
注册时间2016-3-27
在线时间83 小时
发表于 2016-8-29 21:02:29
|
只看该作者
没有完整的程序吗,驱动部分看明白了,主程序怎么写呢
当前离线积分
初级会员, 积分 66, 距离下一级还需 134 积分
积分金钱66
注册时间2016-3-10
在线时间14 小时
发表于 2016-10-31 22:50:34
|
只看该作者
有没有 完整版的 发一份 新手有点费劲
金牌会员, 积分 1099, 距离下一级还需 1901 积分
积分金钱1099
注册时间2016-7-19
在线时间168 小时
发表于 2016-11-21 10:25:38
|
只看该作者
你好!
val = val^0x800000;
这句话的作用没看明白,val是补码数据,与0x800000进行异或,如果是负数则可以将补码转化为源码,但如果是正数就不行了呀。请问这句话的作用是什么诶
金牌会员, 积分 1099, 距离下一级还需 1901 积分
积分金钱1099
注册时间2016-7-19
在线时间168 小时
发表于 2016-11-21 13:17:18
|
只看该作者
楼主你好,请问你的Hx711是买的模块吗?我现在买了一个模块是要求5V左右提供电工作电压,但看芯片手册有个要求:数字电源(DVDD)应使用与 MCU 芯片相同的的数字供电电源。那如果用STM32可以吗
xinruhzishui 该用户已被删除
发表于 2017-3-12 10:03:04
|
只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
初级会员, 积分 193, 距离下一级还需 7 积分
积分金钱193
注册时间2017-2-14
在线时间21 小时
发表于 2017-4-11 10:24:21
|
只看该作者
求助,为什么我的程序读出来的值一直是-1。不知道你有没有遇到过这种情况
技术不行的技术宅
初级会员, 积分 193, 距离下一级还需 7 积分
积分金钱193
注册时间2017-2-14
在线时间21 小时
发表于 2017-4-14 16:49:44
|
只看该作者
技术不行的技术宅
当前离线积分
新手上路, 积分 38, 距离下一级还需 12 积分
积分金钱38
注册时间2017-4-14
在线时间5 小时
发表于 2017-5-4 14:42:58
|
只看该作者
我也在弄hx711,但跑程序的时候,if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==1)这个判断总是否定,temp一直是0,为什么啊?
当前离线积分
新手上路, 积分 38, 距离下一级还需 12 积分
积分金钱38
注册时间2017-4-14
在线时间5 小时
发表于 2017-5-4 15:14:45
|
只看该作者
DATA一直为0,总跳不到temp++;这一句,最后出来val=0异或0x8000000 出来8388608
当前离线积分
新手上路, 积分 38, 距离下一级还需 12 积分
积分金钱38
注册时间2017-4-14
在线时间5 小时
发表于 2017-5-4 15:15:10
|
只看该作者
有人能解释一下吗
当前离线
高级会员, 积分 523, 距离下一级还需 477 积分
积分金钱523
注册时间2016-1-11
在线时间132 小时
发表于 2017-5-4 17:11:17
|
只看该作者
当前离线积分
新手上路, 积分 32, 距离下一级还需 18 积分
积分金钱32
注册时间2013-11-3
在线时间3 小时
发表于 2017-5-5 09:38:04
|
只看该作者
楼主能发一份源码作参考吗?万分感谢
当前离线积分
新手上路, 积分 32, 距离下一级还需 18 积分
积分金钱32
注册时间2013-11-3
在线时间3 小时
发表于 2017-5-5 09:44:05
|
只看该作者
楼主能发一份源码作参考吗?万分感谢 1569190243@qq.com
当前离线积分
新手上路, 积分 38, 距离下一级还需 12 积分
积分金钱38
注册时间2017-4-14
在线时间5 小时
发表于 2017-5-5 11:16:37
|
只看该作者