一板网电子技术论坛

天南地北客
发表于: 2017-2-16 10:39:32 | 显示全部楼层

感谢Henry Choi做出的贡献。


在我的大部分职业生涯中,只使用到一些超级昂贵的芯片;坦白地说我已经厌倦了。 最近,我换了一个行业,并且在Jawbone学习了很多关于无线/可穿戴消费电子的知识。 最近我一直在为一个刚开始的爱好项目寻找一个便宜的带USB功能的微控制器,并决定尝试使用STM32L0或STM32F0系列。 STM32L052xx具有64/32 KB闪存和8 KB SRAM,并提供32引脚QFN封装。 但STM32F042xx的封装更小,具有32/16 KB闪存、6 KB SRAM和低至20引脚(TSSOP)的封装。 我买了nucleo-l053r8开发和nucleo-f042k6开发板(我现在已经收集了有STM32 L0、L1、L4、F0、F4和F7系列开发板)。


闪烁NUCLEO-32开发板的用户LED

对于STM32F0系列,超低功耗并不是一个首要的标准,更多的是面向消费者/玩具市场。所以我使用NUCLEO-F042开发板开始实验。


您可以在硬件框图中看到,紧邻micro-USB连接器(在下图的顶部)的三色LED封装是ST-Link指示灯,微控制器不能直接访问它。 在下图底部的2个LED灯中,绿色LED(右侧)是LD3,微控制器可以通过PB3引脚(nucleo32开发板上的D12引脚)进行控制 。

hardware block diagram.PNG


要从GNU ARM Eclipse CDT环境中闪烁这个LED灯(我可以使用Keil uVision,因为闪存只有32 KB - 但我更熟悉Eclipse CDT 环境),使用GNU ARM Eclipse插件的STM32F0xx C / C ++项目模板创建了一个新的C项目,如下所示。

new C project.PNG


在下一个屏幕中,我选择了STM32F042芯片系列,以及正确的闪存和RAM大小(分别为32和6)。 时钟名义上是一个外部时钟源的速度,但在这种情况下,比较混乱,因为这个开发板没有外部OSC,你可以看到在上面的框图。 我计划使用8 MHz内部(片上)RC时钟源(乘以6x至48 MHz),如下所示,因此我在“Clock (Hz)”文本框输入8000000。

clock.PNG


在剩余的选项中,我勾选了“Use newlib nano”,以充分利用代码空间。


在Eclipse使用OpenOCD调试项目(您必须下载/编译OpenOCD,因为Eclipse OpenOCD插件似乎没有它的可执行文件),需要进行几个设置。 可以在 Preferences --> Run/Debug - > OpenOCD中进行Eclipse设置。 目前,它只包括可执行文件名和路径。 还需要告诉项目的调试配置选项开发板使用哪个OpenOCD配置文件,如下所示。

debug configuration option.PNG


经过这一切,“Blinky”项目起初时并没有闪烁,因为开发板的引脚分配不正确。 在自动生成的BlinkLed.h中,我将端口和引脚更改为PB3,如下所示。

  1. // Port numbers: 0=A, 1=B, 2=C, 3=D, 4=E, 5=F, 6=G, ...
  2. #define BLINK_PORT_NUMBER               (1)
  3. #define BLINK_PIN_NUMBER                (3)
复制代码

随着绿色LED现在闪烁,我继续将此固件转换为一个USB HID设备。

跳转到指定楼层
天南地北客
发表于: 2017-2-20 10:52:24 | 显示全部楼层

在STM32CubeMX中生成USB HID固件代码

CubeMX GUI可以分配引脚功能并生成USB的代码。 开始时,我只需要在Pinout浏览窗口中启用USB FS 2.0功能。 我还想测试通过按键进行USB远程唤醒,所以将PA0分配到EXTI0,你可以在引脚分布视图看到:

pinout.PNG


