登录/注册

stm32f103 adc2

更多

在STM32F103系列微控制器中,ADC2是一个12位精度的模数转换器(ADC),用于将模拟信号转换为数字信号。以下是关于ADC2的关键点和使用注意事项:


1. ADC2 主要特性


2. 使用ADC2的步骤

(1) 启用时钟

ADC2挂载在APB2总线上,需先使能其时钟及对应GPIO的时钟:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2 | RCC_APB2Periph_GPIOx, ENABLE);

(2) 配置GPIO为模拟输入

例如,若使用PA1作为ADC2的通道1:

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; // 模拟输入模式
GPIO_Init(GPIOA, &GPIO_InitStructure);

(3) 初始化ADC2参数

设置分辨率、对齐方式、扫描模式等:

ADC_InitTypeDef ADC_InitStructure;
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(ADC2, &ADC_InitStructure);

(4) 校准ADC

校准可减少转换误差:

ADC_Cmd(ADC2, ENABLE); // 先启用ADC2
ADC_ResetCalibration(ADC2);
while(ADC_GetResetCalibrationStatus(ADC2));
ADC_StartCalibration(ADC2);
while(ADC_GetCalibrationStatus(ADC2));

(5) 启动转换

选择通道并触发转换:

ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5); // 通道1,采样时间55.5周期
ADC_SoftwareStartConvCmd(ADC2, ENABLE); // 软件触发
while(!ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC)); // 等待转换完成
uint16_t value = ADC_GetConversionValue(ADC2); // 读取结果

3. 注意事项


4. 示例代码片段(标准库)

// 初始化ADC2单通道单次转换
void ADC2_Init(void) {
    // 启用时钟、配置GPIO(略)
    ADC_InitTypeDef ADC_InitStructure;
    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(ADC2, &ADC_InitStructure);
    ADC_Cmd(ADC2, ENABLE);
    // 校准(略)
}

// 读取ADC2通道1的值
uint16_t Read_ADC2_Channel1(void) {
    ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
    ADC_SoftwareStartConvCmd(ADC2, ENABLE);
    while(!ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC));
    return ADC_GetConversionValue(ADC2);
}

5. 参考文档

如需进一步优化或解决特定问题,请提供更多应用场景细节!

stm32f302和stm32f103ADC区别是什么?

请问stm32f302和stm32f103的ADC除了stm32f103

2024-05-15 08:03:36

学习STM32F103ADC功能

三勺最近在学习STM32F103的ADC功能,居然连最简单的独立模式的单通道的电压采集都不能实现,这就不能忍了,这是对智商的侮辱。

2023-10-24 16:06:03

ch32v103stm32f103的区别

ch32v103与stm32f103的区别  Ch32v103与STM32f103

2023-08-22 15:49:00

基于STM32F103的SVPWM算法实现

基于STM32F103的SVPWM算法实现

资料下载 jinyi7016 2022-03-22 12:12:17

GD32F103STM32F103的区别 2021.6.2

GD32F103和STM32F103区别介绍关键词Key words:GD32F103、

资料下载 李杰 2021-12-08 11:06:03

基于STM32f103的输入捕获测频率和占空比

基于STM32f103的输入捕获测频率和占空比

资料下载 shyshyshy 2021-08-02 10:10:24

基于STM32f103的FFT频率测试程序下载

基于STM32f103的FFT频率测试程序下载

资料下载 shyshyshy 2021-08-02 10:07:20

基于STM32f103使用的DAC正弦波

基于STM32f103使用的DAC正弦波

资料下载 shyshyshy 2021-08-02 10:05:00

采用STM32F103硬件ADC功能进行光照强度采集

光照强度采集ADC方式采集,STM32F103本身自带有硬件ADC功能。将采集到的数据实时刷新到屏幕上即可完成波形显示。

2022-05-31 11:32:52

CH32FV2x的ADC2为什么不能单独通过DMA传输数据?

刚刚看了《CH32FV2x_V3xRM.pdf》,发现ADC2不能单独通过DMA传输数据,还是像STM32F103里一样,只有

2022-05-25 07:45:16

如何对STM32F103 ADC寄存器进行配置

STM32F103系列有几个ADC?STM32F103系列的ADC主要特

2021-09-27 09:08:10

STM32F103ADC配置 精选资料推荐

STM32F103ADC配置(ADC1和ADC2)STM32F103拥有

2021-08-24 07:53:53

STM32f103系列有3个ADC

30.1 ADC 简介STM32f103 系列有 3 个 ADC,精度为 12 位,每个

2021-08-12 06:55:59

stm32f030和stm32f103功能差异

stm32f030和stm32f103功能差异主要表现在哪?

2021-07-22 09:35:47

STM32F1的ADC2如何使用DMA功能 USART过载错误Overrun error

STM32F1的ADC2如何使用DMA功能,USART过载错误Overrun error

2020-03-14 14:42:01

7天热门专题 换一换
相关标签