基于标准库的STM32F103C8T6的A/D转换中断方式代码
时间: 2023-05-29 22:06:37 浏览: 67
#include "stm32f10x.h"
void ADC1_IRQHandler(void)
{
if(ADC_GetITStatus(ADC1, ADC_IT_EOC) != RESET) //判断是否转换完成
{
uint16_t value = ADC_GetConversionValue(ADC1); //获取转换结果
//TODO: 处理转换结果
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC); //清除中断标志位
}
}
int main(void)
{
ADC_InitTypeDef ADC_InitStructure;
/* 使能GPIOA时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/* 配置PA0为模拟输入 */
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* 使能ADC1时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
/* 配置ADC1 */
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);
/* 配置ADC1通道0 */
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
/* 使能ADC1的DMA功能 */
ADC_DMACmd(ADC1, ENABLE);
/* 使能ADC1的中断 */
ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
/* 使能ADC1 */
ADC_Cmd(ADC1, ENABLE);
/* 启动转换 */
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(1)
{
//TODO: 主循环代码
}
}