【元能芯24V全集成电机专用开发板】+中断读取ADC转换结果编程与调试
安装完keil配套pack包之后,使用stlink进行连接,显示如下截图:
在实例程序ADC上进行实验和调试;
本来以为芯片上有DMA,查询手册发现没有,所以数据必须及时读取,在源文件中是用查询方式在读取ADC数据,这里我尝试使用中断方式来读取数据:
在main中添加了这样一段代码
void NVIC_Config(void)
{NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = ADC1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}其中标红的标识符是从以下文件中找的中断函数编号,和stm32的固件库非常相似,只是文件名不同;
从注释可以看出是ADC1的转换中断;那么还要找到对应的中断函数名;和stm32固件库类似,从启动代码中去查找:
中断函数一般放在myg0002_it.c文件中,要注意变量的定义和函数声明引用,不然很容易报错;这些函数定义的位置也和标准库类似,很容易找到;
void ADC1_IRQHandler (void)
{ while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
ADCConvertedValue = ADC_GetConversionValue(ADC1);
ADCConvertedVoltage = (ADCConvertedValue * 3.3) / 4095;
ADC_ClearFlag(ADC1, ADC_FLAG_EOC);
}
模板工程没有打开ADC中断,所以还要在ADC设置位置添加标红语句,打开ADC转换中断:
ADC_ChannelConfig(ADC1, ADC_Channel_2, ADC_SampleTime_239_5Cycles);
ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
ADC_Cmd(ADC1, ENABLE);
因为工程本身已经设置了定时器等,所以添加这些代码再进行调试就完成了定时器周期性启动ADC的功能,可以在调试图片中看到调试界面的DR寄存器不断变化,输出的ADC结果在中断函数中不断更新赋值给全局变量ADCConvertedValue,这个测评说明了元能芯的软件开发基本类似与标准库,有基础的话,使用该芯片很容易。