使用stm32f103zet6 PB3为adc引脚使用adc2进行读取ad程序
时间: 2024-05-01 14:16:06 浏览: 107
【stm32程序】基于stm32f103ze的ADC采集程序
以下是使用 PB3 作为 ADC2 输入引脚进行 ADC 读取的示例代码,供参考:
```c
#include "stm32f10x.h"
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
// 使能 ADC2 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE);
// 配置 PB3 为模拟输入引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 配置 ADC2
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(ADC2, &ADC_InitStructure);
// 配置 ADC2 触发源为软件触发
ADC_ExternalTrigConvCmd(ADC2, DISABLE);
// 配置 ADC2 触发源为软件触发
ADC_SoftwareStartConvCmd(ADC2, ENABLE);
// 等待转换完成
while(ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC) == RESET);
// 读取 ADC2 转换结果
uint16_t adc_value = ADC_GetConversionValue(ADC2);
return 0;
}
```
需要注意的是,STM32F103C8T6 只有一个 ADC,因此使用 ADC2 时需要禁用 ADC1。另外,ADC 转换过程需要一定时间,需要等待转换完成后再读取转换结果。
阅读全文