STM32ADC單通道轉(zhuǎn)換
1. 初始化
ADC功能初始化主要分三部分,GPIO初始化、ADC模式初始化與NVIC初始化。文章來源:http://www.zghlxwxcb.cn/news/detail-837753.html
1.1初始化GPIO
void ADC_GPIO_Config(void) // 配置ADC通道引腳
{
GPIO_InitTypeDef GPIO_InitStructure; // 定義GPIO結(jié)構(gòu)體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); // 使能GPIOC時(shí)鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; // 選擇ADC通道引腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; // 設(shè)置引腳模式為模擬輸入
GPIO_Init(GPIOC,&GPIO_InitStructure); // 初始化引腳
}
1.2 初始化ADC模式
void ADC_MODE_Config(void)
{
ADC_InitTypeDef ADC_InitStructure; // 定義ADC結(jié)構(gòu)體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE); // 使能ADC2時(shí)鐘
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // 設(shè)置ADC工作模式為獨(dú)立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; // 設(shè)置ADC掃描模式為單通道模式
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; // 設(shè)置ADC連續(xù)轉(zhuǎn)換模式為開啟
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 設(shè)置ADC外部觸發(fā)模式為無
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 設(shè)置ADC數(shù)據(jù)對(duì)齊模式為右對(duì)齊
ADC_InitStructure.ADC_NbrOfChannel = 1; // 設(shè)置ADC通道數(shù)為1
ADC_Init(ADC2,&ADC_InitStructure); // 初始化ADC2
RCC_ADCCLKConfig(RCC_PCLK2_Div8); // 設(shè)置ADC時(shí)鐘為PCLK2的8分頻
ADC_RegularChannelConfig(ADC2,ADC_Channel_11,1,ADC_SampleTime_55Cycles5); // 設(shè)置ADC通道為11,采樣時(shí)間為55.5周期
ADC_ITConfig(ADC2,ADC_IT_EOC,ENABLE); // 使能ADC2中斷
ADC_Cmd(ADC2,ENABLE); // 使能ADC2
ADC_ResetCalibration(ADC2); // 重置ADC2校準(zhǔn)寄存器
while(ADC_GetResetCalibrationStatus(ADC2)); // 等待ADC2校準(zhǔn)寄存器重置完成
ADC_StartCalibration(ADC2); // 啟動(dòng)ADC2校準(zhǔn)
while(ADC_GetCalibrationStatus(ADC2)); // 等待ADC2校準(zhǔn)完成
ADC_SoftwareStartConvCmd(ADC2,ENABLE); // 啟動(dòng)ADC2軟件轉(zhuǎn)換
}
1.3 初始化NVIC
void ADC_NVIC_Config(void) // ADC2中斷優(yōu)先級(jí)配置
{
NVIC_InitTypeDef NVIC_InitStructure; // 定義NVIC_InitTypeDef結(jié)構(gòu)體變量
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); // 設(shè)置NVIC中斷分組1
NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; // 設(shè)置中斷通道為ADC1_2_IRQn
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 設(shè)置中斷優(yōu)先級(jí)為1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 設(shè)置中斷子優(yōu)先級(jí)為1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中斷通道
NVIC_Init(&NVIC_InitStructure); // 初始化NVIC_InitTypeDef結(jié)構(gòu)體變量
}
2.中斷函數(shù)編寫
中斷函數(shù)命名為ADC1_2_IRQHandler即可,換ADC通道的話名字也要換。文章來源地址http://www.zghlxwxcb.cn/news/detail-837753.html
void ADC1_2_IRQHandler(void) // ADC2中斷服務(wù)函數(shù)
{
if(ADC_GetITStatus(ADC2,ADC_IT_EOC) == SET) // 判斷是否為ADC2轉(zhuǎn)換完成中斷
{
ADC_Converted = ADC_GetConversionValue(ADC2); // 讀取ADC2轉(zhuǎn)換結(jié)果
}
ADC_ClearITPendingBit(ADC2,ADC_IT_EOC); // 清除ADC2轉(zhuǎn)換完成中斷標(biāo)志位
}
到了這里,關(guān)于STM32ADC單通道轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!