野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3323|回复: 4

EXIT 11 触发ADC,程序正常调试无法触发

[复制链接]
发表于 2023-3-15 19:53:49 | 显示全部楼层 |阅读模式

麻烦帮忙看下这个程序哪里有问题,就是EXIT 11 引脚,我用的是PA11     ADC采集引脚我用的是PA1  

void TIM_event_exit(void)
{

    //PA1浮空输入
    /*----------------------------------------------------------------------*/
    GPIO_InitTypeDef GPIO_Init_Def;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_Init_Def.GPIO_Mode=GPIO_Mode_IN_FLOATING;
    GPIO_Init_Def.GPIO_Pin=GPIO_Pin_11;
    GPIO_Init(GPIOA,&GPIO_Init_Def);

    //打开映射时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
    //选择用作 EXTI 线的 GPIO 引脚(EXTICR)EXTICR[3]
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource11);
    //映射到AFIO->MAPR-》ADC1_ETRGREG(ADC1规则转换外部触发与EXTI11相连)
    GPIO_PinRemapConfig(GPIO_Remap_ADC1_ETRGREG, ENABLE);

    //EXTI初始化
    EXTI_InitTypeDef EXTI_InitStructure;
    EXTI_InitStructure.EXTI_Line=EXTI_Line11;
    EXTI_InitStructure.EXTI_LineCmd=ENABLE;
    EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Event;
    EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
    EXTI_Init(&EXTI_InitStructure);

}



void three_ADC_dma_init_111()
{
    //PA1模拟输入
    /*----------------------------------------------------------------------*/
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );           //使能ADC1通道时钟
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                            //模拟输入引脚
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //ADC时钟+初始化+其他配置
    /*----------------------------------------------------------------------*/
    ADC_InitTypeDef ADC_InitStruct;
    RCC_APB2PeriphClockCmd (RCC_APB2Periph_ADC1, ENABLE );

    ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;
    ADC_InitStruct.ADC_ScanConvMode = DISABLE;
    ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;
    ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO;
    ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStruct.ADC_NbrOfChannel = 1;

    ADC_Init(ADC1, &ADC_InitStruct);


    //外部触发命令使能Trig
    ADC_ExternalTrigConvCmd(ADC1,ENABLE);
    //重新设置时钟
    RCC_ADCCLKConfig(RCC_PCLK2_Div8);
    //设置指定ADC的规则组通道,一个序列,采样时间
    ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5 );        //ADC1,ADC通道,采样时间为239.5周期
    //ADC1中断
    ADC_ITConfig( ADC1,ADC_IT_EOC,ENABLE);

    //NVIC初始化
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;                        //使能按键WK_UP所在的外部中断通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;        //抢占优先级1,
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;                                        //子优先级3
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //使能外部中断通道
    NVIC_Init(&NVIC_InitStructure);

    //ADC1启用
    ADC_Cmd(ADC1, ENABLE);

    //ADC校准
    /*----------------------------------------------------------------------*/
    //使能复位校准
    ADC_ResetCalibration(ADC1);
    //等待复位校准结束
    while(ADC_GetResetCalibrationStatus(ADC1));
    // ADC开始校准
    ADC_StartCalibration(ADC1);
    // 等待校准完成
    while(ADC_GetCalibrationStatus(ADC1));

}

uint16_t ADC_CurrentValue = 0;
void ADC1_2_IRQHandler(void)
{

    if(ADC_GetITStatus(ADC1,ADC_IT_EOC)!=RESET)
    {

        ADC_CurrentValue = (uint16_t)ADC1->DR;
    }
}



int main (void)
{

    float ADC_RealValue = 0.0;
        led_init();
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    delay_init();
        USART_Config();//串口打开、usart_DMA关闭、DMA没开

        three_ADC_dma_init_111();
        TIM_event_exit();
        while(1)
        {
    ADC_RealValue = (float)ADC_CurrentValue/4096*3.3 + 0.005;
    printf("ADC_CurrentValue = %d \r\n", ADC_CurrentValue);  
    printf("ADC_RealValue = %.2f V \r\n", ADC_RealValue);
    delay_ms(1000);
        }

回复

使用道具 举报

发表于 2023-3-16 07:09:43 | 显示全部楼层
有没有进行外部触发呢?只有给了外部触发信号才会AD转换。
回复 支持 反对

使用道具 举报

发表于 2023-3-16 09:51:12 | 显示全部楼层
楼上正解
回复

使用道具 举报

 楼主| 发表于 2023-3-16 10:37:08 | 显示全部楼层
羊烊 发表于 2023-3-16 07:09
有没有进行外部触发呢?只有给了外部触发信号才会AD转换。

用PA11引脚触发,触发信号是拉升PA11引脚电平,可是没动作,不知道怎么回事

void TIM_event_exit(void)
{

    //PA1浮空输入
    /*----------------------------------------------------------------------*/
    GPIO_InitTypeDef GPIO_Init_Def;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_Init_Def.GPIO_Mode=GPIO_Mode_IN_FLOATING;
    GPIO_Init_Def.GPIO_Pin=GPIO_Pin_11;
    GPIO_Init(GPIOA,&GPIO_Init_Def);

    //打开映射时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
    //选择用作 EXTI 线的 GPIO 引脚(EXTICR)EXTICR[3]
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource11);
    //映射到AFIO->MAPR-》ADC1_ETRGREG(ADC1规则转换外部触发与EXTI11相连)
    GPIO_PinRemapConfig(GPIO_Remap_ADC1_ETRGREG, ENABLE);

    //EXTI初始化
    EXTI_InitTypeDef EXTI_InitStructure;
    EXTI_InitStructure.EXTI_Line=EXTI_Line11;
    EXTI_InitStructure.EXTI_LineCmd=ENABLE;
    EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Event;
    EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
    EXTI_Init(&EXTI_InitStructure);

}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-16 10:46:47 来自手机 | 显示全部楼层
dyygxmy 发表于 2023-3-16 09:51
楼上正解

触发信号配置好了,但无法触发呀
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-3-29 21:59 , Processed in 0.031606 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表