使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为ADC的基本使用。

1 新建项目

  • 建立adc项目

在PIO的Home页面新建项目,项目名称adc,选择开发板为 MonkeyPi_STM32_G070RB,开发框架选择libopencm3;

  • 项目建立完成后在src目录下新建main.c主程序文件;
  • 修改下载和调试方式,这里开发板使用的是DAPLink仿真器,因此修改platformio.ini文件如下:
1
2
upload_protocol = cmsis-dap
debug_tool = cmsis-dap

2 编写程序

2.1 ADC配置

这里配置PA0引脚为ADC输入,为ADC_IN0通道,设置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void adc_setup()
{
rcc_periph_clock_enable(RCC_GPIOA);
rcc_periph_clock_enable(RCC_ADC);

gpio_mode_setup(GPIOA,GPIO_MODE_ANALOG,GPIO_PUPD_NONE,GPIO0);

adc_power_off(ADC1);
adc_set_clk_prescale(ADC1,ADC_CCR_PRESC_DIV2);
adc_set_single_conversion_mode(ADC1);
adc_set_right_aligned(ADC1);
adc_set_sample_time_on_all_channels(ADC1,ADC_SMPTIME_160DOT5);
uint8_t channel = 0;
adc_set_regular_sequence(ADC1,1,&channel);
adc_set_resolution(ADC1,ADC_CFGR1_RES_12_BIT);

adc_power_on(ADC1);

adc_start_conversion_regular(ADC1);

}
2.2 ADC读取
1
2
adc_start_conversion_regular(ADC1);
uint32_t adc_value = adc_read_regular(ADC1);
  • 先使用 adc_start_conversion_regular 开始转换;
  • 在使用 adc_read_regular 函数读取ADC数值;

3 烧写测试

将程序烧写到开发板后,打开串口可以看到ADC值,在PA0引脚输入不同电压,ADC随之变化: