STM32CubeMX学习(二) USB CDC 双向通信

您所在的位置:网站首页 正点原子usb鼠标实验 STM32CubeMX学习(二) USB CDC 双向通信

STM32CubeMX学习(二) USB CDC 双向通信

2024-07-15 06:38:07| 来源: 网络整理| 查看: 265

STM32CubeMX学习(二) USB CDC 双向通信 简介CubeMX新建工程(串口+LED)测试串口和LED串口接收测试USB CDC通信

简介

利用正点原子F407探索者开发板,测试基于USB CDC的双向数据通信。

CubeMX新建工程(串口+LED)

设置时钟源 在这里插入图片描述 在这里插入图片描述

设置调试器 在这里插入图片描述 设置LED 在这里插入图片描述 设置串口 在这里插入图片描述 设置USB OTG 在这里插入图片描述 在这里插入图片描述

Pinout预览 在这里插入图片描述 工程管理 在这里插入图片描述 在上图里,可以把Heap Size和Stack Size改大点,使得USB数据通信更流畅。

在这里插入图片描述 选中红框里的选项主要是为了工程打包后给他人直接使用。

最后点击GENERATE CODE生成工程。

测试串口和LED

在usart.h中引入头文件stdio.h

/* USER CODE BEGIN Includes */ #include "stdio.h" //引入此文件,为重定向printf /* USER CODE END Includes */

在usart.c中添加重定向代码

/* USER CODE BEGIN 1 */ // 重定向printf函数 int fputc(int ch,FILE *f) { uint8_t temp[1]={ch}; HAL_UART_Transmit(&huart1,temp,1,2); return 0; } /* USER CODE END 1 */

为了方便调试,在main.c中加入以下宏定义

/* USER CODE BEGIN PD */ #define USER_MAIN_DEBUG #ifdef USER_MAIN_DEBUG #define user_main_printf(format, ...) printf( format "\r\n",##__VA_ARGS__) #define user_main_info(format, ...) printf("main.info:" format "\r\n",##__VA_ARGS__) #define user_main_debug(format, ...) printf("main.debug:" format "\r\n",##__VA_ARGS__) #define user_main_error(format, ...) printf("main.error:" format "\r\n",##__VA_ARGS__) #else #define user_main_printf(format, ...) #define user_main_info(format, ...) #define user_main_debug(format, ...) #define user_main_error(format, ...) #endif /* USER CODE END PD */

在main.c中添加代码

/* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ printf("Enter main while loop!\r\n"); user_main_debug("Main debug!\n"); HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET); HAL_Delay(500); HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET); HAL_Delay(500); } /* USER CODE END 3 */

设置下载后自动运行,编译运行,连接串口调试助手,观察现象 在这里插入图片描述 编译下载后,重启发现LED1(绿灯)在闪烁,串口收到字符数据。

如果程序没有反应或者仿真后发现程序一直卡死在 BEAB BKPT 0xAB,解决方法:MDK选择设置,TARGET ,勾选Use MicroLIB 在这里插入图片描述

串口接收

在usbd_cdc_if.c中,有发送函数和接收函数。发送函数CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)不需要修改,接收函数CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)需要修改再使用。 在usbd_cdc_if.c中定义变量

/* USER CODE BEGIN PV */ /* Private variables ---------------------------------------------------------*/ unsigned char CDC_Receive_Buffer[64]; //数据缓冲区数组的大小可以根据你想要的收发的数据大小变更 unsigned char CDC_Receive_Length; /* USER CODE END PV */

修改CDC_Receive_FS函数

static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) { /* USER CODE BEGIN 6 */ memcpy(CDC_Receive_Buffer, Buf, *Len); CDC_Receive_Length = *Len; USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]); USBD_CDC_ReceivePacket(&hUsbDeviceFS); return (USBD_OK); /* USER CODE END 6 */ } 测试USB CDC通信

在main.c中,添加如下代码:

... /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "usart.h" #include "usb_device.h" #include "gpio.h" ... /* USER CODE BEGIN PV */ unsigned char CDC_Transmit_Buffer[64] = {1,2,3,4,5,6,7,8,9,}; //USB发送缓存 unsigned char CDC_Transmit_Count = 0;//USB发送数据计数 extern unsigned char CDC_Receive_Buffer[]; extern unsigned char CDC_Receive_Length; extern uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len); /* USER CODE END PV */ ... int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); MX_USB_DEVICE_Init(); while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ CDC_Transmit_FS(CDC_Transmit_Buffer, 64); HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET); HAL_Delay(500); CDC_Transmit_FS(CDC_Receive_Buffer,CDC_Receive_Length); HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET); HAL_Delay(500); } /* USER CODE END 3 */ }

编译后下载,点击发送按钮,测试结果如下图: 在这里插入图片描述

Bus Hound捕获情况如下: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