stm32f103c8t6adc输入电压代码
时间: 2024-05-16 11:11:12 浏览: 109
STM32F103C8T6开发板实验例程:ADC实验程序源代码.rar
STM32F103C8T6是一款具有12位ADC的微控制器,其输入电压范围为0V到3.6V。以下是一段获取ADC输入电压的示例代码:
```c
#include "stm32f10x.h"
uint16_t ADC_ConvertedValue;
int main(void)
{
//初始化ADC
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
ADC_DeInit(ADC1);
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(ADC1, &ADC_InitStructure);
//配置ADC通道
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
//启动ADC
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
//循环读取ADC输入电压并打印
while (1)
{
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
ADC_ConvertedValue = ADC_GetConversionValue(ADC1);
printf("Input voltage: %f V\n", ((float)ADC_ConvertedValue/4096)*3.6); //4096是12位ADC的量化值
}
}
```
如果需要在代码中获取输入电压,需要通过`ADC_GetConversionValue()`函数获取转换后的数字量,并通过一定的计算将其转换为电压值。在上述代码中,将数字量与3.6(STM32F103C8T6的最大输入电压)相乘后再除以4096(2^12)即可得到输入电压值。
阅读全文