This repository has been archived on 2025-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
CMS/1.Software/STM32/USB_HS _ TEST/VM_App/VM_AD7606.h
2024-11-19 17:19:21 +08:00

143 lines
5.2 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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);