#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[16448]; 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);