stm32G ADC
时间: 2025-01-16 08:05:05 浏览: 56
### STM32G系列微控制器ADC模数转换器使用教程
#### 1. ADC概述
STM32G系列是由STMicroelectronics开发的一类基于ARM Cortex-M内核的高性能32位微控制器,其内置有强大的ADC模块。该模块能够将来自外部世界的连续变化的模拟信号转变为离散数值表示形式的数据流,以便于后续处理和分析[^1]。
#### 2. 配置与初始化
为了使能并正确设置ADC,在程序启动阶段需调用相应的API来完成必要的参数设定工作。这通常涉及到指定输入通道、分辨率以及触发模式等内容。具体来说,可以通过编写如下所示的一个简单的C语言函数来进行初始化操作:
```c
void MX_ADC_Init(void)
{
/* USER CODE BEGIN ADC_Init 0 */
/* USER CODE END ADC_Init 0 */
/** Common config
*/
hadc.Instance = ADC1;
hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; // 设置时钟分频系数
hadc.Init.Resolution = ADC_RESOLUTION_12B; // 设定分辨率为12比特
hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; // 数据右对齐
hadc.Init.ScanConvMode = DISABLE; // 单次转换模式下禁用扫描序列
hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV; // 结束标志仅针对单个转换有效
hadc.Init.LowPowerAutoWait = DISABLE; // 关闭低功耗自动等待特性
hadc.Init.ContinuousConvMode = ENABLE; // 启动连续转换模式
hadc.Init.NbrOfConversion = 1; // 转换次数设为一次
hadc.Init.DiscontinuousConvMode = DISABLE; // 不启用不连续转换方式
hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 利用软件指令触发改变状态机动作而非硬件事件驱动机制
hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;// 外部触发沿选择无边沿检测
if (HAL_ADC_Init(&hadc) != HAL_OK){
Error_Handler();
}
}
```
上述代码片段展示了如何利用HAL库中的`HAL_ADC_Init()`接口执行基本配置过程[^2]。
#### 3. 执行校准流程
考虑到制造偏差等因素可能导致实际性能偏离理想情况,因此建议每次上电重启之后都运行一次自检/自我调整算法以确保测量精度处于最佳水平。对于STM32G4系列产品而言,可通过访问特定寄存器或借助专用工具链提供的高级别封装命令轻松达成此目的[^3]。
#### 4. 开始采集样本
一旦完成了前期准备工作,则可随时发起新的取样请求并通过轮询或者中断服务例程的方式获取最终结果。下面给出了一种典型的应用场景下的实现思路:
```c
uint32_t adc_value;
// 发起同步读取请求直到获得有效的返回值为止
if(HAL_ADC_Start(&hadc)==HAL_OK && HAL_ADC_PollForConversion(&hadc,HAL_MAX_DELAY)==HAL_OK){
adc_value=HAL_ADC_GetValue(&hadc);
}
printf("The converted value is %lu\n",adc_value); // 输出转换后的十进制整型变量
```
这段示范性的源码说明了怎样从已激活的状态出发去捕获当前时刻对应的量化等级,并将其打印出来供进一步观察研究之用[^4]。
阅读全文
相关推荐


















