Arduino自从面世以来,便迅速在电子爱好者的圈子中流行起来。Arduino编程简单,而且周边配件也很丰富。可是Arduino有一个比较严重的问题,就是性价比不高。最多见的Uno和Pro Mini,通常使用328p,主频只有35MHz,IO口也颇有限,可是价格却比较高。而性能比较好的片子(例如意法半导体的STM32F103xx),虽然性能比较好(72MHz主频,丰富的外设(SPI、IIC、多个USART、CAN等),而且片上存储也高达512k),可是编程却比较复杂。每每为了点一个LED,还要进行各类初始化、时钟配置操做。在这种片子上编程,每每还要求用户对硬件了解比较深入。因此,若是可以将STM32的高性能(相对)和arduino的用户友好结合起来,就再好不过了。而实际上,Maple早就作过这个工做了,针对STM32单独作了一套库,来兼容arduino的库。下面就简单说一下,如何实如今STM32上,使用arduino的方法来编程。linux
了解咱们要使用的工具
- Bootloader文件:来自于这里;
- USB转串口(本例中使用的是CP2102,其余的设备可能也可使用,可是并未通过测试);
- STM32flash,能够从这里找到适合你的操做系统的烧写器(个人操做系统是Linux,因此我使用linux/stm32flash/stm32flash,不过我后来在AUR中发现了stm32flash,因而就安装了AUR中的stm32flash
若是你使用Windows或者Mac OS,就选择适合你的工具,另外最好将Bootloader和这个放到同一个目录中(若是你在Linux上使用软件管理器安装的,请忽略这一点); - 硬件库,来自于Arduino_STM32的git(如下简称官方git)。
向STM32烧写Bootloader
引言
arduino起初主要是创建在AVR单片机上,arduino的简易编程,实际上也是创建在一套库和Bootloader之上。要想在STM32上用这种方式编程,第一步即是向STM32烧写Bootloader。git
下载Bootloader
咱们从这里来找咱们须要的Bootloader。自己这个Bootloader须要自行编译,可是实际山做者已经帮咱们编译好了,咱们只须要从binaries目录中找到咱们须要的Bootloader便可。在咱们手头上的STM32板子上,通常至少有一个用户LED,咱们须要用一个LED来做为状态指示灯(这也是被要求的),而不一样的板子,这个LED也不一样,因此咱们须要下载的Bootloader也不尽相同。个人板子上的LED引脚是PC13,因此我下载了generic_boot20_pc13.bin(请注意这里必定要根据你本身的状况选择Bootloader,不然可能出现问题)。
备注:stm32f103的引导选择:
– BOOT1=x BOOT0=0从用户闪存启动,这是正常的工做模式。(用户使用)
– BOOT1=0 BOOT0=1从系统存储器启动,这种模式启动的程序功能由厂家设置。
– BOOT1=1 BOOT0=1从内置SRAM启动,这种模式能够用于调试。github
准备烧写器
按照上面的方法找到适合咱们本身的烧写器,同时也要准备好下载器。将刚刚下载的Bootloader和烧写器(stm32flash)放在我么容易找到的目录中(最好在同一个目录中),而后打开终端(或这Windows的命令提示符),进入到刚刚的目录。编程
链接硬件
STM32支持3种引导方式,Flash、SRAM和ISP。一般状况下,咱们使用Flash比较多,这种方式经过下载器(JLink、STLink等)将代码放到Flash中,再
– 而后连接硬件,我手头上的是C8T6,这个片子的Tx和Rx分别对应引脚PA9和PA10。链接方式参见下面的表格工具
STM32 | 串口下载器 |
---|---|
PA9 | Rx |
PA10 | Tx |
Vcc | (自行准备电源) |
GND | GND |
开始烧写Bootloader
还记得咱们刚才准备好的文件吗?就是那个stm32flash(请注意可能咱们的操做系统不一样,因此下载的东西也可能不一样)和咱们刚刚从github上下载的Bootloader(须要再确认一下,下载的Bootloader是不是正确的),而后打开终端(在Windows上称为“命令提示符”,打开的方式是“Win键+r” => “输入cmd”,而后就会出现一个黑框),进入上述两个文件所在目录(因此说最好把上面两个文件放到同一个目录中(主要针对Windows用户),而后把咱们的USB转串口模块连接到电脑上,执行post
1 |
stm32flash.exe -w generic_boot20_pc13.bin -v -g 0x0 COM14 |
在上面的命令中,-w 表示写入,后面跟着要写入的文件名,-v 参数是指校验写入,这个指令可加可不加,-g 参数指开始写入的地址(这个地址是指片子上的地址),一样默认状况下就是从0x0开始写入,因此这个参数也无关紧要。最后的COM14是你的USB转串口在你的电脑上的名字,一般是COM开头。在Linux上每每是“/dev/tty*”。性能
因为各类缘由,上述命令极可能不能正确执行,这时候就输入测试
1 |
stm32flash.exe -help |
来获取帮助。ui
我相信Linux用户会自行解决各类问题的。url
最终运行效果大概以下
后续工做
截止到如今,咱们已经完成了Bootloader的烧写。下面咱们把STM32上面全部的线拔下来,并断其电,而后设置引导方式为Flash(把Boot0和Boot1跳线分别设置为0和0)。而后再插上USB,上电。若是一切正常,那么这时候你就会看到板子上有一个小灯在闪烁(实际上在刚插上电的时候,小灯会快速闪烁6下,而后就比较慢地闪烁)。若是你使用Windows,那么在设备管理器中你能够看到一个名为maple的未识别设备,若是在linux上,经过lsusb命令,你能够看到一个ID为1eaf:000x(“x”截止到如今,咱们已经完成了Bootloader的烧写。下面咱们把STM32上面全部的线拔下来,并断其电,而后设置引导方式为Flash(把Boot0和Boot1跳线分别设置为0和0)。而后再插上USB,上电。若是一切正常,那么这时候你就会看到板子上有一个小灯在闪烁(实际上在刚插上电的时候,小灯会快速闪烁6下,而后就比较慢地闪烁)。若是你使用Windows,那么在设备管理器中你能够看到一个名为maple的未识别设备,若是在linux上,经过lsusb命令,你能够看到一个ID为1eaf:000x(“x”处多是3或4),而这个设备的设备名倒是空白的。
实际上这时候咱们已经完成了板子上的全部操做,下面就是配置电脑了。因为咱们在电脑上看到了未知的设备,因此咱们须要为其安装驱动程序(主要针对Windows)。打开在第一节中提到的硬件库,下载之。其中有一个名为“driver”的文件夹,其中就是相应的驱动,打开之。运行其中的“install_driver.bat”。(关于Windows上的驱动安装,我只能帮到这里了,由于我并无Windows,若是你在这一步遇到了什么问题,能够给我发邮件。
下面是linux上面的操做,在Linux上,咱们不须要安装驱动,只须要添加相应的rules就能够了。在刚刚提到的硬件库中,找到tools文件夹,进入“linux”目录,运行其中的install.sh,便可自动添加相应的rules,这一步须要以sudo运行(或者root)。
而后咱们须要安装dfu-util,在archlinux的官方仓库中,已经有了编译好的dfu-util,只须要直接安装便可。若是你的发行版的软件仓库中没有dfu-util,可使用硬件库中的dfu-util,它在tools/linux中。
配置arduino
下一步就是配置咱们的arduino环境,步骤很简单。把刚刚咱们下载的硬件库,拷贝到arduino的sketch文件夹中。
在Windows上,这个文件夹位于“个人文档\Arduino”中,而在Linux上,这个文件夹位于用户的home目录中。
尝鲜
打开arduino,若是上述配置正确的话,咱们在tools->board中能够看到一些STM32的板子,以下图:
咱们打开Blink,而后选择板子、RAM、时钟等,第一次咱们不须要选择端口,直接下载。若是出现上面的图,就说明成功下载。