使用STM32+AD7606采集数据。采集到的数据只有00000和65535不停转变。

网上找的凌志的stm32F103外界7606的代码。接线完成后,将采集到的数据,再OLED屏上显示只会出现,00000和65535并不断循环采集不到别的数据。想问问懂得大佬是什么问题。

这是主代码。

#include <stm32f10x.h>
#include <stdio.h>
#include "Delay.h"
#include "AD7606.h"
#include "OLED.h"

extern u8 Resive_Flag;
u8 IO_TAG=1;


int main(void)
{
    uint8_t temp;
    s16 DB_data[8] = {0};
    uint16_t ad[8] = {0}; // 数组用于存储8个通道的数据

    OLED_Init();
    GPIO_AD7606_Configuration();
    AD7606_Init();
    Delay_5ms(100);

    while(1)
    {
	  GPIO_ResetBits(GPIOB, GPIO_Pin_8);  
        AD7606_startconvst();
        Delay_ns(1);
        temp = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12);
	   
        while (temp == Bit_SET)
        {
            Delay_ns(10);
            temp = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12);
        }

        AD7606_read_data(DB_data);

        for (int i = 0; i < 8; i++)
        {
            ad[i] = (uint16_t)(DB_data[i]); // 转换数据类型为uint16_t
		  
        }
        OLED_ShowNum(1,1,ad[0],5);

	  OLED_ShowNum(2,1,ad[1],5);

        Delay_5ms(100);
    }
}

这是AD7606.c

#include <stm32f10x.h>
#include "Delay.h"
#include "AD7606.h"


extern u8 IO_TAG;	
//-----------------------------------------------------------------
// 初始化程序区
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// void GPIO_AD7606_Configuration(void)
//-----------------------------------------------------------------
//
// 函数功能: AD7606引脚配置函数
// 入口参数: 无
// 返回参数: 无
// 全局变量: 无
// 调用模块: RCC_APB2PeriphClockCmd(); GPIO_Init();
// 注意事项: 用GPIO驱动方式和FSMC驱动方式下的引脚配置不一样
//			
//-----------------------------------------------------------------
void GPIO_AD7606_Configuration(void)
{ 
	GPIO_InitTypeDef GPIO_InitStructure;

	// 使能IO口时钟
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA |	RCC_APB2Periph_GPIOB , ENABLE);  
	GPIO_DeInit(GPIOA);//将GPIOx外设寄存器初始化为默认复位值
	GPIO_DeInit(GPIOB);

	//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	// AD7606 
	//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	// 控制线配置 
	//             CS_N       RD/SCLK      
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7| GPIO_Pin_8| GPIO_Pin_9;							
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;					 
	GPIO_Init(GPIOB, &GPIO_InitStructure);
		
	//                 FRSTDATA     BUSY  
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12| GPIO_Pin_15;							
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING ;						 
	GPIO_Init(GPIOA, &GPIO_InitStructure);
					 
	//        rst convstB convstA STby OS12 OS11 OS10
	//数据线配置(1)
	// DoutA
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 ;								
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;						 
	GPIO_Init(GPIOA, &GPIO_InitStructure);
}

//-----------------------------------------------------------------
// void AD7606_Init(void)
//-----------------------------------------------------------------
//
// 函数功能: AD7606初始化函数
// 入口参数: 无
// 返回参数: 无
// 全局变量: 无
// 调用模块:    
// 注意事项: 无
//-----------------------------------------------------------------
void AD7606_Init(void)
{
	convstA_Set;
	Delay_1ms(1);
	clk_Set;
	cs_Set;	
      OS10_Reset;
	OS11_Reset;
	OS12_Reset;
	AD7606_reset();  
	Delay_1ms(1);
	AD7606_startconvst();	
}

/*   * 名称:AD7606_startconvst()  * 功能:启动转换  */  
void AD7606_startconvst(void)
{  
	convstA_Reset;		
	Delay_ns (100);
	convstA_Set;
}
  
/*   * 名称:AD7606_reset()  * 功能:复位模块  */
void AD7606_reset(void) 
{ 
	rst_Reset;
	Delay_ns (10);
	rst_Set; 
	Delay_1us(1);
	rst_Reset; 
}  

/* 
* 名称:AD7606_read_data() 
* 功能:读取数据 
* 返回值:返回一个结构体指针,该指针为指向结构体数组的首地址  
*/ 
void AD7606_read_data(s16 * DB_data) 
{  
	u8 i,j; 	
	for(i=0;i<8;i++)  
	{
		u16 DB_data1 = 0;
		cs_Reset; 
	  Delay_ns(20);	
		for(j=0;j<16;j++)
		{		
		clk_Reset;
		Delay_ns(25);			
		DB_data1 = ((u16)(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10))<< (15-j)) + DB_data1 ;
	      clk_Set;
		Delay_ns(35);				
		}		
		cs_Set;	
		DB_data[i] = (u16)DB_data1;
	}	
} 

这是AD7606.h

#ifndef _AD7606_H
#define _AD7606_H


#define sampling_0times 0 
#define sampling_2times 1 
#define sampling_4times 2 
#define sampling_8times 3 
#define sampling_16times 4 
#define sampling_32times 5 
#define sampling_64times 6


#define OS10_Set 	  GPIO_SetBits(GPIOB,GPIO_Pin_7)
#define OS10_Reset   GPIO_ResetBits(GPIOB,GPIO_Pin_7)
#define OS11_Set 	  GPIO_SetBits(GPIOB,GPIO_Pin_6)
#define OS11_Reset   GPIO_ResetBits(GPIOB,GPIO_Pin_6)
#define OS12_Set 	  GPIO_SetBits(GPIOB,GPIO_Pin_9)
#define OS12_Reset   GPIO_ResetBits(GPIOB,GPIO_Pin_9)

#define convstA_Set 	  GPIO_SetBits(GPIOB,GPIO_Pin_4)
#define convstA_Reset   GPIO_ResetBits(GPIOB,GPIO_Pin_4)
#define rst_Set 	 		  GPIO_SetBits(GPIOB,GPIO_Pin_5)
#define rst_Reset  		  GPIO_ResetBits(GPIOB,GPIO_Pin_5)
#define clk_Set 	  			GPIO_SetBits(GPIOB,GPIO_Pin_3)
#define clk_Reset   			GPIO_ResetBits(GPIOB,GPIO_Pin_3)
#define cs_Set 	  			GPIO_SetBits(GPIOA,GPIO_Pin_15)
#define cs_Reset   			GPIO_ResetBits(GPIOA,GPIO_Pin_15)
#define frstdata_Set 	  GPIO_SetBits(GPIOA,GPIO_Pin_11)
#define frstdata_Reset  GPIO_ResetBits(GPIOA,GPIO_Pin_11)
#define busy_Set 	  		GPIO_SetBits(GPIOA,GPIO_Pin_12)
#define busy_Reset   		GPIO_ResetBits(GPIOA,GPIO_Pin_12)

extern void GPIO_AD7606_Configuration(void);
extern void AD7606_Init(void);
extern void AD7606_startconvst(void);
extern void AD7606_reset(void);
extern void AD7606_read_data(s16 * DB_data) ;

#endif

接线都是按照代码接的。就是DB_data数组没有数据。通道接上光敏电阻后也没有任何变化。希望大家懂的帮帮忙看看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值