STM32ADC电压电流采样代码
时间: 2024-08-15 11:09:37 浏览: 61
STM32 ADC(Analog-to-Digital Converter)是一种常用的模拟到数字转换器,用于测量输入信号的电压或电流。以下是一个简单的基于STM32F103C8T6的ADC基本电压采样的代码示例,假设我们使用的是12位分辨率,并配置了单通道(PA0):
```c
#include "stm32f10x.h"
// 定义ADC全局变量
ADC_HandleTypeDef AdcHandle;
// 配置ADC参数
void ConfigureADC(void) {
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
// 初始化GPIO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PA0作为ADC输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 设置为浮空输入模式
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 初始化ADC
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // 单独的ADC实例
ADC_InitStructure.ADC_Prescaler = ADC_Prescaler_Div2; // 分频系数为2
ADC_InitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; // 不使用DMA
ADC_InitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_1ConvCycle; // 取样时间1周期
ADC_Init(&AdcHandle, &ADC_InitStructure);
ADC_Cmd(&AdcHandle, ENABLE); // 开启ADC
// 选择需要扫描的通道和启动序列
ADC箔片Init(&AdcHandle, ADC_AnalogueChannel_0); // 选择通道0 (PA0)
}
// 主函数中的采样和处理部分
uint16_t ReadADCValue(void) {
uint16_t adcValue = 0;
ADC箔片Start(&AdcHandle); // 开始转换
while(ADC_GetFlagStatus(&AdcHandle, ADC_FLAG_EOC) == RESET) {} // 等待转换完成
adcValue = ADC_GetConversionValue(&AdcHandle); // 获取转换结果
ADC箔片Stop(&AdcHandle); // 停止转换
return adcValue * (4095 / ADC_MAX_VOLTAGE); // 根据实际供电计算电压值
}
int main(void) {
... // 其他主程序初始化
ConfigureADC(); // 配置ADC
while (1) {
float voltage = ReadADCValue() * 0.0048828125; // 将adcvalue转换成电压并处理
// 打印电压值或做其他操作...
}
return 0;
}
阅读全文