野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

2023-06-06 21:47:21    来源:博客园

MCU:STM32F103VET6

开发环境:STM32CubeMX+MDK5

实现USB的虚拟串口不需要去理解USB的底层驱动,只需要STM32CubeMX去配置生成工程即可。在野火的指南者中,是没有这一类的视频和示例的,博主使用这款开发板实现USB虚拟串口。


(相关资料图)

首先需要打开STM32CubeMX工具。输入开发板MCU对应型号,找到开发板对应封装的MCU型号,双击打开(图中第三)。

此时,双击完后会关闭此界面,然后打开一个新界面。

然后,我们开始基本配置。

现在我们选择一个LED作为系统LED,该步骤可以忽略,只是本人喜欢这样子。以硬件原理图的绿灯为例子。

基本配置除了时钟树外,基本上已经配置好了。

现在来配置USB_Device。STM32F1系列USB只支持USB_Device。

选中USB类型后,还需要细化其中的类型。

一切配置都是基于硬件原理图的。硬件配置除常规配置外,还是需要看硬件原理图的。在硬件原理图中,可以看到只有PD6拉低时,USB才使能。(针对野火指南者开发板)

现在配置时钟树

配置完成,完善工程,生成工程。

到此,STM32CubeMX工具的使用结束!可以发现在桌面已经生成了USB_VPC工程。

USB虚拟串口还需要装驱动才能被是识别到,在Win7、Win8机型PC中需要到ST官网下载。win10及以上机型在本地已有驱动,无需安装。

使用MDK5打开USB_VPC工程打开。点击魔法棒,勾选微库。选择对应的下载器,勾选下载完复位允许。USB线一端接开发板USB_Device,一端接PC。

现在可以开始实验了,实现VPC的发送与回传,并重定向printf函数。

在此之前,简单描述一下生成的USB文件以及重要函数。

然后再插播一条,看帖子说是,刚下载完程序时,是识别不出端口的。需要在上电的情况下从PC那拔插一次USB线。然后可以使用一个函数解决这个问题。可以在gpio.c中写入函数,然后记得在头文件声明。使用要在MX_USB_DEVICE_Iint()之前。

(我没遇到这个问题,但是我还是放到工程了,但是我没用这函数。)

1 /* USER CODE BEGIN 2 */ 2 /*USB 重新枚举函数*/ 3 void USB_Reset(void) 4 { 5     GPIO_InitTypeDef GPIO_InitStruct = {0}; 6      7     __HAL_RCC_GPIOA_CLK_ENABLE(); 8      9     GPIO_InitStruct.Pin = GPIO_PIN_12;10     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;11     GPIO_InitStruct.Pull = GPIO_NOPULL;12     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;13     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);14     15     HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_RESET);16     HAL_Delay(100);17     HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_SET);18 }19 /* USER CODE END 2 */

实验环节:发送与回传

在main.c中(截取片段,修改部分)

1 /* Private includes ----------------------------------------------------------*/ 2 /* USER CODE BEGIN Includes */ 3 #include "usbd_cdc_if.h" 4 /* USER CODE END Includes */ 5  6 /* Private typedef -----------------------------------------------------------*/ 7 /* USER CODE BEGIN PTD */ 8  9 /* USER CODE END PTD */10 11 /* Private define ------------------------------------------------------------*/12 /* USER CODE BEGIN PD */13 /* USER CODE END PD */14 15 /* Private macro -------------------------------------------------------------*/16 /* USER CODE BEGIN PM */17 18 /* USER CODE END PM */19 20 /* Private variables ---------------------------------------------------------*/21 22 /* USER CODE BEGIN PV */23 24 /* USER CODE END PV */25 26 /* Private function prototypes -----------------------------------------------*/27 void SystemClock_Config(void);28 /* USER CODE BEGIN PFP */29 30 /* USER CODE END PFP */31 32 /* Private user code ---------------------------------------------------------*/33 /* USER CODE BEGIN 0 */34 35 /* USER CODE END 0 */36 37 /**38   * @brief  The application entry point.39   * @retval int40   */41 int main(void)42 {43   /* USER CODE BEGIN 1 */44     char str[] = "Hello World!\r\n";45   /* USER CODE END 1 */46 47   /* MCU Configuration--------------------------------------------------------*/48 49   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */50   HAL_Init();51 52   /* USER CODE BEGIN Init */53 54   /* USER CODE END Init */55 56   /* Configure the system clock */57   SystemClock_Config();58 59   /* USER CODE BEGIN SysInit */60 //    USB_Reset();61   /* USER CODE END SysInit */62 63   /* Initialize all configured peripherals */64   MX_GPIO_Init();65   MX_USB_DEVICE_Init();66   /* USER CODE BEGIN 2 */67 68   /* USER CODE END 2 */69 70   /* Infinite loop */71   /* USER CODE BEGIN WHILE */72   while (1)73   {74     /* USER CODE END WHILE */75     CDC_Transmit_FS((uint8_t*)str, 14);76     HAL_Delay(2000);77     /* USER CODE BEGIN 3 */78   }79   /* USER CODE END 3 */80 }

