2025-09-12 09:53:32 +00:00
|
|
|
|
#ifndef __DRV_ADC_H_
|
|
|
|
|
#define __DRV_ADC_H_
|
|
|
|
|
|
2025-09-26 10:17:39 +00:00
|
|
|
|
#include "tmp75.h"
|
2025-09-25 10:05:11 +00:00
|
|
|
|
#include "drv_i2c.h"
|
2025-09-16 09:20:37 +00:00
|
|
|
|
#include "stdlib.h"
|
2025-09-18 10:05:04 +00:00
|
|
|
|
#include "stdbool.h"
|
2025-09-16 09:20:37 +00:00
|
|
|
|
#include "string.h"
|
|
|
|
|
#include "gd32f4xx.h"
|
2025-09-26 10:17:39 +00:00
|
|
|
|
#include "delay.h"
|
2025-09-18 10:05:04 +00:00
|
|
|
|
#include "rtthread.h"
|
2025-09-16 09:20:37 +00:00
|
|
|
|
|
2025-09-26 10:17:39 +00:00
|
|
|
|
|
2025-09-13 10:04:22 +00:00
|
|
|
|
/* 自定义宏,方便修改通道和引脚 */
|
|
|
|
|
#define ADCX ADC1
|
2025-09-13 09:22:00 +00:00
|
|
|
|
#define VOLTAGE_ADC_CHANNEL ADC_CHANNEL_12
|
|
|
|
|
#define CURRENT_ADC_CHANNEL ADC_CHANNEL_13
|
|
|
|
|
#define ADC_GPIO_PORT GPIOC
|
|
|
|
|
#define VOLTAGE_ADC_PIN GPIO_PIN_2
|
|
|
|
|
#define CURRENT_ADC_PIN GPIO_PIN_3
|
2025-09-18 10:05:04 +00:00
|
|
|
|
#define LB_V_TIMES 7 //电压采样滤波次数
|
|
|
|
|
#define LB_I_TIMES 12 //电流采样滤波次数
|
|
|
|
|
#define LB_T_TIMES 7 //温度采样滤波次数
|
|
|
|
|
#define LB_V_DEL 1 //电压滤波最高最低各删除个数
|
|
|
|
|
#define LB_I_DEL 2 //电流滤波最高最低各删除个数
|
|
|
|
|
#define LB_T_DEL 1 //温度滤波最高最低各删除个数
|
|
|
|
|
|
2025-09-29 09:41:58 +00:00
|
|
|
|
#define ADC_MODE_0 //规则组、单次转换、非扫描
|
|
|
|
|
// #define ADC_MODE_1 //注入组、单次转换、扫描、转换结束标志位采集
|
|
|
|
|
// #define ADC_MODE_2 //注入组、单次转换、扫描、中断转换结束标志位采集
|
|
|
|
|
// #define ADC_MODE_3 //规则组、连续转换、扫描、DMA采集
|
|
|
|
|
|
|
|
|
|
/* adc模式配置参数:ENABLE;DISABLE */
|
|
|
|
|
|
2025-09-18 10:05:04 +00:00
|
|
|
|
#ifdef ADC_MODE_0
|
2025-09-23 10:07:24 +00:00
|
|
|
|
|
2025-09-17 09:19:20 +00:00
|
|
|
|
#define CONTINUOUS_STATUS DISABLE // 是否开启连续转换
|
2025-09-18 10:05:04 +00:00
|
|
|
|
#define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL // 规则组
|
|
|
|
|
#define SCAN_STATUS DISABLE // 是否开启扫描模式
|
|
|
|
|
#define CHANNEL_LENGTH 1 // 通道数量:1~16
|
2025-09-23 10:07:24 +00:00
|
|
|
|
|
2025-09-18 10:05:04 +00:00
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef ADC_MODE_1
|
2025-09-23 10:07:24 +00:00
|
|
|
|
|
2025-09-18 10:05:04 +00:00
|
|
|
|
#define CONTINUOUS_STATUS DISABLE // 是否开启连续转换
|
|
|
|
|
#define SEQUENCE_CHANNEL ADC_INSERTED_CHANNEL // 注入组
|
2025-09-18 05:33:48 +00:00
|
|
|
|
#define SCAN_STATUS ENABLE // 是否开启扫描模式
|
|
|
|
|
#define CHANNEL_LENGTH 2 // 通道数量:1~16
|
2025-09-23 10:07:24 +00:00
|
|
|
|
|
2025-09-18 10:05:04 +00:00
|
|
|
|
#endif
|
2025-09-17 09:19:20 +00:00
|
|
|
|
|
2025-09-18 10:05:04 +00:00
|
|
|
|
#ifdef ADC_MODE_2
|
2025-09-23 10:07:24 +00:00
|
|
|
|
|
|
|
|
|
#define CONTINUOUS_STATUS DISABLE // 不开启连续转换
|
2025-09-18 10:05:04 +00:00
|
|
|
|
#define SEQUENCE_CHANNEL ADC_INSERTED_CHANNEL // 注入组
|
|
|
|
|
#define SCAN_STATUS ENABLE // 是否开启扫描模式
|
|
|
|
|
#define CHANNEL_LENGTH 2 // 通道数量:1~16
|
|
|
|
|
#define ADCX_IRQn ADC_IRQn
|
2025-09-23 10:07:24 +00:00
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef ADC_MODE_3
|
|
|
|
|
|
|
|
|
|
#define CONTINUOUS_STATUS ENABLE // 开启连续转换
|
|
|
|
|
#define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL // 规则组
|
|
|
|
|
#define SCAN_STATUS ENABLE // 是否开启扫描模式
|
|
|
|
|
#define CHANNEL_LENGTH 2 // 通道数量:1~16
|
|
|
|
|
#define DMAX DMA1
|
|
|
|
|
|
2025-09-18 10:05:04 +00:00
|
|
|
|
#endif
|
2025-09-17 09:19:20 +00:00
|
|
|
|
|
2025-09-16 09:20:37 +00:00
|
|
|
|
|
|
|
|
|
/* adc dma */
|
2025-09-17 09:19:20 +00:00
|
|
|
|
|
|
|
|
|
#ifdef DMAX
|
|
|
|
|
#define USER_DMA_ADC_CHANNEL DMA_CH3 //DMA通道:ADC0:DMA_CH0 DMA_CH4
|
|
|
|
|
// ADC1:DMA_CH2 DMA_CH3
|
|
|
|
|
// ADC2:DMA_CH0 DMA_CH3
|
|
|
|
|
#define USER_DMA_ADC_SUBPERI DMA_SUBPERI1 //DMA外设源:ADC0:DMA_SUBPERI0
|
|
|
|
|
// ADC1:DMA_SUBPERI1
|
|
|
|
|
// ADC2:DMA_SUBPERI2
|
|
|
|
|
#define DMA_ADC_IRQn DMA1_Channel0_IRQn //DMA1_Channel0_IRQn
|
|
|
|
|
//DMA1_Channel1_IRQn
|
|
|
|
|
//DMA1_Channel2_IRQn
|
|
|
|
|
//DMA1_Channel3_IRQn
|
|
|
|
|
//DMA1_Channel4_IRQn
|
|
|
|
|
#define DMA_ADC_PRIORITY_PRE 0 //抢占优先级
|
|
|
|
|
#define DMA_ADC_PRIORITY_SUB 1 //子优先级
|
|
|
|
|
|
|
|
|
|
#endif
|
2025-09-12 09:53:32 +00:00
|
|
|
|
|
2025-09-18 10:05:04 +00:00
|
|
|
|
|
|
|
|
|
#ifdef ADCX_IRQn
|
2025-09-18 06:28:40 +00:00
|
|
|
|
#define ADCX_PRIORITY_PRE 2U //抢占优先级
|
|
|
|
|
#define ADCX_PRIORITY_SUB 0U //子优先级
|
2025-09-18 10:05:04 +00:00
|
|
|
|
#endif
|
2025-09-18 06:28:40 +00:00
|
|
|
|
|
2025-09-16 09:20:37 +00:00
|
|
|
|
void adc_init(void);
|
|
|
|
|
void adc_rcu_config(void);
|
|
|
|
|
void adc_gpio_config(void);
|
2025-09-13 09:22:00 +00:00
|
|
|
|
void adc_config(void);
|
2025-09-15 09:03:37 +00:00
|
|
|
|
float ptz_Voltage_collect_adc1_task();
|
|
|
|
|
float ptz_Current_collect_adc1_task();
|
|
|
|
|
float ptz_temperature_collect_tmp75_task();
|
2025-09-18 10:05:04 +00:00
|
|
|
|
float Filtering(float *filter, uint8_t filterlens, uint8_t filterdel);
|
|
|
|
|
|
|
|
|
|
#ifdef ADCX_IRQn
|
|
|
|
|
void adc_interrupt_int(void);
|
|
|
|
|
#endif
|
2025-09-17 09:19:20 +00:00
|
|
|
|
|
2025-09-18 06:28:40 +00:00
|
|
|
|
#ifdef DMAX
|
|
|
|
|
void adc_dma_config(void);
|
|
|
|
|
__weak void DMA1_Channel0_IRQHandler(void);
|
2025-09-23 10:07:24 +00:00
|
|
|
|
uint16_t BSP_ADCDataAcquire(uint8_t _index);
|
2025-09-18 06:28:40 +00:00
|
|
|
|
#endif
|
2025-09-12 09:53:32 +00:00
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|