本帖最后由 喂什么玩意 于 2024-6-1 00:16 编辑
示例ADC初始化函数的基本结构:
c
void ADC_Init(void) {
ADC_HandleTypeDef adc_handle;
ADC_ChannelConfTypeDef adc_channel_config;
// 1. 初始化ADC外设结构体
adc_handle.Instance = ADCx; // ADCx为具体的ADC外设(例如:ADC1、ADC2等)
adc_handle.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; // ADC时钟预分频
adc_handle.Init.Resolution = ADC_RESOLUTION_12B; // ADC分辨率
adc_handle.Init.ScanConvMode = DISABLE; // 禁用扫描模式
adc_handle.Init.ContinuousConvMode = DISABLE; // 禁用连续转换模式
adc_handle.Init.DiscontinuousConvMode = DISABLE; // 禁用不连续转换模式
adc_handle.Init.NbrOfDiscConversion = 0; // 不连续转换模式下的转换个数
adc_handle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; // 外部触发源的触发边缘
adc_handle.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 外部触发源
adc_handle.Init.DataAlign = ADC_DATAALIGN_RIGHT; // ADC数据对齐方式
adc_handle.Init.NbrOfConversion = 1; // 转换的通道数
// 2. 初始化ADC外设
HAL_ADC_Init(&adc_handle);
// 3. 配置ADC通道
adc_channel_config.Channel = ADC_CHANNEL_x; // ADC_CHANNEL_x为具体的ADC通道(例如:ADC_CHANNEL_0、ADC_CHANNEL_1等)
adc_channel_config.Rank = ADC_REGULAR_RANK_1; // 转换的排列序号
adc_channel_config.SamplingTime = ADC_SAMPLETIME_480CYCLES; // 采样时间
HAL_ADC_ConfigChannel(&adc_handle, &adc_channel_config);
}
|