小聂 发表于 2022-3-1 15:44

HK32F103CBT6 ADC采集影响外部中断

麻烦问一下,我用的是HK32F103芯片, 通过PA1进行电池电压采集, PA7作为按键外部中断输入,当程序运行到ADC采集的时候,会产生PA7的外部中断这是什么原因啊?同样的程序在STM32上就不会,我需要修改什么地方吗

caigang13 发表于 2022-3-1 20:33

同意的程序,从ST移植过来的?

chenjun89 发表于 2022-3-2 08:10

航顺和ST的程序不能兼容的啊

小聂 发表于 2022-3-2 10:04

caigang13 发表于 2022-3-1 20:33
同意的程序,从ST移植过来的?

是的同样的程序

小聂 发表于 2022-3-2 10:05

chenjun89 发表于 2022-3-2 08:10
航顺和ST的程序不能兼容的啊

但是ADC为什么会影响外部中断啊我看这两个引脚也没有复用关系的还有哪里需要注意吗

小聂 发表于 2022-3-2 14:56

有没有人遇到这种情况的啊,大佬帮忙

SDLin 发表于 2022-3-2 16:50

正常是不会影响到的。检查你ADC的初始化设置,看是否有跟PA7引脚误关联的?

小聂 发表于 2022-3-3 15:04

SDLin 发表于 2022-3-2 16:50
正常是不会影响到的。检查你ADC的初始化设置,看是否有跟PA7引脚误关联的? ...

void BSP_ADC_Init(void)
{
        ADC_InitTypeDef ADC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;       

        RCC_APB2PeriphClockCmd(ADC_BAT_CLK,ENABLE);          
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
        GPIO_InitStructure.GPIO_Pin = ADC_BAT_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
        GPIO_Init(ADC_BAT_PORT,&GPIO_InitStructure);
        RCC_ADCCLKConfig(RCC_PCLK2_Div6);   
           ADC_DeInit(ADC1);
        ADC_StructInit(&ADC_InitStructure);
        ADC_InitStructure.ADC_Mode                                         = ADC_Mode_Independent;                       
        ADC_InitStructure.ADC_ScanConvMode                         = DISABLE;                                               
        ADC_InitStructure.ADC_ContinuousConvMode         = DISABLE;                                               
        ADC_InitStructure.ADC_ExternalTrigConv                 = ADC_ExternalTrigConv_None;       
        ADC_InitStructure.ADC_DataAlign                         = ADC_DataAlign_Right;                       
        ADC_InitStructure.ADC_NbrOfChannel                         = 1;                                                       
        ADC_Init(ADC1, &ADC_InitStructure);               
        ADC_TempSensorVrefintCmd(ENABLE);
        ADC_Cmd(ADC1, ENABLE);       
        ADC_ResetCalibration(ADC1);       
      while(ADC_GetResetCalibrationStatus(ADC1));       
        ADC_StartCalibration(ADC1);       
        while(ADC_GetCalibrationStatus(ADC1));               
}


uint16_t get_adc_value(uint8_t ch)   
{
        ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
        ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );                                            
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);               
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
        __NOP();
        __NOP();
        __NOP();
        return ADC_GetConversionValue(ADC1);       
}


uint16_t get_adc_battery(void)
{
        uint16_t ADrefint,ADbat,voltage;
       
        get_adc_value(ADC_CH_VREFINT);
        SYS_Delay(10);
        ADrefint = get_adc_value(ADC_CH_VREFINT);
        SYS_Delay(10);
        get_adc_value(ADC_CH_BATTERY);
        SYS_Delay(10);
        ADbat = get_adc_value(ADC_CH_BATTERY);
        voltage = (1200 * ADbat / ADrefint) * 122 / 22;
        return voltage;
}       

我的ADC是这样操作的   麻烦看一下对吗?、

SDLin 发表于 2022-3-3 15:39

把你能复现现象的工程发一下看看,同时把外部中断电路、ADC采集的外部电路原理图发下。

小聂 发表于 2022-3-3 16:20

SDLin 发表于 2022-3-3 15:39
把你能复现现象的工程发一下看看,同时把外部中断电路、ADC采集的外部电路原理图发下。 ...

你好版主这是我的工程麻烦你看一下谢谢

SDLin 发表于 2022-3-3 17:40

小聂 发表于 2022-3-3 16:20
你好版主这是我的工程麻烦你看一下谢谢

直接跑你的工程 没有进外部中断EXTI9_5_IRQHandler()哦。把EXT引脚电路和ADC原理图也发下看看吧

小聂 发表于 2022-3-3 18:02

SDLin 发表于 2022-3-3 17:40
直接跑你的工程 没有进外部中断EXTI9_5_IRQHandler()哦。把EXT引脚电路和ADC原理图也发下看看吧 ...

这是原理图SWITCH2接的外部中断

SDLin 发表于 2022-3-4 16:55

小聂 发表于 2022-3-3 18:02
这是原理图SWITCH2接的外部中断

你试试,所有调用SYS_Delay()函数的地方,都屏蔽掉,看是否就不会反复进EXTI中断。

SDLin 发表于 2022-3-7 16:13

小聂 发表于 2022-3-3 18:02
这是原理图SWITCH2接的外部中断

可以了吗?你微信多少?加一下

小聂 发表于 2022-3-8 10:47

SDLin 发表于 2022-3-7 16:13
可以了吗?你微信多少?加一下

你好   我的微信是18380429315

小聂 发表于 2022-3-8 10:50

SDLin 发表于 2022-3-4 16:55
你试试,所有调用SYS_Delay()函数的地方,都屏蔽掉,看是否就不会反复进EXTI中断。 ...

你好我全部屏蔽了还是一样的

liqingfeng123 发表于 2022-3-18 14:58

ADC 精度如何?与st对比呢?
页: [1]
查看完整版本: HK32F103CBT6 ADC采集影响外部中断