因为移植一包STM32的程序,要用到USB-CDC功能,和arm-none-eabi-gcc编译器。随发现STM32CubeMX产生的CDC底包,在STM32F4xx上面,有问题。 先看看问题: 用STM32CubeMX,开一套F407的CDC(VCP)程序,分别用MDK和SW4STM32产生底包。 只加了一条打印语句CDC_TransmitFS(),发送HelloWorld字串到PC串口。 编译结果,MDK的一切正常。 SW4STM32的,PC端有VCP串口但是打不开,当然也收不到MCU的发送。 看来STM32CubeMX产生的底包,有Bug!!! 上面一样的做法,在F103的情况下,就都没有问题。 已解决,参考下面的回复。 |
我说的是CubeMX+GCC,你用标准库试来干啥。 请用CubeMX。
同样是CubeMX,F103就没有问题。
刚刚又进行了一些测试,发现问题肯定是发生在最新版的CubeMX+最新版的Fw_F4_v1.25.2之上。
网上找到的旧版的包,就没有这个问题:
https://github.com/vanbwodonk/STM32F407_DFU_BOOT
我今天又测试了一下:
主要集中测试,最新版的CubeMX+最新版的Fw_F4_v1.25.2
MDK-ARM, Advanced, AC6,OK
MDK-ARM, Basic, AC6,OK, 要把Heap加大
TrueSTUDIO, Advanced, GCC, OK,需要修改
TrueSTUDIO, Basic, GCC, OK,需要修改
问题是,PC可以枚举成功串口,可是打不开串口,用打印语句CDC_TransmitFS()发送字串到PC当然也不行。
参考下面的,修改usbd_cdc_if.c,TrueSTUDIO的问题基本解决,不知道为什么MDK的code就不要这样修改:
https://stackoom.com/question/3w ... 0%E9%97%AE%E9%A2%98
https://stackoverflow.com/questi ... braries-for-stm32f4
搞掂了。 参考上面的链接,增加linecoding的定义就可以了。
但还是留下来悬念,同是CubeMX产生的代码,MDK就不需要修改。
GCC的(SW4STM32,TrueSTUDIO,Makefile,等)都需要对应修改。 这以后就麻烦了, 慎用GCC?