STM32
直播中

王辉

7年用户 1263经验值
私信 关注
[问答]

在TIM2的定时中断里读取AD转换值,读不到为什么?

                INTERRUPT_HANDLER(tiM2_UPD_OVF_BRK_IRQHandler, 13)
{

   
   TIM2_ClearFlag(TIM2_FLAG_UPDATE);
   GPIO_WriteReverse(GPIOD, GPIO_PIN_2);
    while((ADC1->CSR   0x80)!=0x80); // 等待转换结束
    u16_adc1_value = ADC1_GetBufferValue(0x04);   //read ad4;
    u16_adc2_value = ADC1_GetBufferValue(0x05);   //read ad5  
}
中断程序如上,PD2有翻转,但是u16_adc1_value值和u16_adc2_value一直为0,实际PB4和PB5是1.65V电压的。
但如果把下面的三个语句放在主语序里,就可以读到,为什么?  
    while((ADC1->CSR   0x80)!=0x80); // 等待转换结束
    u16_adc1_value = ADC1_GetBufferValue(0x04);   
    u16_adc2_value = ADC1_GetBufferValue(0x05);   
   

回帖(1)

李秀梅

2024-5-10 15:23:05
问题找到了,u16_adc1_value u16_adc2_value二个变量在中断程序的文件里定义。在主程序的文件里进行extern u16_adc1_value ;extern u16_adc2_value  然后在主程序里读u16_adc1_value 和u16_adc2_value值就没问题了,如反过来在主程序里定义变量,在中断程序里用 extern 就是不行。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分