采用 STM32CubeMX 配置虚拟串口,出现串口不能正确工作.
原因如下
执行 USBD_CDC_Init 时
hcdc = USBD_malloc(sizeof(USBD_CDC_HandleTypeDef)); 分配内存失败,hcdc=0;
问题根源:USBD_malloc 实际 调用 malloc , 见下图
解决问题有三个方案:
方案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 改大就行
以上方案都其它问题,
方案3:一个比较好的方案是改为静态分配
取消释放