STM32 USB软件移植注意事项 及硬件接线注意

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/agave7/article/details/43524975

移植了个自定义HID USB程序到STM32开发板上,成功运行,但是最近自己做的板子上(用的是F103C8T6)就不行,死活没有反应。经过几番调试终于发现问题,以下做个小结:

1.一定要保证USB时钟是48MHZ;

 使用PLL作系统时钟SCLK;而USB时钟只能是SCLK的1分频或者1.5分频,要得到48MHZ的USB时钟,则SCLK只能为48MHZ或者72MHZ;由于我是用的内部晶振8MHZ,PLL时钟最大是8MHZ Div2 再倍频16 也就是最大只能到64MHZ,所以只能配成48MHZ才能满足要求;如果使用外部晶振,PLL可以直接倍频HSE 而不用Div2;

2.注意中断向量名称;

由于我使用的是Keil 里面ST的例程来移植的,里面用的启动文件是stm32f10x_vector.s,对应USB的中断向量如下:

而我自己的启动文件是startup_stm32f10x_md.s,对应的USB中断向量如下:


所以写中断函数的时候,名字一定要改成与启动文件里的一致:


3.硬件接线也需要特别注意:

USB的D+,D-,对应DP,DM,一定要记得在D+上接一个上拉电阻,通过IO口去控制上拉,直接接上拉的话理论上也是可以的,因为host端是根据D+是否上拉来识别是否有设备插入的。


猜你喜欢

转载自blog.csdn.net/agave7/article/details/43524975