在开发过程中,可以在示波器上观察的测试点是超级有用的,所以我将PA1分配给GPIO输出。 我认为SWD半主机通讯速度太慢了,所以我改用UART2来输出SW跟踪消息。 在8位采样位过采样时,我可以从这个外设输出6M的波特率,但是我的FT232R USB到串行转换芯片只能达到3 Mbit / s,所以我将外设限制到3 Mbps,如下图所示。

usb.PNG


如果要使用uint8_t类型作为跟踪传输,则必须将字长增加到8位(不算奇偶校验位)。 如果使用NUCLEO开发板板,ST-Link VCOM端口,其在Windows计算机显示一个COMx设备,使用其VCOM端口,是一个更好的方式 - 虽然我不知道它最大支持多少波特率。

port.PNG


然后我通过menu --> Project --> Generate code生成代码。 我必须复制(并在必要时替换)一些文件到我刚刚在上一节中创建的Blinky项目,通过拖放将文件放到Eclipse项目浏览器中。

    ●    Inc / * - > include /

    ●    Src / *→src /。删除现有的Timer.c和Blink.c,因为我们不会再使用闪烁LED了。

    ●    Drivers/ STM32F0xx_HAL_Driver / Inc / *(包括Legacy /文件夹) - > system / include / stm32f0-stdperiph /。注意,HAL头在名称中有“_hal_”。

    ●    Drivers/ STM32F0xx_HAL_Driver / Src / * - > system / src / stm32f0-stdperiph /。删除现有的源文件(名称中没有“_hal_”的源文件),因为现在不需要它们了。

    ●    Drivers/ CMSIS / Device / ST / STM32F0xx / Include / *.h - > system / include / cmsis /

    ●    Drivers/CMSIS/Device/ST/STM32F0xx / Source/Templates /system_stm32f0xx.c - > system / src / cmsis /

    ●    Drivers/CMSIS/Device/ST/STM32F0xx/ Source/ Templates/ gcc / startup_stm32f042x6.s - > system / src / cmsis / startup_stm32f042x6.S。扩展名从“.s”更改为“.S”是必需的,因为Eclipse CDT希望汇编文件扩展名为“.S”。

    ●    Middleware / ST / STM32_USB_Device_Library / Core / Inc / * - > include /

    ●    Middleware / ST / STM32_USB_Device_Library / Core / Src / * - > src /

    ●    Middleware / ST / STM32_USB_Device_Library / Class / CustomHID / Inc / * - > include /

    ●    Middleware / ST / STM32_USB_Device_Library / Class / CustomHID / Src / * - > src /


USB中间件文件是必需的,因为我想使用ST的USB中间件。 最初,我试图将文件夹Middlewares / ST / STM32_USB_Device_Library /复制到项目根目录,但是GNUARMeclipse项目模板不会为我复制的STM32_USB_Device_Library文件夹生成递归构建规则。 图像我将切换到一个Makefile到最后,我只是通过将源单独复制到现有的include /和src /文件夹。


CPP文件需要芯片定义,所以我在项目属性中添加了一个新的符号“STM32F042x6” - > C / C ++ Build - > Settings - > Cross ARM C Compiler - > Preprocessor to all build configurations(Debug and Release) 。通过这个更改,项目再次构建,我可以从调试器运行FW。 但由于我没有焊接USB接口,并不会发生什么事情。 很容易焊接USB接口,最耗时的部分是找出D + / D-引脚(3和2,它们在USB标准A型连接器的中间;引脚1是Vbus,当你直看电缆的时候在连接器的右手边)。

220px-USB.png


我将D-连接到PA11(NUCLEO开发板CN3的14脚),将D +连接到PA12(CN3的5脚)。 当需要从Vbus为原型提供电源时才会连接Vbus线缆我。 现在我应该能够将这个FW连接到主机PC,但在我使用USB HID之前,插入SW跟踪库到项目中 - 因为我预计第一次时他不能正常工作。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 44 | 回复: 74



手机版|

GMT+8, 2020-6-6 08:32 , Processed in 0.078125 second(s), 32 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2018 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表