STM32ADC采集传感器电压代码
时间: 2023-12-20 19:52:34 浏览: 80
STM32-AD-CARD.rar_STM32F103RB 代码_STM32完整工程_ad_stm32 数据采集_stm32f
可以通过以下代码实现:
```c
#include "stm32f4xx.h"
void ADC_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
// 先启用 GPIO 时钟并设置为模拟输入模式
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PC0 对应的 ADC1 通道10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; // 模拟输入模式
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // 不带上下拉电阻
GPIO_Init(GPIOC, &GPIO_InitStructure);
// 启用 ADC 时钟并设置 ADC
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
// 根据默认值配置 ADC
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 1;
ADC_Init(ADC1, &ADC_InitStructure);
// 开启 ADC 并校准
ADC_Cmd(ADC1, ENABLE);
ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_3Cycles);
ADC_SoftwareStartConv(ADC1); // 启动转换
}
int ADC_read(void)
{
while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); // 等待转换完成
return ADC_GetConversionValue(ADC1); // 返回 ADC 数值
}
int main(void)
{
ADC_init();
while (1)
{
int val = ADC_read();
// 处理 val ...
}
return 0;
}
```
这是一个简单的采集传感器电压的示例代码,其中 ADC1 的 CH10 转换引脚与传感器相连,传感器的电压会被转换成 12 位数字量以供使用。你可以根据实际需要进行修改和扩展。希望能帮到你。
阅读全文