加入注入组中断采集

This commit is contained in:
dufresne 2025-09-18 14:28:40 +08:00
parent bbbe09ff9f
commit 28f07b1183
3 changed files with 42 additions and 13 deletions

View File

@ -149,11 +149,13 @@ int main(void)
rt_thread_mdelay(250);
#endif
voltage = ptz_Voltage_collect_adc1_task();
rt_thread_mdelay(500);
// voltage = ptz_Voltage_collect_adc1_task();
// rt_thread_mdelay(500);
current = ptz_Current_collect_adc1_task();
rt_thread_mdelay(500);
// current = ptz_Current_collect_adc1_task();
// rt_thread_mdelay(500);
adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取
//测试mb铁电读写
read_mb_id((uint8_t*)&tiedian_id);//读取铁电ID
@ -181,27 +183,39 @@ int main(void)
void DMA1_Channel0_IRQHandler(void)
{
if(dma_interrupt_flag_get(DMA1, USER_DMA_ADC_CHANNEL, DMA_INT_FLAG_FTF)) {
dma_interrupt_flag_clear(DMA1, USER_DMA_ADC_CHANNEL, DMA_INT_FLAG_FTF);
ttest.status = 1;
dma_interrupt_flag_clear(DMA1, USER_DMA_ADC_CHANNEL, DMA_INT_FLAG_FTF);
// 处理传输完成
}
if(dma_interrupt_flag_get(DMA1, USER_DMA_ADC_CHANNEL, DMA_INT_FLAG_HTF)) {
dma_interrupt_flag_clear(DMA1, USER_DMA_ADC_CHANNEL, DMA_INT_FLAG_HTF);
ttest.status = 2;
dma_interrupt_flag_clear(DMA1, USER_DMA_ADC_CHANNEL, DMA_INT_FLAG_HTF);
// 处理半传输完成(如果使能了)
}
if(dma_interrupt_flag_get(DMA1, USER_DMA_ADC_CHANNEL, DMA_INT_FLAG_FEE)) {
dma_interrupt_flag_clear(DMA1, USER_DMA_ADC_CHANNEL, DMA_INT_FLAG_FEE);
ttest.status = 3;
dma_interrupt_flag_clear(DMA1, USER_DMA_ADC_CHANNEL, DMA_INT_FLAG_FEE);
// 处理错误
}
if(dma_interrupt_flag_get(DMA1, USER_DMA_ADC_CHANNEL, DMA_INT_FLAG_TAE)) {
dma_interrupt_flag_clear(DMA1, USER_DMA_ADC_CHANNEL, DMA_INT_FLAG_TAE);
ttest.status = 6;
dma_interrupt_flag_clear(DMA1, USER_DMA_ADC_CHANNEL, DMA_INT_FLAG_TAE);
// 处理错误
}
}
#endif
void ADC_IRQHandler()
{
if(adc_interrupt_flag_get(ADCX, ADC_INT_FLAG_EOC)) {
voltage = adc_inserted_data_read(ADCX, ADC_INSERTED_CHANNEL_0); // 读取注入组数据寄存器
voltage = voltage / 4095.0 * 3.3;
current = adc_inserted_data_read(ADCX, ADC_INSERTED_CHANNEL_1); // 读取注入组数据寄存器
current = ((current / 4095.0 * 3.3) - 3.3 / 2) / 0.132;
adc_interrupt_flag_clear(ADCX, ADC_INT_FLAG_EOC);
// 处理传输完成
}
}

View File

@ -30,7 +30,7 @@ void adc_init(void)
#endif
adc_config();
adc_interrupt_int();
#ifdef DMAX
ctl = DMA_CHCTL(DMAX, USER_DMA_ADC_CHANNEL);
if (ctl == 33762576)
@ -171,6 +171,13 @@ void adc_config(void)
#endif
}
void adc_interrupt_int(void)
{
adc_interrupt_enable (ADCX, ADC_INT_EOC);
nvic_irq_enable (ADCX_IRQn, ADCX_PRIORITY_PRE, ADCX_PRIORITY_SUB);
}
/* ---------------------------------------------------------------------------------------------------------------- */
// adc电压采集

View File

@ -39,7 +39,7 @@ adc模式配置参数
// #define DMAX DMA1
#ifdef DMAX
#define DMA_STATUS DISABLE // 是否开启dma
#define DMA_STATUS DISABLE // 是否开启dma *后续把这个定义改到#ifdef里*
#define USER_DMA_ADC_CHANNEL DMA_CH3 //DMA通道ADC0:DMA_CH0 DMA_CH4
// ADC1:DMA_CH2 DMA_CH3
// ADC2:DMA_CH0 DMA_CH3
@ -56,16 +56,24 @@ adc模式配置参数
#endif
#define ADCX_IRQn ADC_IRQn
#define ADCX_PRIORITY_PRE 2U //抢占优先级
#define ADCX_PRIORITY_SUB 0U //子优先级
void adc_init(void);
void adc_rcu_config(void);
void adc_gpio_config(void);
void adc_dma_config(void);
void adc_config(void);
void adc_interrupt_int(void);
float ptz_Voltage_collect_adc1_task();
float ptz_Current_collect_adc1_task();
float ptz_temperature_collect_tmp75_task();
__weak void DMA1_Channel0_IRQHandler(void);
#ifdef DMAX
void adc_dma_config(void);
__weak void DMA1_Channel0_IRQHandler(void);
#endif
#endif