qq_43301654
雨夜人
采纳率0%
2021-03-04 17:35

STM32 HX711 代码不报错,但是芯片无法运行?

HX711.H

 

#ifndef _HX711_H_
#define _HX711_H_
#include "sys.h"

#define ADC1_DR_Address    ((uint32_t)0x4001244C) //ADC1这个外设的地址(查参考手册得出)

#define ADCPORT        GPIOA    //定义ADC接口
#define ADC_CH0        GPIO_Pin_0    //定义ADC接口 电压电位器
#define ADC_CH1        GPIO_Pin_1    //定义ADC接口 电压电位器

void Init_Hx711(void);                       //初始化
uint32_t Hx_Read(void);                         //读取值


#endif

 

 

 

 

HX711.C

 

#include "delay.h"
#include "hx711.h"

void Init_Hx711()
{
    GPIO_InitTypeDef GPIO_InitStructure;       //定义DMA初始化结构体
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE); //接口全开
    
    //DT  <----->  PA0
    //SCK <----->  PA1
//    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //选择IO接口工作方式  
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //DT设置为浮空输入
    GPIO_InitStructure.GPIO_Pin = ADC_CH0; //选择端口 
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置输出
    GPIO_InitStructure.GPIO_Pin = ADC_CH1; //选择端口 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

}


/**
* @brief HX711读数据
* @param None
* @return HX711一次读取到的数据
* @details val为24位数据,程序循环读取24次DT引脚电平数据,通过移位操
*          作写入val,注意!返回的并不是实际重量,只是一个采样电平值
*/
uint32_t Hx_Read(void)    //增益128
{
    uint32_t val = 0;
    uint8_t i = 0;

    GPIO_SetBits(GPIOA, GPIO_Pin_0); //初始状态DT引脚为高电平
    GPIO_ResetBits(GPIOA, GPIO_Pin_1); //初始状态SCK引脚为低电平
    //判断模块是否准备好
    while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0));
    delay_us(1);
    //sck 拉低
    //GPIO_ResetBits(GPIOB,GPIO_Pin_6);
    //再次判断是否准备好
    while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0));

    for(i=0; i<24; i++)
    {
        delay_us(100);
        GPIO_SetBits(GPIOA,GPIO_Pin_1);
        val=val<<1;
        delay_us(1);
        GPIO_ResetBits(GPIOA,GPIO_Pin_1);
        if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0))
            val++;
        delay_us(1);
    }
    GPIO_SetBits(GPIOA,GPIO_Pin_1);
    val = val^0x800000;
    delay_us(1);
    GPIO_ResetBits(GPIOA,GPIO_Pin_1);
    delay_us(1);
    return val;
}

 

 

 

 

 

 


#include "hx711.h"
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "touch_key.h"
#include "relay.h"
#include "oled0561.h"
#include "adc.h"


uint32_t b;

int main(void)
{
    delay_ms(500); //上电时等待其他器件就绪
    RCC_Configuration(); //系统时钟初始化 
    //TOUCH_KEY_Init();//触摸按键初始化
    RELAY_Init();//继电器初始化
    ADC_Configuration(); //ADC初始化设置
    I2C_Configuration();//I2C初始化
    OLED0561_Init(); //OLED初始化
    Init_Hx711();        //HX711初始化
     while(1){    
     b= Hx_Read();
        //将光敏电阻的ADC数据显示在OLED上
        OLED_DISPLAY_8x16(6,10*8,b/1000+0x30);//
        OLED_DISPLAY_8x16(6,11*8,b%1000/100+0x30);//
        OLED_DISPLAY_8x16(6,12*8,b%100/10+0x30);//
        OLED_DISPLAY_8x16(6,13*8,b%10+0x30);//
        delay_ms(500); //延时
    }
}



 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

为你推荐