dianji002 发表于 2016-5-15 10:50:36

在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);   
   

dianji002 发表于 2016-5-15 16:46:44

问题找到了,u16_adc1_value u16_adc2_value二个变量在中断程序的文件里定义。在主程序的文件里进行extern u16_adc1_value ;extern u16_adc2_value然后在主程序里读u16_adc1_value 和u16_adc2_value值就没问题了,如反过来在主程序里定义变量,在中断程序里用 extern 就是不行。不知是为什么?

dianji002 发表于 2016-5-15 16:47:22

ybhuangfugui 发表于 2016-5-15 12:12
应该是你的程序中配置AD有问题,看中断入口,你使用的是STM8单片机吧
https://www.stmcu.org.cn/module/forum/t ...

是用STM8

maxking 发表于 2016-5-16 06:27:32

中断是独立一个文件吗?
页: [1]
查看完整版本: 在TIM2的定时中断里读取AD转换值,读不到,