STM32F103C8T6 ADC1 采样程序:高速连续采样与低速规则采样
STM32F103C8T6 ADC1 采样程序:高速连续采样与低速规则采样
本程序使用STM32F103C8T6芯片的ADC1完成ADC采样任务,实现通道1高速连续采样(周期小于10us)和通道2低速规则采样(周期50ms)。
程序要求
- 通道1: 连续转换,周期在10us以内,可以使用注入通道
- 通道2: 50ms转换一次,优先级不高,甚至100ms转换一次也是可以接受的,可以使用规则通道
程序示例
#include "stm32f10x.h"
void ADC1_Init(void);
void ADC1_Start(void);
volatile uint16_t ch1_result = 0;
volatile uint16_t ch2_result = 0;
int main(void) {
ADC1_Init();
while (1) {
ADC1_Start();
// 等待ADC转换完成
while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
// 获取转换结果
ch1_result = ADC_GetConversionValue(ADC1);
// 延时50ms
for (int i = 0; i < 5000; i++) {
for (int j = 0; j < 7200; j++) {
asm("nop");
}
}
// 再次开始ADC转换
ADC1_Start();
// 等待ADC转换完成
while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
// 获取转换结果
ch2_result = ADC_GetConversionValue(ADC1);
}
}
void ADC1_Init(void) {
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
// 使能ADC1时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
// 使能GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 配置ADC1通道1引脚(PA1)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// ADC1配置为独立工作模式
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
// ADC1时钟选择为PCLK2的8分频,即9MHz
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
// 配置ADC1规则通道1,采样时间为55.5个时钟周期
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
// 使能ADC1
ADC_Cmd(ADC1, ENABLE);
// ADC1校准
ADC_ResetCalibration(ADC1);
while (ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while (ADC_GetCalibrationStatus(ADC1));
}
void ADC1_Start(void) {
// 启动ADC1规则转换
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
代码说明
这段程序设置了ADC1通道1为连续转换模式,周期不超过10us,使用了规则通道进行转换。同时,在主循环中,每隔50ms进行一次ADC转换,获取通道1和通道2的转换结果。
- 通道1: 使用ADC1的规则通道,设置连续转换模式,并通过
ADC_SampleTime_55Cycles5设置采样时间,确保转换周期在10us以内。 - 通道2: 在主循环中,每隔50ms使用
ADC_SoftwareStartConvCmd启动ADC转换,获取转换结果。
注意
- 此示例程序仅供参考,您可能需要根据您的具体需求进行修改和优化。
- 需要根据您的实际硬件连接情况,适当修改GPIO引脚的配置。
- 为了更好地理解程序,建议您参考STM32F103C8T6的参考手册。
总结
本程序实现了STM32F103C8T6芯片的ADC1高速连续采样和低速规则采样的功能,并提供了详细的代码说明。希望本程序能够帮助您更好地理解和应用STM32F103C8T6的ADC功能。
原文地址: https://www.cveoy.top/t/topic/br7E 著作权归作者所有。请勿转载和采集!