描述:
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综合配置基础上设计,不保证在其它模块上有同样效果。