#ifndef SN_ADC_H #define SN_ADC_H #include "ciu32f003_std.h" //再封装接口 uint8_t SN_ADC_IN_init(uint32_t channel); //初始ADC通道 void SN_ADC_start(void); //开始进行ADC转换 uint16_t SN_ADC_Get(uint32_t channel); //获得对应通道的ADC转换值 float SN_ADC_Get_float(uint32_t list_next); //获得对应通道的ADC信号的电压值 void SN_ADC_Deinit(void); //ADC去初始化 void bsp_adc_software_calibrate(void); //官方调整函数,精度不够,不使用 float SN_ADC_MCU_VDD(void); //MCU的vdd电压大小 //ADC静态参数 #define SN_ADC_E0 3 //偏移误差,来源于物理ADC工艺 #define SN_ADC_EN 2 //满量程误差,来源于参考源的物理工艺 //备用参数,是官方的调整函数,经测试,会导致较大的误差,所有我们不使用官方调整函数,直接用E0 EG 来纠正. /* ADC采样次数,根据实际需求可调整此值 */ #define ADC_SAMPLE_NUM (10U) /* 校准系数的最值 */ #define CALFACT_MAX (31) #define CALFACT_MIN (-31) /* ADC校准系数的符号位 */ #define ADC_CALFACT_SYMBOL (ADC_CALFACT_CALFACT_5) /* ADC补偿值 */ #define ADC_COMPENSATION_VALUE (*(int32_t *)(0x1FFF03CC)) //通道宏定义 #define ADC_CHANNEL_0_PB1 ADC_CHANNEL_0 #define ADC_CHANNEL_1_PA3 ADC_CHANNEL_1 #define ADC_CHANNEL_2_PA4 ADC_CHANNEL_2 #define ADC_CHANNEL_3_PA6 ADC_CHANNEL_3 #define ADC_CHANNEL_4_PA7 ADC_CHANNEL_4 #define ADC_CHANNEL_5_PB3 ADC_CHANNEL_5 #define ADC_CHANNEL_6_PB6 ADC_CHANNEL_6 #define ADC_CHANNEL_7_PB0 ADC_CHANNEL_7 //---------------------------------------------------------------------------------------------------------------------------------------------------------- //ADC中断优先级 #define ADC_NVIC_PRIO_x NVIC_PRIO_0 // NVIC_PRIO_0, NVIC_PRIO_1, NVIC_PRIO_2, NVIC_PRIO_3, 数字越小,优先级越高 //开启BGR反推VDD,电池且无LDO供电场景 #define ADC_BGR_Rectify //开启后台中断adc转换 #define ADC_IRQ_Handle 0 //0 :不开启,直接占用cpu时间等待 1 : 开启中断读取ADC值,单周期 2:开启中断读取ADC值,周期性更新ADC数据 #endif