hx711读取重量一直为0

2019-07-21 04:52发布

想读取称重的重量送到串口显示,可是一直为零。这代码原本跑过,可以正常读数的,未改动过,再跑就一直显示为0了!
麻烦各位不吝赐教了

int main(void)
{       

        u8 c;
        delay_init();                     //延时函数初始化       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
        uart_init(9600);         //串口初始化为9600
        LED_Init();                           //初始化与LED连接的硬件接口
        HX711_Init();


        Get_Maopi();//获取毛皮重量         
         
        while(1)
        {
               
                Get_Weight();//获取实物重量

                printf("得到的重量%d ",Weight_Shiwu);        //输出实物重量并保留两位小数
                delay_ms(10000);

        }

}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
nashui_sx
1楼-- · 2019-07-22 08:35
龙吟殷九洲 发表于 2019-3-1 20:25
我也和你一样的问题

试试这个

[mw_shl_code=applescript,true]#ifndef __HX711_H__
#define __HX711_H__

#include "sys.h"
#include "delay.h"

extern s32 zhiliang_temp,zhiliang;
#define HX711_RCC_APB2Periph_GPIOx   RCC_APB2Periph_GPIOB
#define GPIO_HX711                   GPIOB
#define HX711_ADSK_Pin               GPIO_Pin_6          //PB6
#define HX711_ADDO_Pin               GPIO_Pin_7          //PB7

#define        HX711_ADSK                   PBout(6)
#define        HX711_ADDO                   PBout(7)
#define        HX711_ADDO_IN                PBin(7)       //读数据端口
#define HX711_Delay1ms()             delay_ms(1)   //延时nms


#define A_128 128
#define B_32  32
#define A_64  64

void HX711_IO_Init(void);
void HX711_ADDO_IO_OUT(void);
void HX711_ADDO_IO_IN(void);

s32  HX711_getdata(u8 beishu);

#endif
[/mw_shl_code]
[mw_shl_code=applescript,true]/*
//测试hx711的main

//stm32系统
#include "sys.h"
#include "delay.h"
#include "usart1.h"

#include "hx711.h"
       
int main()
{
                s32 zhiliang;       
                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
                delay_init();
               
                HX711_IO_Init();       
                USART1_Init(115200);
                USART1_printf("USART1_printf OK... ");

               
                while(1)
                {
                        zhiliang=HX711_getdata(A_128);
                        if(zhiliang!=0) //0:超时
                                USART1_printf("%ld ",zhiliang);
                        delay_ms(100); //10Hz
                }       
}
*/
#include "hx711.h"

//RATE引脚 0-10Hz  1-80Hz    默认接地了 10Hz

s32 zhiliang_temp,zhiliang;
//HX711_getdata(A_64)

void HX711_IO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
       
        RCC_APB2PeriphClockCmd(HX711_RCC_APB2Periph_GPIOx, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = HX711_ADSK_Pin | HX711_ADDO_Pin;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIO_HX711, &GPIO_InitStructure);
       

        GPIO_ResetBits(GPIO_HX711, HX711_ADSK_Pin | HX711_ADDO_Pin); //SCK RES置低
  GPIO_SetBits(GPIO_HX711, HX711_ADDO_Pin);                    //DATA拉高
}



void HX711_ADDO_IO_OUT(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;       
       
        GPIO_InitStructure.GPIO_Pin=HX711_ADDO_Pin;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(GPIO_HX711,&GPIO_InitStructure);
}

void HX711_ADDO_IO_IN(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;       
       
        GPIO_InitStructure.GPIO_Pin=HX711_ADDO_Pin;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_Init(GPIO_HX711,&GPIO_InitStructure);
}
s32 HX711_getdata(u8 beishu) //beishu: A_128  B_32  A_64
{
                s32 count=0;
                u8 i,amp,chaoshi;
                HX711_ADDO_IO_IN();
                switch(beishu)
                {
                                case A_128:amp=1;break;
                                case B_32 :amp=2;break;
                                case A_64 :amp=3;break;
                                default   :amp=1;break;
                }
                while(HX711_ADDO_IN)
                {
                   HX711_Delay1ms();
                         chaoshi++;
                         if(chaoshi>10)
                                        return  0;
                }

                for(i=0;i<24;i++)
                {
                                HX711_ADSK=1;//最小0.2us
                                HX711_ADSK=0;
                                count<<=1;
                                if(HX711_ADDO_IN)
                                count++;
                }
                for ( i = 0; i < amp; i++)
                {
                                HX711_ADSK=1;
                                HX711_ADSK=0;
                }
                if(count & 0x800000)//补码输出,需要还原
                                count=count | ((-1) << 24);

                return(count);
}
[/mw_shl_code]

一周热门 更多>