STM32ADC单通道转换
1.STM32标准库时钟树设置2.通过keil内置标准库创建stm32工程3.STM32硬件IIC使用4.STM32FATFS文件系统移植5.STM32SPIFLASH读写6.STM32标准库内部Flash读写7.STM32F103xC,xD,xE引脚定义8.STM32标准库通用定时器PWM生成9.STM32标准库通用定时器计数10.STM32标准库基本定时器11.STM32标准库RTC时钟
12.STM32ADC单通道转换
13.STM32标准库串口DMA空闲中断接收14.STM32OLED使用15.STM32标准库低功耗16.STM32标准库通用定时器输出比较17.STM32标准库通用定时器输入捕获18.STM32硬件IIC使用STM32ADC单通道转换
1. 初始化
ADC功能初始化主要分三部分,GPIO初始化、ADC模式初始化与NVIC初始化。
1.1初始化GPIO
void ADC_GPIO_Config(void) // 配置ADC通道引脚
{
GPIO_InitTypeDef GPIO_InitStructure; // 定义GPIO结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); // 使能GPIOC时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; // 选择ADC通道引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; // 设置引脚模式为模拟输入
GPIO_Init(GPIOC,&GPIO_InitStructure); // 初始化引脚
}
1.2 初始化ADC模式
void ADC_MODE_Config(void)
{
ADC_InitTypeDef ADC_InitStructure; // 定义ADC结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE); // 使能ADC2时钟
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // 设置ADC工作模式为独立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; // 设置ADC扫描模式为单通道模式
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; // 设置ADC连续转换模式为开启
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 设置ADC外部触发模式为无
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 设置ADC数据对齐模式为右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; // 设置ADC通道数为1
ADC_Init(ADC2,&ADC_InitStructure); // 初始化ADC2
RCC_ADCCLKConfig(RCC_PCLK2_Div8); // 设置ADC时钟为PCLK2的8分频
ADC_RegularChannelConfig(ADC2,ADC_Channel_11,1,ADC_SampleTime_55Cycles5); // 设置ADC通道为11,采样时间为55.5周期
ADC_ITConfig(ADC2,ADC_IT_EOC,ENABLE); // 使能ADC2中断
ADC_Cmd(ADC2,ENABLE); // 使能ADC2
ADC_ResetCalibration(ADC2); // 重置ADC2校准寄存器
while(ADC_GetResetCalibrationStatus(ADC2)); // 等待ADC2校准寄存器重置完成
ADC_StartCalibration(ADC2); // 启动ADC2校准
while(ADC_GetCalibrationStatus(ADC2)); // 等待ADC2校准完成
ADC_SoftwareStartConvCmd(ADC2,ENABLE); // 启动ADC2软件转换
}
1.3 初始化NVIC
void ADC_NVIC_Config(void) // ADC2中断优先级配置
{
NVIC_InitTypeDef NVIC_InitStructure; // 定义NVIC_InitTypeDef结构体变量
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); // 设置NVIC中断分组1
NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; // 设置中断通道为ADC1_2_IRQn
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 设置中断优先级为1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 设置中断子优先级为1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中断通道
NVIC_Init(&NVIC_InitStructure); // 初始化NVIC_InitTypeDef结构体变量
}
2.中断函数编写
中断函数命名为ADC1_2_IRQHandler即可,换ADC通道的话名字也要换。
void ADC1_2_IRQHandler(void) // ADC2中断服务函数
{
if(ADC_GetITStatus(ADC2,ADC_IT_EOC) == SET) // 判断是否为ADC2转换完成中断
{
ADC_Converted = ADC_GetConversionValue(ADC2); // 读取ADC2转换结果
}
ADC_ClearITPendingBit(ADC2,ADC_IT_EOC); // 清除ADC2转换完成中断标志位
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库