用HX711做的AD采集,但是好像是没有采集到数据,在count^0x800000之后count的值为0x800000,所以采集到的count值应该为0,我猜测是这几种情况(1)管脚设置
关于管脚方面,尝试了论坛里和光盘里定义的几个,但是都没有反应,count的值仍为0
(2)read_COUNT函数的问题
但是基本是参考51程序的翻译还有论坛里的程序,感觉应该没问题(不过很大可能是比较笨没侃出来。。。。。)
(3)HX711连接应该没有问题,我拿51试验过,换到32就没起作用了
暂时提供的信息应该只有这么多,因为论坛里关于F4的HX711信息实在很少,F1的信息与F4又有可能不同,所以只好向大家求助啦!
谢谢大家!
下面是代码
main.c
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "AD24.h"
int main(void)
{
extern unsigned long Count;
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
ADC24_Init();
LED_Init(); //初始化LED
LCD_Init(); //初始化LCD接口
while(1)
{
ADC_ReadCount();
LCD_ShowxNum(134,130,Count,10,16,0); //显示ADCC采样后的原始值
delay_ms(250);
}
}
AD24.h
#ifndef __AD24_H
#define __AD24_H
#include "sys.h"
#include "delay.h"
void ADC24_Init(void);
unsigned long ADC_ReadCount(void);
#endif
AD24.c
#include"AD24.h"
void ADC24_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitStruct.GPIO_Pin= GPIO_Pin_11; //ADDO
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IN;
GPIO_InitStruct.GPIO_OType= GPIO_OType_OD;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin= GPIO_Pin_12; //SCK
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType= GPIO_OType_PP;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
//GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
unsigned long Count;
unsigned long ADC_ReadCount(void)
{
unsigned char i=0;
Count=0;
GPIO_ResetBits(GPIOA,GPIO_Pin_12);//ADSK=0;
GPIO_SetBits(GPIOA,GPIO_Pin_11); //ADDO=1;
delay_us(20);
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==1)// while(ADDO);
delay_us(1);
for (i=0;i<24;i++)
{
GPIO_SetBits(GPIOA,GPIO_Pin_12);//ADSK=1;
delay_us(1);
Count=Count<<1;
delay_us(1);
GPIO_ResetBits(GPIOA,GPIO_Pin_12);//ADSK=0;
delay_us(1);
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)) Count++;
delay_us(1);
}
GPIO_SetBits(GPIOA,GPIO_Pin_12);//ADSK=1;
delay_us(1);
Count=Count^0x800000;//抑或
GPIO_ResetBits(GPIOA,GPIO_Pin_12);//ADSK=0;
delay_us(1);
return Count;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
嗯,因为刚开始学,代码不太会写,只是复制,有一段复制错了,才出的麻烦。。。
一周热门 更多>