你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8s207 调试hx711称重装置,输出结果一直为0

[复制链接]
半夏微凉 提问时间:2018-4-28 21:46 /
stm8s207 调试hx711称重装置,输出结果一直为0,大家帮助看一看哪里有错误;16M晶振不分频


code hx711.c
void GPIO_Int(void)
{
   GPIO_DeInit(GPIOB);
   GPIO_DeInit(GPIOA);
   GPIO_DeInit(GPIOE);
   GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_SLOW);//led2
   GPIO_Init(GPIOB, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_SLOW);//led3
   GPIO_Init(GPIOB, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT);//k1
   GPIO_Init(GPIOA, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT);//k2
   GPIO_Init(GPIOG, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST);////HX711_SCK
   GPIO_Init(GPIOG, GPIO_PIN_1, GPIO_MODE_IN_FL_NO_IT);////DT  上拉输入


   GPIO_WriteLow(GPIOE, GPIO_PIN_3);


}

u32 HX711_Read(void)        //增益128
{
        unsigned long count;
        unsigned char i;
         

          GPIO_WriteLow(GPIOG, GPIO_PIN_0); //sck  0
          count=0;
          while(GPIO_ReadInputPin(GPIOG, GPIO_PIN_1));
          for(i=0;i<24;i++)
        {
                  GPIO_WriteHigh(GPIOG, GPIO_PIN_0);
                nop();

                  count=count<<1;

                GPIO_WriteLow(GPIOG, GPIO_PIN_0);
                  if(GPIO_ReadInputPin(GPIOG, GPIO_PIN_1))
                        count++;
                nop();



        }
        GPIO_WriteHigh(GPIOG, GPIO_PIN_0);
    count=count^0x800000;//第25个脉冲下降沿来时,转换数据
       
                nop();



        GPIO_WriteLow(GPIOG, GPIO_PIN_0);
        return(count);
}

//****************************************************
//获取毛皮重量
//****************************************************
void Get_Maopi(void)
{
        Weight_Maopi = HX711_Read();       
}




void Get_Weight(void)
{
       

{
        Weight_Shiwu = HX711_Read();
        Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                //获取净重
        if(Weight_Shiwu >= 0)                       
        {       
                Weight_Shiwu = (unsigned long)((float)Weight_Shiwu/GapValue);         //计算实物的实际重量
        }
        else
        {
                Weight_Shiwu = 0;
        }
       
}




main。c
void main(void)
{

    CLK_DeInit();     
    /*判断时钟源,自动切换到HSE*/
    if(CLK_GetSYSCLKSource()!=CLK_SOURCE_HSE)

             {
                   /*使能自动切换,一直等待到切换成功*/
                  while(CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,
                                              CLK_SOURCE_HSE,
                                              DISABLE,CLK_CURRENTCLOCKSTATE_ENABLE)

                          ==ERROR);
             }


       
       


    //User_UART3_Init();

    User_UART1_Init();
    GPIO_Int();
   Weight_Maopi = HX711_Read();
   Weight_Maopi = HX711_Read();
   Weight_Maopi = HX711_Read();
   delays();
   Weight_Maopi = HX711_Read();

  /* Infinite loop */
  while (1)
  {   
         // Get_Weight();
          nop();
          nop();
       // Weight_Shiwu = HX711_Read();
        Get_Weight();
        Weight_Shiwu = (unsigned long)((float)Weight_Shiwu/430);
        printf("净重量 = %d g\r\n",Weight_Shiwu);
        //printf("净重量 =  g\r\n");
           delays();

  }

}

收藏 评论8 发布时间:2018-4-28 21:46

举报

8个回答
半夏微凉 回答时间:2018-4-28 21:47:32
GPIO_Init(GPIOG, GPIO_PIN_1, GPIO_MODE_IN_FL_NO_IT);////DT  上拉输入  实际为浮空输入
半夏微凉 回答时间:2018-4-28 21:49:07
净重量 = 0 g
净重量 = 0 g
净重量 = 0 g
净重量 = 0 g
净重量 = 0 g
净重量 = 0 g
净重量 = 0 g
苦☕️ 回答时间:2018-4-29 00:38:34
66666666666666666666666666666666666666
wenyangzeng 回答时间:2018-4-29 07:32:35
如果外部没有上拉电阻,应改成:
GPIO_Init(GPIOG, GPIO_PIN_1, GPIO_MODE_IN_PU_NO_IT);

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

半夏微凉 回答时间:2018-4-29 11:49:15
wenyangzeng 发表于 2018-4-29 07:32
如果外部没有上拉电阻,应改成:
GPIO_Init(GPIOG, GPIO_PIN_1, GPIO_MODE_IN_PU_NO_IT);
...

试过了  结果一样   手册建议浮空输入
wenyangzeng 回答时间:2018-4-29 13:30:31
半夏微凉 发表于 2018-4-29 11:49
试过了  结果一样   手册建议浮空输入

那你应该把器件的时序图贴上
半夏微凉 回答时间:2018-4-29 15:12:32
wenyangzeng 发表于 2018-4-29 13:30
那你应该把器件的时序图贴上

解决了
半夏微凉 回答时间:2018-4-29 15:26:06
找到原因  程序没大问题,只是大打印输出时候打印输出无数据。程序是移植32的  32的打印输出程序如下:

        while(1)
        {
                Get_Weight();

                printf("¾»ÖØÁ¿ = %d g\r\n",Weight_Shiwu); //´òÓ¡
                delay_ms(1000);


        }
}
我是直接复制过来的,因为自己的也printf重定向了,所以一直忽略这个问题。后来参照51的程序慢慢发现的

   //Weight_Shiwu = 5000;
                WeightShiwu[0] = Weight_Shiwu%10000/1000 + 0x30;
                WeightShiwu[1] = Weight_Shiwu%1000/100 + 0x30;
                WeightShiwu[2] = Weight_Shiwu%100/10 + 0x30;
                WeightShiwu[3] = Weight_Shiwu%10 + 0x30;               
                WeightShiwu[4] = 'g';
               
            
               
                for(i=0;i<5;i++)
                  
                  
                {     
                     
                      UART1_SendData8(WeightShiwu[i]);
                      while(UART1_GetFlagStatus(UART1_FLAG_TXE )==RESET);
                      nop();
                       
                }  

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3 结贴奖励

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版