用STM8 AD写法
要使用STM8的AD转换功能,需要先进行以下步骤:
- 初始化模拟输入引脚
GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_IN_FL_NO_IT); //PD2作为模拟输入引脚
- 配置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转换
- 循环读取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); //清除转换完成标志位
}
}
}
原文地址: https://www.cveoy.top/t/topic/zNS 著作权归作者所有。请勿转载和采集!