学习下ADC采样,在ADC_IN13引脚上接电位器,旋转电位器,调整采样电压。
一、硬件部分
1.1、使用STM8CubeMX来配置引脚功能
1.2、硬件连接图
二、程序部分
2.1、ADC程序
- //adc.c
- #include "stm8l15x.h"
- //ADC初始化
- void adc_init(void)
- {
- ADC_DeInit(ADC1);
-
- CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
- ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ADC_Prescaler_2);
- ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);
- ADC_Cmd(ADC1, ENABLE);
- ADC_SchmittTriggerConfig(ADC1, ADC_Channel_13, DISABLE);
- ADC_ChannelCmd(ADC1, ADC_Channel_13, ENABLE);
- ADC_SoftwareStartConv(ADC1);
- }
- //读取ADC转换值
- uint16_t read_adc_result(void)
- {
- uint16_t ADCData;
-
- while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == 0)
- {}
-
- ADCData = ADC_GetConversionValue(ADC1);
-
- return ADCData;
- }
- //adc.h
- #ifndef __ADC_H
- #define __ADC_H
- void adc_init(void);
- uint16_t read_adc_result(void);
- #endif
复制代码 2.2、主程序
- void main(void)
- {
- uint16_t ad13=0;
-
- CLK_Config(); //时钟初始化
-
- Delay(0x2fffff); //延时5S
- uart_init_halfduplex(); //串口初始化
- adc_init();
-
- while (1)
- {
- ad13=read_adc_result();
- printf("\r\n ADC 采样值 ad= 0x%x ",ad13);
- Delay(0xfffff);
- }
- }
复制代码
三、执行结果
串口输出采样的电压值:
|