各位大神,这是小弟写的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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>