143 lines
5.2 KiB
C
143 lines
5.2 KiB
C
#include "main.h"
|
||
#include "stdio.h"
|
||
#include "string.h"
|
||
#include "sys.h"
|
||
|
||
|
||
|
||
//并行数据引脚 浮空输入 0\1\2 3\4\5\6 7\8\9\10 11\12\13 14\15
|
||
#define AD7606_DB0 GPIO_PIN_7 //PD7
|
||
#define AD7606_DB1 GPIO_PIN_6 //PD6
|
||
#define AD7606_DB2 GPIO_PIN_2 //PD2
|
||
#define AD7606_DB3 GPIO_PIN_15 //PA15
|
||
#define AD7606_DB4 GPIO_PIN_10 //PA10
|
||
#define AD7606_DB5 GPIO_PIN_9 //PA9
|
||
#define AD7606_DB6 GPIO_PIN_8 //PA8
|
||
#define AD7606_DB7 GPIO_PIN_9 //PC9
|
||
#define AD7606_DB8 GPIO_PIN_8 //PC8
|
||
#define AD7606_DB9 GPIO_PIN_7 //PC7
|
||
#define AD7606_DB10 GPIO_PIN_6 //PC6
|
||
#define AD7606_DB11 GPIO_PIN_8 //PG8
|
||
#define AD7606_DB12 GPIO_PIN_7 //PG7
|
||
#define AD7606_DB13 GPIO_PIN_6 //PG6
|
||
#define AD7606_DB14 GPIO_PIN_15 //PB15
|
||
#define AD7606_DB15 GPIO_PIN_14 //PB14
|
||
|
||
|
||
//GPIOB 引脚
|
||
#define AD7606_GPIOX_CONVST_RANGE GPIOB
|
||
|
||
//CA CB控制脚 推挽输出
|
||
#define AD7606_CONVST GPIO_PIN_8 //PB8
|
||
|
||
//RANGE 模拟输入范围选择(拉高则模拟输入范围为10V,拉低则为5V) 推挽输出
|
||
#define AD7606_RANGE GPIO_PIN_9 //PB9
|
||
|
||
|
||
//OS0 1 2 采样频率控制脚 000 无过采样,采样频率200k 最高过采样倍数 110 64倍过采样 推挽输出
|
||
#define AD7606_GPIOX_OS GPIOE
|
||
#define AD7606_OS0 GPIO_PIN_6 //PE6
|
||
#define AD7606_OS1 GPIO_PIN_5 //PE5
|
||
#define AD7606_OS2 GPIO_PIN_4 //PE4
|
||
|
||
//GPIOE 引脚
|
||
#define AD7606_GPIOX_BYTE_STBY GPIOE
|
||
|
||
//BYTE_SEL 与低电平连接则表示并行接口通信 推挽输出
|
||
#define AD7606_BYTE_SEL GPIO_PIN_3 //PE3
|
||
|
||
//STBY 待机模式控制脚(需与RANGE引脚配合) 推挽输出
|
||
#define AD7606_STBY GPIO_PIN_2 //PE2
|
||
|
||
|
||
//GPIOG 引脚
|
||
#define AD7606_GPIOX_RST_RD_CS_BUSY_FRST GPIOG
|
||
|
||
//复位引脚 推挽输出
|
||
#define AD7606_RESET GPIO_PIN_14 //PG14
|
||
|
||
//RD\CS\BUSY 推挽输出\推挽输出\浮空输入
|
||
#define AD7606_RD GPIO_PIN_13 //PG13
|
||
#define AD7606_CS GPIO_PIN_12 //PG12
|
||
#define AD7606_BUSY GPIO_PIN_11 //PG11
|
||
|
||
//FRSTDATA 浮空输入
|
||
#define AD7606_FRSTDATA GPIO_PIN_9 //PG9
|
||
|
||
|
||
|
||
|
||
//CS 高低电平
|
||
#define AD7606_CS_HIGH() HAL_GPIO_WritePin(AD7606_GPIOX_RST_RD_CS_BUSY_FRST, AD7606_CS,GPIO_PIN_SET)
|
||
#define AD7606_CS_LOW() HAL_GPIO_WritePin(AD7606_GPIOX_RST_RD_CS_BUSY_FRST, AD7606_CS,GPIO_PIN_RESET);
|
||
|
||
//RESET 高低电平
|
||
#define AD7606_RST_HIGH() HAL_GPIO_WritePin(AD7606_GPIOX_RST_RD_CS_BUSY_FRST, AD7606_RESET,GPIO_PIN_SET);
|
||
#define AD7606_RST_LOW() HAL_GPIO_WritePin(AD7606_GPIOX_RST_RD_CS_BUSY_FRST, AD7606_RESET,GPIO_PIN_RESET);
|
||
|
||
//RD 高低电平
|
||
#define AD7606_RD_HIGH() HAL_GPIO_WritePin(AD7606_GPIOX_RST_RD_CS_BUSY_FRST, AD7606_RD,GPIO_PIN_SET);
|
||
#define AD7606_RD_LOW() HAL_GPIO_WritePin(AD7606_GPIOX_RST_RD_CS_BUSY_FRST, AD7606_RD,GPIO_PIN_RESET);
|
||
|
||
//RANGE 模拟输入范围控制
|
||
#define AD7606_RANGE_10V() HAL_GPIO_WritePin(AD7606_GPIOX_CONVST_RANGE, AD7606_RANGE,GPIO_PIN_SET);
|
||
#define AD7606_RANGE_5V() HAL_GPIO_WritePin(AD7606_GPIOX_CONVST_RANGE, AD7606_RANGE,GPIO_PIN_RESET);
|
||
|
||
//BYTE_SEL 通信方式设置
|
||
#define AD7606_SRL() HAL_GPIO_WritePin(AD7606_GPIOX_BYTE_STBY, AD7606_BYTE_SEL,GPIO_PIN_SET); //串行通信
|
||
#define AD7606_PRL() HAL_GPIO_WritePin(AD7606_GPIOX_BYTE_STBY, AD7606_BYTE_SEL,GPIO_PIN_RESET); //并行通信
|
||
|
||
//STBY 工作模式选择
|
||
#define AD7606_STBY_NORMAL() HAL_GPIO_WritePin(AD7606_GPIOX_BYTE_STBY, AD7606_STBY,GPIO_PIN_SET);
|
||
#define AD7606_STBY_SLEEP() HAL_GPIO_WritePin(AD7606_GPIOX_BYTE_STBY, AD7606_STBY,GPIO_PIN_RESET);
|
||
|
||
//RANGE 工作模式选择 当STBY处于sleep模式时
|
||
#define AD7606_RANGE_SB() HAL_GPIO_WritePin(AD7606_GPIOX_CONVST_RANGE, AD7606_RANGE,GPIO_PIN_SET); //待机 上电需100us左右
|
||
#define AD7606_RANGE_SD() HAL_GPIO_WritePin(AD7606_GPIOX_CONVST_RANGE, AD7606_RANGE,GPIO_PIN_RESET);//关断 上电需13ms左右,且上电后需RESET
|
||
|
||
//CONVST
|
||
#define AD7606_CONVST_HIGH() HAL_GPIO_WritePin(AD7606_GPIOX_CONVST_RANGE, AD7606_CONVST,GPIO_PIN_SET);
|
||
#define AD7606_CONVST_LOW() HAL_GPIO_WritePin(AD7606_GPIOX_CONVST_RANGE, AD7606_CONVST,GPIO_PIN_RESET);
|
||
|
||
//OS 控制
|
||
#define AD7606_OS0_HIGH() HAL_GPIO_WritePin(AD7606_GPIOX_OS, AD7606_OS0,GPIO_PIN_SET);
|
||
#define AD7606_OS0_LOW() HAL_GPIO_WritePin(AD7606_GPIOX_OS, AD7606_OS0,GPIO_PIN_RESET);
|
||
|
||
#define AD7606_OS1_HIGH() HAL_GPIO_WritePin(AD7606_GPIOX_OS, AD7606_OS1,GPIO_PIN_SET);
|
||
#define AD7606_OS1_LOW() HAL_GPIO_WritePin(AD7606_GPIOX_OS, AD7606_OS1,GPIO_PIN_RESET);
|
||
|
||
#define AD7606_OS2_HIGH() HAL_GPIO_WritePin(AD7606_GPIOX_OS, AD7606_OS2,GPIO_PIN_SET);
|
||
#define AD7606_OS2_LOW() HAL_GPIO_WritePin(AD7606_GPIOX_OS, AD7606_OS2,GPIO_PIN_RESET);
|
||
|
||
//读取状态
|
||
#define AD7606_BUSY_STATE HAL_GPIO_ReadPin(AD7606_GPIOX_RST_RD_CS_BUSY_FRST,AD7606_BUSY)
|
||
#define AD7606_FRST_STATE HAL_GPIO_ReadPin(AD7606_GPIOX_RST_RD_CS_BUSY_FRST,AD7606_FRSTDATA)
|
||
|
||
//采样频率
|
||
#define AD7606_SEMPLE_200K 0
|
||
#define AD7606_SEMPLE_100K 2
|
||
#define AD7606_SEMPLE_50K 4
|
||
#define AD7606_SEMPLE_25K 8
|
||
#define AD7606_SEMPLE_12K5 16
|
||
#define AD7606_SEMPLE_6K25 32
|
||
#define AD7606_SEMPLE_3K125 64
|
||
|
||
extern uint8_t AD_Data_Arr[18504];
|
||
extern uint8_t AD7606_Sampling_Flag;
|
||
extern uint16_t AD_Arr_Num;
|
||
extern uint16_t AD_Tim_Num;
|
||
extern uint16_t AD7606_SFC;
|
||
extern uint16_t AD7606_SONC;
|
||
|
||
void AD7606_Init(void);
|
||
void AD7606_Config(void);
|
||
void AD7606_Semples(u8 AD7606_Semp_Select);
|
||
void AD7606_Data_Pro(uint8_t *Data);
|
||
void AD7606_Reset(void);
|
||
void AD7606_Start_Convst(void);
|
||
void AD7606_End_Convst(void);
|
||
|
||
void AD7606_Read(uint8_t *Data);
|
||
void Float_to_Byte(float data, uint8_t *arr);
|
||
void Data_to_ADbuf(void);
|