ADC概念

  • 将特定的一些引脚配置成模拟模式。它和UART、SPI那种数字复用不完全一样。
    • 关闭数字输入施密特触发器;
    • 关闭输出驱动器;
    • 关闭上下拉;
    • 让引脚电压直接进入ADC的模拟多路开关。
  • 单通道配置流程
    1. 使能GPIO和ADC时钟;
    2. 把对应GPIO配置为模拟模式;
    3. 在ADC规则序列或注入序列里写入要转换的通道号;
    4. 设置采样时间;
    5. 启动ADC转换;
    6. ADC内部采样该通道对应的引脚电压,进行逐次逼近转换;
    7. 结果存到 ADC_DR 或 ADC_JDRx。
  • 多通道时要注意

    一个ADC只有一个规则数据寄存器 ADC_DR。如果你扫描多个通道:

    • 通道0转换完,结果进 ADC_DR;
    • 通道1转换完,新结果会覆盖 ADC_DR;
    • 所以多通道扫描通常要配合 DMA,把每次结果自动搬到内存数组。
  • 多ADC情况

    一些MCU有多个ADC,ADC1、ADC2、ADC3。他们有各自的数据寄存器。另有少量共用的寄存器比如,ADC 时钟预分频,多重模式配置,双重/三重模式的数据寄存器等。

  • 搬运到内存

    三种方式:

    • 轮询:CPU 查 EOC,读 DR;
    • 中断:转换完成中断里读 DR;
    • DMA:最常用。DMA 把 &ADC3->DR 自动搬到内存数组。

    多通道扫描时,后一个通道会覆盖 DR,所以必须用 DMA 或及时读走。