moyanming2013 发表于 2017-4-27 23:24:14

【NUCLEO-L496ZG评测】STM32CubeMX+无晶振高精度USB2.0 FS OTG详细步骤

本帖最后由 moyanming2013 于 2017-5-8 21:55 编辑

非常感谢STM32社区(https://www.stmcu.org.cn/)和STM32官网(http://www.stmcu.com.cn/)!本文需要首先完成《【NUCLEO-L496ZG评测】ST-LINK驱动+STM32CubeMX+MDK-ARM开发环境搭建及调试简单程序》中的内容。1.    STM32CubeMX配置新建一个工程:在“MCUSelector”标签中选择“STM32L496ZGTx”:“SYS”选择“Trace Asynchronous Sw”调试器:本开发板中有一个外部的低速时钟,频率为32.768。要想使得MSI时钟有更高的精度,需要启用该LSE时钟,MCU硬件自动矫正MSI精度,使得MSI可以满足系统时钟源和USB的时钟源,此时无需外接HSE晶振。“RCC”中选择“Low Speed Clock(LSE)->Crystal/CeramicResonator”:“USBOTG FS”中选择“Host_Only”和“VBUS sensing”,并且把PG6添加为“GPIO_Output”模式,PG6是打开USB HOST的电源使能端口:先添加PG8和PG7,为“LPUART1”,并在“LPUART1”中的“mode”选择“Asynchronous”:添加中间件:选择“USB_HOST->Mass Storage Host Class”,“FATFS->USB Disk”:点击“Clock Configuration”标签,选择“Yes”,让STM32CubeMX自动调整下时钟,如果不符合还可以自己手动调:确保时钟配置如下所示:选择“Configuration”选项卡,可以在RCC中看到MSI时钟精度自动调整已经使能了,如果不添加LSE,此处是不能使能的:选择“LPUART1”,调整波特率和字长:在“USB_HOST”中,修改VBUS的PG6:点击齿轮按钮,调整工程选项,注意一定要增加堆和栈的大小,否则在加载U盘使可能出现FR_DISK_ERR的错误:在“CodeGenerator”中选择“Generate peripheral initialization as apair of ‘.c/.h’ files per”,可以使得外设分别有自己的头文件和源文件,点击“OK”按钮:如果完成了MDK-ARM的安装,点击“Open Project”即可自动开机MDK-ARM工程:2.    调试USB2.0 FS OTG工程需要自己添加部分代码,才能够完成USB HOST的读写U盘功能,具体见附件示例代码:系统识别ST-LINK的串口号是COM3,在putty中做如下配置,ST-LINK的串口连接到了主MCU的LPUART1:编译完成后,开启调试,在257行加个断点,然后全速运行程序,此时通过putty可以看出通过USB OTG测试U盘成功:实际测试如下图:
3.    总结本文详细介绍了如何使用STM32CubeMX新建一个USB OTG工程,同时,给出了如何提高MSI的精度,使得不需要额外高速晶振即可实现USB OTG的操作。最后给出了代码和调试、测试步骤。后续可以根据需要再完善更多的功能。

pythonworld 发表于 2017-5-1 06:30:33

谢谢分享,很详细!!!

strang 发表于 2017-5-1 10:59:23

支持一下

队长shiwo 发表于 2017-5-15 19:08:04

很详细的,学习了

beck74 发表于 2018-5-26 18:02:51

是不是利用了LSE的32768晶体? 我以为两个都不需要, 用内部的呢。。。想想不可能啊

moyanming2013 发表于 2018-5-28 12:56:41

beck74 发表于 2018-5-26 18:02
是不是利用了LSE的32768晶体? 我以为两个都不需要, 用内部的呢。。。想想不可能啊 ...

确实利用了LSE来提高USB的精度。
不论是RTC还是基本的精度问题,LSE可能总是无法避免的,省掉一个HSE已经是很不错了,且精度也还可以。
页: [1]
查看完整版本: 【NUCLEO-L496ZG评测】STM32CubeMX+无晶振高精度USB2.0 FS OTG详细步骤