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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版