在usbd_cdc_if.c中(截取片段,修改部分)

1 /** 2   * @brief  Data received over USB OUT endpoint are sent over CDC interface 3   *         through this function. 4   * 5   *         @note 6   *         This function will issue a NAK packet on any OUT packet received on 7   *         USB endpoint until exiting this function. If you exit this function 8   *         before transfer is complete on CDC interface (ie. using DMA controller) 9   *         it will result in receiving more data while previous ones are still10   *         not sent.11   *12   * @param  Buf: Buffer of data to be received13   * @param  Len: Number of data received (in bytes)14   * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL15   */16 static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)17 {18   /* USER CODE BEGIN 6 */19     CDC_Transmit_FS(Buf, *Len);20     21   USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);22   USBD_CDC_ReceivePacket(&hUsbDeviceFS);23   return (USBD_OK);24   /* USER CODE END 6 */25 }

实验结果(波特率随意选)

实验环节:打印重定向

在usbd_cdc_if.c中(截取片段,修改部分),声明在usbd_cdc_if.h文件。

1 /* USER CODE BEGIN PRIVATE_FUNCTIONS_IMPLEMENTATION */ 2 #include "stdarg.h" 3 #include "stdio.h" 4  5 uint8_t usbtemp[64]; 6 void usbvcom_printf(const char *format,...) 7 { 8     uint16_t     len; 9     va_list     args;10     11     va_start(args, format);12     len = vsnprintf((char *)usbtemp, sizeof(usbtemp)+1, (char *)format, args);13     va_end(args);14     15     CDC_Transmit_HS(usbtemp, len);16 }17 18 /* USER CODE END PRIVATE_FUNCTIONS_IMPLEMENTATION */

然后就可以像printf那样使用了,实测过是正常的!

时代越来越好,开发效率越来越高,希望能帮助到你!!!

还有就是,开源万岁。

关键词:

相关新闻
相关新闻
v 野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC) 2023-06-06
v 看点:商品日报(6月6日):生猪止跌反弹铁矿石盘中涨超3% 尿素跌超3% 2023-06-06
v 股市收评:泥沙俱下!两市仅500余只个股飘红 沪指3200点再度失守后将何去何从? 2023-06-06
v SMM日评:镍铁价格偏稳运行 成交偏少后双方报价僵持 全球时快讯 2023-06-06
v 哪些银行办信用卡不需要工作证明 哪些信用卡要求少 2023-06-06
v 四川洪雅县法学会市场监督管理研究会召开第一次会员代表大会 世界报资讯 2023-06-06
v 河北宁晋:质量基础设施“一站式”服务促发展 2023-06-06
v 易瑞生物:特定股东林季敏减持计划期限届满未减持 拟继续减持不超100万股公司股份 2023-06-06
v 【全球快播报】带刀女捕快演员表钟子乐_带刀女捕快演员表 2023-06-06
v 广西新闻网 2010年起火_2010年十大新闻 世界最新 2023-06-06
v 我的男友一千岁 下载_我的男友一千岁 热推荐 2023-06-06
v 世界热头条丨23厘米等于多少毫米 2023-06-06
v only time will tell翻译_only time 2023-06-06
v 退休后如何存钱收益高?老人银行存款注意事项? 2023-06-06
v 小额贷款3000左右哪个app好用?这10个低息好用好下款适合小额应急 天天热消息 2023-06-06
v 头条:买20年利息高的理财好还是买终身寿险好?从风险、亮点和适合人群来看 2023-06-06
v 水投集团再度增持重庆银行3574万股 股比已升至8% 2023-06-06
v 每日热文:国内外大咖汇聚大湾区疫苗峰会 共探免疫科学未来趋势 2023-06-06
v 隆基绿能:签订年产20GW单晶硅棒、24GW单晶电池及配套项目投资协议 2023-06-06
v 巨湾技研发布凤凰电池技术 可实现全气候全电压平台极速充电 2023-06-06
v 【焦点热闻】友邦智选康惠2023团体医疗保险保什么?是真的吗? 2023-06-06
v 世界快消息!啤酒一升是多少斤_一升是多少斤 2023-06-06
v 心怎么折教程_心怎么折 2023-06-06
v 【全球速看料】聊城安全教育平台官网_聊城安全教育平台 2023-06-06
v 手机qq如何取消密保手机绑定_qq怎么取消密保手机绑定 2023-06-06
v 天天要闻:既又还是即又_既又 2023-06-06
v 中金:首予珍酒李渡(06979)“跑赢行业”评级 目标价11港元 2023-06-06
v 世界时讯:联想集团(00992)增设人民币柜台 2023-06-06
v 青山刚昌手绘柯南_青山刚昌终于透露了柯南结局 2023-06-06
v 朗逸plus钥匙怎么更换电池_朗逸plus车钥匙怎么换电池? 天天聚看点 2023-06-06

种植基地网 版权所有©未经书面授权禁止复制或建立镜像
京ICP备2022022245号-33
联系我们: 435 226 40@qq.com