OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5937|回复: 2

HX711芯片,用来制作台秤,编程之后发现DATA引脚一直保持,请大神解惑!谢谢

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-10-13
在线时间
2 小时
发表于 2014-10-13 20:33:13 | 显示全部楼层 |阅读模式
5金钱

#include "HX711.h" //读711 AD数据子程序
#include "LED.h"
//sbit ADDO=PA^0;
//sbit ADSK=PA^1;
#define ADSK_H   GPIO_SetBits(GPIOA,GPIO_Pin_1)
#define ADSK_L   GPIO_ResetBits(GPIOA,GPIO_Pin_1)
#define ADDO_H   GPIO_SetBits(GPIOA,GPIO_Pin_2)
#define ADDO_L   GPIO_ResetBits(GPIOA,GPIO_Pin_2)

void static Delay(u32 del)
{
   while(del--);
}

void GPIO_Configuration_HX711(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
  
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能PA端口时钟
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;     //ADSK-->A.1 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //IO口速度为50MHz
 GPIO_Init(GPIOA, &GPIO_InitStructure);      //根据设定参数初始化GPIOA.0

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;        //ADDO-->A.2 端口配置, 推挽输出
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    //上拉输入,IO口速度为50MHz
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //IO口速度为50MHz
 GPIO_Init(GPIOA, &GPIO_InitStructure);        //根据设定参数初始化GPIOA.1
}
 
u32 ReadCount(void)
{
   u32 Count;
   u16 ADval;
   u8 i;
   ADDO_H;
   Delay(5);
   ADSK_L;
   Count=0; 
   while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==1);  
   for(i=0;i<24;i++)//读取24个bit
   {
      ADSK_H;
   Delay(5);
   Count=Count<<1;
   ADSK_L;
   Delay(5);
   if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==1)Count++;
   }
   ADSK_H; //发送第25个脉冲,表示下载转换使用A通道128bd
   Delay(5);
   ADSK_L;
   Delay(5);
   ADval = (int)(Count>>8); //取高十六位有效值
  
   return(ADval);
}

u32 Weighing(void)
{
   u32 X1;
   u8 t,t1,count=0;
   u16 databuffer[30];  //采样缓存区
   u16 temp=0;
   u32 X;
   do{      //循环读取30次
       X=ReadCount();
    if(X>100)   //如果是在测量有效区范围的值,标记此读数有效
    {
       databuffer[count]=X;
    count++;
    }
   }while(count<30);
   if(count==30)  //每次读数一定要读到30次数据,否则丢弃
   {
    do
    {
    t1=0;
    for(t=0;t<count-1;t++)
    {
        if(databuffer[t]>databuffer[t+1])//升序排列
      {
          temp=databuffer[t+1];
       databuffer[t+1]=databuffer[t];
       databuffer[t]=temp;
       t1=1;
      }
    }     
    }while(t1);    
   }
   X1=0;
   //从排序过的数组里抽取连续的10组数据,进行取平均值,获得较高的精度
   for(count=10;count<20;count++)
   {
      X1=X1+databuffer[count];
   }
   X1=X1/10;
   
   return X1;
}


 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-13 23:00:04 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2017-4-14
在线时间
5 小时
发表于 2017-5-5 16:46:23 | 显示全部楼层
我也遇到了这个问题。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-21 14:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表