stm32cube的io的analog输入读取代码
时间: 2024-10-07 13:01:38 浏览: 15
STM32Cube库提供了一套丰富的API来处理STM32系列微控制器的IO口,包括模拟输入读取。以下是一个简单的示例,展示如何使用HAL库在STM32F103C8T6上通过ADC进行模拟输入读取:
```c
#include "stm32f1xx_hal.h"
#include "adc_ex.h"
// 假设ADC1通道1用于模拟输入
ADC_HandleTypeDef adcHandle;
void MX_ADC_Init(void)
{
ADC_ChannelConfTypeDef sConfig = {0};
// 初始化ADC
ADC_Init(&adcHandle);
HAL_ADC_MspInit(&adcHandle);
// 配置ADC1的单次转换模式
sConfig.Channel = ADC_CHANNEL_1;
sConfig.Rank = 1; // 单通道测量
sConfig.SamplingTime = ADC_SAMPLETIME_7CYCLES_5; // 采样时间选择
HAL_ADC_ConfigChannel(&adcHandle, &sConfig);
// 开启ADC
HAL_ADC_Start(&adcHandle);
}
int16_t ReadAnalogInput(void)
{
uint16_t rawValue;
int16_t convertedValue;
// 等待ADC转换完成
while (HAL_ADC_GetState(&adcHandle) != HAL_ADC_STATE Ready);
// 获取ADC的结果
HAL_ADC_PollForConversion(&adcHandle, 100); // 等待最多100ms
if (HAL_ADC_GetResult(&adcHandle) == HAL_OK)
{
// 将12位值转换成16位整数
rawValue = ADC(handle)->DR;
convertedValue = ((int16_t)rawValue << 4); // 右移四位,因为ADC值通常右对齐
return convertedValue;
}
else
{
return -1; // 转换失败,返回错误码
}
}
阅读全文