要使用STM8的AD转换功能,需要先进行以下步骤:

  1. 初始化模拟输入引脚
GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_IN_FL_NO_IT); //PD2作为模拟输入引脚
  1. 配置ADC
ADC1_DeInit(); //重置ADC1
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_2, ADC1_PRESSEL_FCPU_D18, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL2, DISABLE); //使用连续转换模式,采集PD2的模拟信号,时钟预分频为FCPU/18,使用TIM触发,对齐方式为右对齐,关闭通道2的施密特触发器
ADC1_Cmd(ENABLE); //使能ADC1
ADC1_StartConversion(); //启动ADC1转换
  1. 循环读取ADC数据
while (1) {
    if (ADC1_GetFlagStatus(ADC1_FLAG_EOC)) { //等待转换完成
        uint16_t adcValue = ADC1_GetConversionValue(); //获取转换值
        //处理转换值
        ADC1_ClearFlag(ADC1_FLAG_EOC); //清除转换完成标志位
    }
}

完整代码示例:

#include <stm8s.h>

int main() {
    GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_IN_FL_NO_IT); //PD2作为模拟输入引脚

    ADC1_DeInit(); //重置ADC1
    ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_2, ADC1_PRESSEL_FCPU_D18, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL2, DISABLE); //使用连续转换模式,采集PD2的模拟信号,时钟预分频为FCPU/18,使用TIM触发,对齐方式为右对齐,关闭通道2的施密特触发器
    ADC1_Cmd(ENABLE); //使能ADC1
    ADC1_StartConversion(); //启动ADC1转换

    while (1) {
        if (ADC1_GetFlagStatus(ADC1_FLAG_EOC)) { //等待转换完成
            uint16_t adcValue = ADC1_GetConversionValue(); //获取转换值
            //处理转换值
            ADC1_ClearFlag(ADC1_FLAG_EOC); //清除转换完成标志位
        }
    }
}
用STM8 AD写法

原文地址: https://www.cveoy.top/t/topic/zNS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录