使用STM32标准库写出STM32F103ZET6的ADC123_IN13也就是PC3的模拟量采集
时间: 2024-05-01 13:16:29 浏览: 227
基于STM32的多路模拟量数据采集设计说明.docx
以下是使用STM32标准库写出STM32F103ZET6的ADC123_IN13也就是PC3的模拟量采集的代码:
```c
#include "stm32f10x.h"
int main(void)
{
// 初始化ADC
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
// 使能ADC1时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
// 使能GPIOC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
// 配置PC3为模拟输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// 配置ADC参数
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_13, 1, ADC_SampleTime_1Cycles5);
// 使能ADC
ADC_Cmd(ADC1, ENABLE);
// 等待ADC稳定
ADC_ResetCalibration(ADC1);
while (ADC_GetResetCalibrationStatus(ADC1))
{
}
ADC_StartCalibration(ADC1);
while (ADC_GetCalibrationStatus(ADC1))
{
}
while (1)
{
// 开始转换
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
// 等待转换完成
while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC))
{
}
// 读取转换结果
uint16_t adc_value = ADC_GetConversionValue(ADC1);
// 处理采集到的数据
// ...
// 延时
for (int i = 0; i < 100000; i++)
{
}
}
}
```
在以上代码中,我们首先初始化了ADC和GPIO,然后配置了PC3为模拟输入通道。接着配置了ADC的参数和通道,使能ADC,并等待ADC稳定。在主循环中,我们开始转换并等待转换完成,然后读取转换结果并进行处理。最后进行简单的延时操作。
阅读全文