hx711模块

2019-07-21 04:50发布

各位大神,这是小弟写的hx711AD模块的程序,想把获取的值通过串口助手打印到电脑上,为什么老是出现8388608
程序如下:
hx711驱动程序:.c文件
void hx711_init()
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        RCC_APB2PeriphClockCmd(ADCLK,ENABLE);
       
       
        GPIO_InitStructure.GPIO_Pin = SCK; //PB2  数据发送端
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽输出,输出01脉冲
        GPIO_Init(ADIO, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PB3  数据接收端
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(ADIO, &GPIO_InitStructure);//初始化GPIOA3
               
}

unsigned long hx711_Read()
{
        unsigned long val = 0;
        int i = 0;
       
        hx711DAT_H;   //DOUT = 1说明AD还未准备好输出数据
        hx711SCK_L;   //SCK = 0 此时CLK为低电平
       
        while(GPIO_ReadInputDataBit(ADIO,DATA));   //应等待DOUT=0
        delay_us(1);//T1DOUT下降沿到PD_SCK脉冲上升沿1us
       
        for(i=0;i<24;i++)
        {
                hx711SCK_H;           //SCK=1
                val=val<<1;
                delay_us(1);   //T3 SCK正脉冲电平时间
                hx711SCK_L;           //SCK=0
                if(GPIO_ReadInputDataBit(ADIO,DATA))   //DOUT=1
                val++;
                delay_us(1); //SCK负脉冲电平时间
        }
        hx711SCK_H;           //第25个脉冲上升沿到来时,一次数据传输结束SCK=1
        val = val^0x800000;
        delay_us(1);
        hx711SCK_L;           //SCK=0
        delay_us(1);  
        return val;    //读取的数据   
}

hx711的头文件:
#ifndef HX711_H_
#define HX711_H_
#include "stm32f10x.h"
#define ADIO  GPIOB  //B口
#define DATA  GPIO_Pin_3
#define SCK   GPIO_Pin_2
#define ADCLK RCC_APB2Periph_GPIOB  //A时钟


#define hx711SCK_H GPIO_SetBits(ADIO,SCK)  //拉高
#define hx711SCK_L GPIO_ResetBits(ADIO,SCK)  //拉低

#define hx711DAT_H GPIO_SetBits(ADIO,DATA)  //拉高
#define hx711DAT_L GPIO_ResetBits(ADIO,DATA)  //拉低

void hx711_init(void);
unsigned long hx711_Read(void);

#endif

main 函数:
int main()
{
       
        unsigned long kg = 0;
        delay_ms(500);
        printf_init(9600);
       
        while(1)
        {
                kg = hx711_Read();
                printf("you ");
                printf("%ld ", kg);
                delay_ms(1000);
        }
}

串口助手的结果:
一直输出8388608
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
hualuoshuijia
1楼-- · 2019-07-21 10:15
错误之处找到了,首先是我的IO口没有接对,另外函数有部分错误
destinyy
2楼-- · 2019-07-21 15:09
楼主能说详细一点吗,我也遇到了同样的问题
destinyy
3楼-- · 2019-07-21 20:59
还有,我如果把hx711_read函数里的Delay加上之后,就压根不没有数据了
往事如风
4楼-- · 2019-07-22 02:56
 精彩回答 2  元偷偷看……
龙吟殷九洲
5楼-- · 2019-07-22 07:44
能说下程序哪有问题么
零一春风数声
6楼-- · 2019-07-22 11:11
谢谢分享!

一周热门 更多>