stm32f103c8t6adc采集电压代码
时间: 2023-06-20 18:10:23 浏览: 105
以下是一个基本的ADC电压采集代码,可以根据自己的需求进行修改:
```
#include "stm32f10x.h"
void ADC1_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟
ADC_InitTypeDef ADC_InitStructure;
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; //1个通道
ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC1
ADC_Cmd(ADC1, ENABLE); //使能ADC1
}
u16 Get_ADC(u8 ch) //ch:通道编号(0~15)
{
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_55Cycles5); //配置ADC1的通道ch,采样时间为55.5周期
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC )); //等待转换结束
return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果
}
int main(void)
{
ADC1_Init(); //初始化ADC1
while(1)
{
u16 adc_value = Get_ADC(0); //采集通道0的电压值
float voltage = adc_value * (3.3 / 4096); //计算电压值
printf("Voltage value: %.2fV\r\n", voltage); //输出电压值
delay_ms(500); //延时500ms
}
}
```
注意:以上代码仅供参考,具体实现方式需要根据自己的实际情况进行调整。同时,需要根据自己的硬件电路连接情况来确定采集的通道编号。
阅读全文