STMicroelectronics Virtual COM Port 经验

采用 STM32CubeMX  配置虚拟串口,出现串口不能正确工作.

原因如下

执行 USBD_CDC_Init 时 

 hcdc = USBD_malloc(sizeof(USBD_CDC_HandleTypeDef)); 分配内存失败,hcdc=0;

 

STMicroelectronics Virtual COM Port 经验_第1张图片

 

问题根源:USBD_malloc 实际 调用 malloc , 见下图

STMicroelectronics Virtual COM Port 经验_第2张图片

 

解决问题有三个方案:

方案1: 在采用了RFREERTOS 的情况下,给FreeRTOS 分配足够的堆空间,然后用 FreeRTOS 的空间分配机制

           改变 #define USBD_malloc         malloc 为

                  #define USBD_malloc         pvPortMalloc

          改      #define USBD_free           free

                   #define USBD_free           vPortFree

方案2: 直接改堆空间 ,在文件 startup_stm32f407xx.s 中

将 Heap_size 改大就行

          STMicroelectronics Virtual COM Port 经验_第3张图片

以上方案都其它问题,

方案3:一个比较好的方案是改为静态分配

STMicroelectronics Virtual COM Port 经验_第4张图片

取消释放

STMicroelectronics Virtual COM Port 经验_第5张图片

你可能感兴趣的:(经验,嵌入式)