你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【NUCLEO-L496ZG评测】震惊!男人看了会沉默的无晶振USB-OTG评测

[复制链接]
donatello1996 提问时间:2017-5-5 21:36 /
     我想知道有多少人点进来看了
       1-161019145132.jpg
     USB-OTG,OTG的意思是On The Go,意思是在没有主机(PC)充当主设备(Host)的情况下,各个USB从设备能够进行数据通信,虽是这样说,USB设备通信是一定要分主从的,因此,在这个实验中,开发板就是主设备(Host),U盘就是从设备了。有一点要注意的,由于没有像PC机这样的传统主设备那样提供电源,因此U盘的供电由开发板提供,即OTG接口有一个VBUS引脚,这个VBUS由PG6的电平通过控制一个三极管来控制通断,三极管通断表示是否给从设备供电,若该PG6控制给从设备供电,则LD8绿色灯会亮。 1.PNG 2.PNG IMG_20170505_193742.jpg
    早些年,STM32的官方开发板就已经有USB-OTG的例程演示了。如图所示,此为STM32F429-Disco开发板的电子画板例程,用户在画完图案后点击保存按钮,则画板会以BMP格式存储在USB-OTG从设备(U盘)上,将U盘插上电脑就能看到刚画的图案的图片文件了。 3.jpg 4.jpg
       正如之前的帖子所说的那样,这种OTG接口使用MCU内部晶振作时钟源,省去外部晶振,在节省电路板空间的同时不影响性能,但前提是MCU支持USB-OTG-FS接口,因此大家在移植例程给F103或者F0系列的时候可以用CubeMX看下相应的MCU是否支持USB-OTG-FS接口,如图所示,F103系列由于年代久远,并不支持USB-OTG-FS接口,而F0系列就更不用说了,虽然出现的比F103系列晚,但是由于F0系列本身精简了许多外设,因此也不支持USB-OTG-FS接口。不过不用灰心,看过4月25日STM32峰会直播的童鞋就知道,STM32L0最新的型号有可能支持Type-C接口,因此,等那个型号的板子出来之后,再慢慢玩吧。
16.PNG
    之前社区已经有不少人发过基于CubeMX自动生成代码工程的无晶振USB-OTG评测了,为此步骤不再重复,简单来说就是配置引脚-选Fatfs和USBHost中间件-设置系统时钟。
6.PNG 7.PNG 8.PNG
    但我要说下非常重要的三点地方,这三点非常重要,若没注意,则USB-OTG程序无法正常运行。第一点,就是系统滴答时钟中断处理SysTick_Handler()和USB-OTG中断处理OTG_FS_IRQHandler()必须写上,而很多新手用CubeMX生成代码的时候往往会不注意这点
5.PNG
第二点,那就是堆和栈的大小必须大于0x500,最好调大一点,因为OTG所需系统堆栈空间其实也很大的,如果调小了的话,文件系统的f_open()函数就无法使用。这点是必须要注意到的。如果在CubeMX中没有配置,可以在startup_stm32l496xx.s中重新配置。第三,如上文所说,要配置PG6为输出并输出高电平,否则从设备获取不到供电而无法工作。第二点和第三点在之前的帖子都有提及,但是第一点却从未有人提及过!
9.PNG 17.PNG
    放上部分代码和实验效果。在一个间隔为1秒的死循环中,使用f_open()函数打开文件系统并创建文件,然后使用f_write()函数编辑文件,文件保存完毕并关闭后,再次使用f-open()函数打开,然后用f_read()函数读取文件作校验。
14.PNG 15.PNG 11.PNG 12.PNG
    上传工程文件和Fatfs以及Usbhost的驱动文件。
驱动文件.zip (736.26 KB, 下载次数: 12)
10.PNG
13.PNG

评分

参与人数 1 ST金币 +20 收起 理由
zero99 + 20 赞一个!

查看全部评分

收藏 2 评论19 发布时间:2017-5-5 21:36

举报

19个回答
小虾丁 回答时间:2017-5-11 17:24:37
我用STM32CUBEMX,就只是用来生成一些初始化代码。
moyanming2013 回答时间:2017-5-9 12:05:07
donatello1996 发表于 2017-5-9 09:26
第一,代码最重要的三点是可读性,可移植性,健壮性,而cubeMX生成的代码东丢西落,关键时钟使能语句和中 ...

