STM32F042F6P6-USB设备开发最小系统之ADC+CDC(虚拟串口)输出

本蛙技术较菜,功能使用教程一个一个慢慢来,尽量用最简单的方式实现想要的功能(说白了就是多用别人做好写好的库),这次教程是将STM32用CDC方式虚拟一个串口(虚拟串口在电脑串口监视器里选的波特率啥的都是不影响的),然后通过串口向电脑传数据,可以做一些调试的参数输出。用的是STM32F042F6P6最小系统,购买地址:淘宝链接

话不多说,还是用STM32CubeMX来配置工程,在SYS中选择引脚复用,打开USB功能

选择USB设备类型为虚拟串口

会自动配置的时钟

按键和LED配置,之前的鼠标示例中有介绍

设置输出工程参数

生成代码及打开工程

main.c中添加头文件

#include "usbd_cdc_if.h"


添加data字符串,添加CDC发送语句和延时

 uint8_t data[14] = "I love STM32!\n";
 while(CDC_Transmit_FS(data, 14)); //发送data中的数据
 HAL_Delay(500); // 延时500ms


编译并下载到单片机上,插入USB到电脑上,首次使用会自动安装驱动,若安装失败请自行在互联网上搜索STM32虚拟串口驱动,查看设备管理器,会出现一个串口设备

打开电脑上的串口监视器,选择之前对应的串口号,会收到程序中定义的字符串数据

下面添加如下ADC采样的代码,并将ADC采样值通过虚拟串口发送到电脑上,代码修改如下

 /* USER CODE BEGIN 2 */
 uint8_t data[6] = "ADC = ";
 /* USER CODE END 2 */
 /* Infinite loop */
 /* USER CODE BEGIN WHILE */
 while (1)
 {
 /* USER CODE END WHILE */
 /* USER CODE BEGIN 3 */
 uint16_t val;
 uint8_t ADC_data[6] = " ";
 uint16_t x;
 uint8_t temp = 0;
 if (HAL_ADC_Start(&hadc) != HAL_OK)
 {
 /* Start Conversation Error */
 Error_Handler();
 }
 if (HAL_ADC_PollForConversion(&hadc, 10) != HAL_OK)
 {
 /* End Of Conversion flag not set on time */
 Error_Handler();
 }
 val = HAL_ADC_GetValue(&hadc); //ADC取值赋给val
 for(x = 10000; x > 0; x = x / 10) //将ADC值转成字符存到ADC_data中
 if((val / x) >= 1)
 {
 ADC_data[temp] = ((val / x) % 10 + '0');
 temp++;
 }
 }
 if(temp == 0)
 {
 ADC_data[temp] = '0';
 temp++;
 }
 ADC_data[temp] = '\n'; //换行符
 while(CDC_Transmit_FS(data, 6)); //发送data中的数据
 HAL_Delay(12); // 延时12ms
 while(CDC_Transmit_FS(ADC_data, temp + 1)); //发送ADC_data的数据
 HAL_Delay(300); // 延时300ms
 }
 /* USER CODE END 3 */



打开电脑串口监视器即可看到从单片机PA0口检测到的ADC值,范围0~4095。

工程文件(可能需要科学上网才能看到):

2 thoughts on “STM32F042F6P6-USB设备开发最小系统之ADC+CDC(虚拟串口)输出

发表评论

电子邮件地址不会被公开。 必填项已用*标注