描述:

ADC轮询方式检测+CDC(VCP)传输查看,当按下按键后,ADC转换并发送一次。
HAL_ADC_Start(ADC_HandleTypeDef* hadc); //开启ADC转换

  • * hadc:&hadc

HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout); //等待转换完成

  • * hadc:&hadc
  • Timeout:超时时间

HAL_ADC_GetValue(ADC_HandleTypeDef* hadc); //获取转换值

  • * hadc:&hadc

HAL_ADC_Stop(ADC_HandleTypeDef* hadc); //关闭ADC转换

  • * hadc:&hadc

示例:

配置main.c文件,添加stdio.h头文件。

#include "stdio.h"

根据使用的外设,关闭未使用外设的初始化,这里用(VCP)虚拟串口将ADC转换的值传到电脑上查看,如何配置(VCP)虚拟串口请看教程:USB-VCP虚拟串口数据收发(CDC传输)

 /* Initialize all configured peripherals */
 MX_GPIO_Init(); //初始化GPIO
// MX_I2C1_Init();
// MX_USART2_UART_Init();
 MX_USB_DEVICE_Init(); //初始化USB
 MX_ADC_Init(); //初始化ADC
// MX_TIM2_Init();
// MX_SPI1_Init();
// MX_WWDG_Init();
// MX_IWDG_Init();
// MX_RTC_Init();
// MX_USART1_UART_Init();

编辑主循环程序,检测按键按下进行一次ADC转换和CDC传输。

/* Infinite loop */
/* USER CODE BEGIN WHILE */
uint8_t MyAdcData[5] = ""; //ADC0转换值数组,最高为4095,长度设为5就可以。
uint8_t MyAdcData1[5] = ""; //ADC1转换值数组
uint8_t MyData[7] = "ADC0 = "; //头字符串0
uint8_t MyData1[7] = "ADC1 = "; //头字符串1
while (1)
{
 if(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin)) //检测按键
 {
  HAL_ADC_Start(&hadc); //开始转换
  HAL_ADC_PollForConversion(&hadc, 100); //等待转换完成
  /*ADC1通道取值并转换成字符串到MyAdcData数组*/
  sprintf((char*)MyAdcData, "%d\n", (uint16_t)HAL_ADC_GetValue(&hadc));
  /*ADC1通道取值并转换成字符串到MyAdcData1数组*/
  sprintf((char*)MyAdcData1, "%d\n", (uint16_t)HAL_ADC_GetValue(&hadc));
  HAL_ADC_Stop(&hadc); //结束转换
  while(CDC_Transmit_FS(MyData, 7)); //发送ADC0头字符串“ADC0 = ”
  while(CDC_Transmit_FS(MyAdcData, sizeof(MyAdcData))); //发送ADC0数据
  while(CDC_Transmit_FS(MyData1, 7)); //发送ADC1头字符串
  while(CDC_Transmit_FS(MyAdcData1, sizeof(MyAdcData1))); //发送ADC1数据
  for(int x = 0; x < 5; x++) //清除缓存数据
  {
   MyAdcData[x] = 0x00;
   MyAdcData1[x] = 0x00;
  }
  HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); //闪灯提示
  HAL_Delay(20);
  HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
  while(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin)); //等待松开按键
 }
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */

接上电脑,打开串口监视软件,将电位器或其它模拟器件接入到板子的PA0/PA1引脚,按下按键,串口监视软件就会输出检测的值,0~3.3V对应输出值为0~4095。


以上示例针对eefrog的STM32F042G模块,根据STM32cubeMX综合配置基础上设计,不保证在其它模块上有同样效果。