stm32f103c8t6 电位器ADC
时间: 2025-02-19 16:33:46 浏览: 65
### STM32F103C8T6 使用 ADC 读取电位器值
对于STM32F103C8T6微控制器而言,其内置的模数转换器(ADC)可以用于将模拟信号转化为数字信号。当涉及到使用ADC来读取电位器的值时,主要的操作流程包括初始化ADC模块、配置通道以及启动转换并获取结果。
#### 初始化库与头文件引入
为了简化开发过程,通常会采用标准外设库或HAL库来进行编程,在这里假设使用的是HAL库。首先需要包含必要的头文件,并定义使用的引脚和ADC通道:
```c
#include "stm32f1xx_hal.h"
// 定义要使用的GPIO端口和引脚编号
#define POT_PIN GPIO_PIN_0
#define POT_PORT GPIOA
#define ADC_CHANNEL 0 // 对应于PA0上的ADC输入通道
```
#### 配置系统时钟与时基初始化
确保系统的时钟已经正确设置好,这一步骤通常是通过调用`SystemClock_Config()`函数完成的;接着是对时间基础进行初始化,以便后续能够正常工作。
#### 设置GPIO模式为模拟输入
为了让指定的引脚作为ADC输入使用,需将其配置成模拟输入模式:
```c
void MX_GPIO_Init(void)
{
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* Configure the pin as analog input */
GPIO_InitStruct.Pin = POT_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(POT_PORT, &GPIO_InitStruct);
}
```
#### ADC初始化
接下来就是对ADC本身进行参数设定,比如分辨率、数据对齐方式等,并开启该外设的功能:
```c
static void MX_ADC1_Init(void)
{
ADC_ChannelConfTypeDef sConfig = {0};
/** Common config */
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = DISABLE; // 单次转换模式
hadc1.Init.ContinuousConvMode = ENABLE; // 连续转换模式
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
if (HAL_ADC_Init(&hadc1) != HAL_OK){
Error_Handler();
}
/**Configure for the selected ADC regular channel*/
sConfig.Channel = ADC_CHANNEL;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_7CYCLES_5;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK){
Error_Handler();
}
}
```
#### 启动ADC转换并读取数值
最后编写一个简单的循环程序去触发ADC采样并将得到的结果打印出来或者处理它:
```c
int main(void)
{
uint32_t adcValue;
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
while (1) {
if(HAL_ADC_Start(&hadc1) == HAL_OK){
if(HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK){
adcValue = HAL_ADC_GetValue(&hadc1);
printf("Potentiometer Value: %lu\r\n",adcValue);
}else{
Error_Handler();
}
HAL_ADC_Stop(&hadc1);
}else{
Error_Handler();
}
HAL_Delay(1000); // 延迟一秒再下一次测量
}
}
void Error_Handler(void)
{
// 用户可以根据实际需求修改错误处理器的内容
while(1){}
}
```
上述代码展示了如何利用STM32CubeMX生成的基础框架配合HAL库实现基本功能[^1]。
阅读全文
相关推荐

















