[STM32U3] 示例ADC初始化函数的基本结构

[复制链接]
415|17
xia00 发表于 2025-11-12 22:30 | 显示全部楼层 |阅读模式
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);
}

hfdy01 发表于 2025-11-12 22:37 | 显示全部楼层
衷心的感谢楼主热情的分享,好人一生吉祥如意。
boy1990 发表于 2025-11-12 22:47 | 显示全部楼层
使用HAL_ADC_Init()函数初始化了ADC外设。
sourceInsight 发表于 2025-11-12 22:57 | 显示全部楼层
包括所选通道、转换排列序号和采样时间,使用HAL_ADC_ConfigChannel()函数完成配置。
feiqi1 发表于 2025-11-12 23:00 | 显示全部楼层
在实际应用中,你需要根据具体的需求来配置和调整这些参数。
androidbus 发表于 2025-11-12 23:05 | 显示全部楼层
你可以选择合适的分辨率、采样时间和转换模式,以满足你的应用要求。
litengg 发表于 2025-11-12 23:06 | 显示全部楼层
初始化过程中涉及的主要参数包括采样分辨率、采样周期、转换模式等。
qiangweii 发表于 2025-11-12 23:10 | 显示全部楼层
除了配置 ADC 的硬件参数外,还需要配置中断、DMA 或者其他需要的外设,以便实现实时数据采集。
回复收藏 举报
shashaa 发表于 2025-11-12 23:12 | 显示全部楼层
ADC 的初始化通常会使用 HAL_ADC_Init() 函数,它会根据你在结构体中设置的参数来完成初始化工作。
bbapple 发表于 2025-11-12 23:14 | 显示全部楼层
是不是已经配置了 ADC 的时钟了?
handleMessage 发表于 2025-11-12 23:15 | 显示全部楼层
一般来说,STM32F4 的 ADC 模块需要高于 1 MHz 的时钟才能正常工作。
zhouhuanの 发表于 2025-11-12 23:18 | 显示全部楼层
别忘了配置 ContinuousConvMode 和 ScanConvMode
wanglaojii 发表于 2025-11-12 23:18 | 显示全部楼层
配置 ContinuousConvMode 和 ScanConvMode,ADC 会自动进行循环转换。
laozhongyi 发表于 2025-11-12 23:20 | 显示全部楼层
DMA 可以大大减少 MCU 的负担,并提高采集效率。
Edisons 发表于 2025-11-12 23:21 | 显示全部楼层
还需要设置采样时间(SamplingTime),因为采样时间直接影响测量的精度和转换速度。
_gege 发表于 2025-11-12 23:24 | 显示全部楼层
如果选择不同的通道进行不同传感器的测量时,需要更新 ADC 的输入通道配置。
Mozarts 发表于 2025-11-12 23:25 | 显示全部楼层
要选择 ADC 的工作模式,例如是单次转换或连续转换。
EPTmachine 发表于 2025-11-13 07:33 来自手机 | 显示全部楼层
现在都是使用cubemx生成代码,阅读代码可以了解参数的含义
您需要登录后才可以回帖 登录 | 注册

本版积分规则

183

主题

1876

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部