最近在调GD32F350的USB Device,发现官方库调不通,存在几处bug,在此分享一下(适合于使用IAR 8.x或者喜欢开高优化等级的朋友),最后希望官方早日更新固件库1.usb_delay.c中delay_num变量声明前加__IO(__IO uint32_t delay_num = 0;)
2.usb_core.h中127、182行前加__IO(__IO uint8_t status;__IO uint8_t connect_status;)
3.usbd_std.h中45行改为#define _WIDE_STRING(string) u##string
4.usbd_std.h中51行改为uint16_t _data[sizeof(string)]; \
楼主帅气,
能否找到BUG 真是用心。 库文件的定时占用掉了TIMER0 而且是阻塞的,不如写软延迟。当然不同主频下,软延迟要注意时间的差别,用宏定义处理。 这个
3.usbd_std.h中45行改为#define _WIDE_STRING(string) u##string 原来库函数是#define _WIDE_STRING(string) L##string 我用的KEIL5 验证没问题,是不是IAR跟KEI5的区别?
L##string 我查看意思是 unicode字符保存形式,也就是2个字节。 因为USB的特性,传递字符串描述符的时候 需要在每个字符后 补1个'0' 比如你的字符是abcd 实际传递的是 ‘a’ '0' 'b' '0' ‘c’ '0' 'd '0' 所以长度加倍了。
本帖最后由 lvben5d 于 2019-2-12 19:46 编辑