1.我看了楼主你的代码,你根本就没有用STM32CUBEMX生成代码,楼主你的代码如下图:
1.jpg
用STM32CUBEMX生成的代码如下图(在我的帖子里面也可以直接下载到看看https://www.stmcu.org.cn/module/forum/thread-611658-1-1.html):

2.jpg
其实通过对比就可以看出来到底是你的代码有所谓的“可读性、可移植性、健壮行”还是ST官方的有可读性、可移植性、健壮行!
显然的,ST官方的代码结构、规整都符合工程性思维带来的良好可读性、可移植性和健壮行!具体代码展示如下述。
2.楼主的main函数节选如下图:
5.jpg
用STM32CUBEMX生成的main函数节选如下图:
6.jpg
注释!我们强调的就是注释,楼主说ST官方的注释见下图红框:
7.jpg
ST的注释怎么可能没用呢?写的非常清楚,在哪写代码,哪些函数的功能如何等等!请问看了没就说注释没用?!
在哪写代码正是STM32CUBEMX的精妙所在,也正是解决楼主的疑惑:
10.jpg
我负责任的告诉你,真!不!累!而且倍爽!在STM32CUBEMX中修改GPIO及其配置、中间件等等,使用STM32CUBEMX非常友好而且速度比用手写快多了!关键是不会丢失你写过的代码,不会删除你添加的文件。
你想到的别人也一定想到了!
3.楼主说的第一点根本就是自己没有使用STM32CUBEMX生成代码,而正说明了楼主是“凑出来”的工程导致的!凑出来的工程怎么能符合最新的L496系列的芯片呢?
楼主提到:
9.jpg
用STM32CUBEMX生成的代码不用动手就自动已经是这样了,代码可以从我的帖子下到:
https://www.stmcu.org.cn/module/forum/thread-611658-1-1.html
用STM32CUBEMX生成的代码如下图:
8.jpg
所以,这也正说明了一点:STM32CUBEMX是严格的和实时性很强的!
通过楼主的言论看,对STM32CUBEMX抱有很大的成见,以至于根本没用STM32CUBEMX就说它有这样和那样的问题,但是楼主帖子里又提到自己在用而且还加了几个图来说明,到底是用了还是没用呢?还是只是贴几张图“糊弄”一下呢?!如果不是糊弄,那么是不会出现楼主的所谓的第一点关于中断的问题的!
我很负责任的告诉你,STM32CUBEMX是可用的,而且尤其对于新手来说!我们都知道看linux的源码可以提升自己,同样,ST花费那么多精力来完善STM32CUBEMX是有值得我们学习的地方的!尤其是改善国内“垃圾”代码横行的风气!
别以老鸟卖老鸟,再不学习就落伍了!
moyanming2013 回答时间:2017-5-8 23:07:37
之所以出现你说的第一点:
1.你使用cube或其它程序凑成的工程,缺少一些配置或代码片段很正常,不是你理解的不正常和别人没注意到。
2.你该升级下CUBE到最新版v4.20.1和L4的hal库到最新版v1.7.0(从v1.6.0升级不上来就重新装),没有你说的所谓的“奇怪”的问题。我的示例代码都是从上述最新版本生成的,自己写的除外,没问题。
donatello1996 回答时间:2017-5-7 11:48:16
补回工程文件。 工程文件1.zip (2.31 MB, 下载次数: 4)
arenas 回答时间:2017-5-9 09:00:16
想了想过程,准备也拿我的429试试看,otg这个现在有库支持会方便不少,以往因为配置麻烦而且不一定成功基本都懒得去折腾
donatello1996 回答时间:2017-5-9 09:26:53
本帖最后由 donatello1996 于 2017-5-9 09:38 编辑
moyanming2013 发表于 2017-5-8 23:07
之所以出现你说的第一点:
1.你使用cube或其它程序凑成的工程,缺少一些配置或代码片段很正常,不是你理解 ...

第一,代码最重要的三点是可读性,可移植性,健壮性,而cubeMX生成的代码东丢西落,关键时钟使能语句和中断handler语句七零八落,还加上一大堆没用的注释,可读性非常低;代码要有可移植性必须经过系统的归纳整理,也就是你所谓的"拼凑",生成属于自己的工程,这才叫可移植性,不然,每次要用新的外设都要用cubeMX生成的工程,不累?至于健壮性更不用说了,没有经过归纳的工程何来的健壮性?我们是老鸟,稍微改点东西不会报错,就算报错了我们也知道怎么解决,但是占社区人数最多的萌新呢?一改就各种报错。cubeMX只是一个工具,我们只是用它生成的十几条初始化语句粘贴到自己的工程而已,工具有时候出问题是很正常的,我们既然是在评测一个开发板,知道哪里出问题,当然有义务告诉广大的萌新,而不是像之前的帖子那样简单地生成代码应付一下了事。
第二,我的cubeMX和firmware均为最新版本,不需要你的提醒和质疑。
donatello1996 回答时间:2017-5-9 09:31:54
SInzo 发表于 2017-5-9 09:00
想了想过程,准备也拿我的429试试看,otg这个现在有库支持会方便不少,以往因为配置麻烦而且不一定成功基本 ...

429官方例程就有otg,去玩一下吧,真的很好玩
donatello1996 回答时间:2017-5-9 12:20:53
本帖最后由 donatello1996 于 2017-5-9 12:28 编辑
moyanming2013 发表于 2017-5-9 12:05
1.我看了楼主你的代码,你根本就没有用STM32CUBEMX生成代码,楼主你的代码如下图:

用STM32CUBEMX生成的 ...


第一,我这个工程的确是自己参照frimware从无到有建立起来的,我没有说过这个工程是从cubemx生成的
第二,我在写程序的过程中的确是参照了cubemx生成的工程的初始化代码,因为对于我来说cubemx生成的工程就只有外设初始化代码是有用的
第三,你觉得不累,我觉得累,这是我自己认为累的,谁也不能说服谁
第四,如果你认为我只是贴几张图片糊弄大家的话,那你就错了,我要是想糊弄,连图片都不想贴,因为这几张图片的内容在我使用cubemx过程中的确有调用
第五,你认为我认为cubemx没有用,那是你的主观臆测
第六,cubemx只是一个工具,如果人们以后写代码依赖cubemx,不去深究它生成的代码结构,一离开cubemx就没辙,那不是更可怕的事情?
第七,系统滴答时钟函数和USB-OTGhandler()函数,谁也不敢100%保证一定会注意到,万一要移植到别的MCU呢?移植到F4,F7上面去呢?
第八,既然cubemx只是一个工具,用不用是看情况的,如果有时候点个灯,用寄存器就能搞定的事情,根本不需要用上cubemx,那还有必要用到?
第九,倚老鸟卖老鸟的是你,我是去年11月底加入社区的,发的帖子貌似不比你少很多

aderson 回答时间:2017-5-9 12:48:33
donatello1996 发表于 2017-5-9 12:20
第一,我这个工程的确是自己参照frimware从无到有建立起来的,我没有说过这个工程是从cubemx生成的
第二 ...

本人无意引战,有任何对我感觉心里不爽的事请憋着,不要评论我,也不要AT我
这点上面比较支持楼主,cubemx存在的问题是效率差和学习成本高的问题,因为增加了HAL层,越是抽象的东西就越是难懂,文件数量也变多了,HAL刚出来的时候,我也去研究过这个库,发现配置是非常方便,但是之后就发现一个问题,同样的功能,类似的实现方式HAL的开销是非常大的,当然现在单片机资源越来越大,也不缺这么一点。还有一个最重要的一点是,之前的工程全部用的STD写的,积累下来的自己调试好的一些内外设的驱动,基本都是非常稳定的,所以鼠标点点,配置工程和复制粘贴没啥区别。而且标准库用的时间久了,项目做的多了,多维护一套HAL库也是麻烦事,以上个人不用HAL的原因。
Stm32McuLover 回答时间:2017-5-9 12:55:55
adersonl 发表于 2017-5-9 12:48
本人无意引战,有任何对我感觉心里不爽的事请憋着,不要评论我,也不要AT我
这点上面比较支持楼主,cubem ...

以后的片子不支持STD,据说2017 Q4全面支持LL+HAL
donatello1996 回答时间:2017-5-9 12:58:00
他说的cubemx生成的工程的可读性高,我就笑了,外设驱动函数在main.c里面,然而外设时钟使能函数却丢在msp.c里面,handler函数丢在it.c里面,还被一大堆绿色注释语句包围,要是一个新手不了解cubemx是这脾气,调试半天都不知道哪里错了
aderson 回答时间:2017-5-9 13:01:00
哈佛祖安智 发表于 2017-5-9 12:55
以后的片子不支持STD,据说2017 Q4全面支持LL+HAL

这个也早就料到了,毕竟STD已经N年没有更新了,不过就目前来看,F0 1 2 3 4 都支持STD(F7支持不?),目测这些个芯片能用好多年了,毕竟实际项目要考虑成本的,倒也不是很烦那些事,等HAL真的更新的不错的时候再用也可以
donatello1996 回答时间:2017-5-9 13:09:28
adersonl 发表于 2017-5-9 13:01
这个也早就料到了,毕竟STD已经N年没有更新了,不过就目前来看,F0 1 2 3 4 都支持STD(F7支持不?),目 ...

现在问题不是hal库,hal库我觉得挺好用的,挺适合新手入门,问题是他就是个cubemx神教,容不得人家说半点cubemx不好的地方。
wofei1314 回答时间:2017-5-9 13:45:52
淡定些,没有最好用的工具,只有实现自己需求最好的方法!
donatello1996 回答时间:2017-5-9 13:46:46
wofei1314 发表于 2017-5-9 13:45
淡定些,没有最好用的工具,只有实现自己需求最好的方法!

就是,不管白猫还是黑猫,抓到老鼠就是好猫,哪个好用用哪个
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版