MakerLab创客实验室 — Let's Make something.
现在注册
已注册用户请 登入
Andy large avatar
MakerLab创客实验室  ›  学习系统  ›  Arduino  ›  STduino原型板如何使用(Arduino Compatible)

如何让你的Arduino IDE支持STM32开发板

By Andy at 3 年前 , 12491 次浏览

想学STM32的32位ARM单片机,但不想读1000页的技术文档?
成千上万个寄存器或ST官方API接口需要记忆?
按照例子敲了几十行代码了,却无法点亮一个LED?
难用并且盗版的IDE让你头疼?

如果上面的问题让你感觉学习STM32单片机很困难,那么,下面我将介绍给你一个:
扔掉1000页的技术文档;
忘记ST官方API接口;
三五行代码点亮LED;
正版好用的IDE;
基于Arduino IDE开发STM32单片机的方式。

什么是Arduino

如果你学习单片机,研究电子硬件,做创意产品和设计,甚至做艺术设计,但却没听说过Arduino,那你真的Out了。
Arduino及其兼容的开发板、学习板是全球最大的开源硬件原型平台,没有之一。

Arduino具有两个其它平台难以企及的优势:
1、编程语言采用Arduino programming language(基于Wiring),与C++的语法非常接近;
2、Arduino IDE(基于Processing),支持windows,linux,Mac OS的简单好用的编程IDE。

由于Arduino平台的这两个优势,使得越来越多的硬件平台向Arduino靠拢,越来越多的Arduino Compatible的板子不断诞生。现在开发一个原型板,不说Arduino Compatible你都不好意思跟别人说。

ARM的兴起

随着嵌入式CPU的发展,ARM核心的CPU成为了为了发展的趋势。尤其是像ST推出的低价却高性能的STM32基于ARM核心的CPU,使得ARM的价格已经跟8位8051单片机价格差不多了。没有什么理由不迎接新的ARM时代了。

如何让Arduino IDE支持STM32单片机(STM32F103系列)

现在可以直接下载我打包好的IDE,就不需要自己导入库文件了,下载地址:
http://pan.baidu.com/s/1hq9xgu4
下载后解压,直接运行就可以了,串口驱动还需要安装。

1、下载Arduino IDE

Arduino IDE是非常棒的编程工具,我没有必要重新创造轮子,所以下载官方Arduino IDE(`需要1.5版本以后)就可以,并且原生支持中文。下载地址:
windows版本:http://downloads.arduino.cc/arduino-1.5.5-windows.exe
Mac OS版本:http://downloads.arduino.cc/arduino-1.5.5-macosx.zip
linux版本:32位64位

下载后安装即可。

2、下载STM32 Core文件及安装

为了让Arduino IDE支持STM32单片机及开发板,你需要下载由MakerLab开发的STM32文件。Github地址:
https://github.com/MakerLabMe/STM32_Arduino_Cores

直接下载zip压缩包
首先找到Arduino的安装目录,windows系统的默认安装目录是C:\Program Files\Arduino,然后依次进入hardwarearduino目录;
Mac系统下是在Applications目录下或其它你安装的位置下,名称位Arduino.app的程序,然后右键点击该程序,选择Show Package Contents弹出新的目录,再一次进入Contents/Resources/Java/hardware/arduino目录;
然后下载ZIP压缩包( https://github.com/MakerLabMe/STM32_Arduino_Cores/archive/forIDE1.5.8.zip ),解压到上面提到的目录中,文件名称必须是stm32,安装完成后的目录结构应该是:

hardware/arduino目录下包含三个文件夹,分别是:avr 、sam和stm32,其中stm32文件夹内就是刚刚解压的core文件。 如图:  


使用Git安装

#首先来到Arduino的安装目录然后git clone:   
hardware/arduino > git clone https://github.com/MakerLabMe/STM32_Arduino_Cores.git stm32
hardware/arduino > cd stm32
#完成后,stm32文件夹内应该是这样的:
hardware/arduino/stm32 > ls
firmwares programmers.txt system
boards.txt libraries readme.md variants
cores platform.txt sloadhost sloadhost.exe

如果操作正确,打开或重启Arudino IDE后你就可以看到在Tools(工具)->Boards(板)菜单下多了几个栏目,类似于下图,IDE在各系统下的显示有所不同:

如果你可以看到多出的几个板子类型(板子数量和名称可能有差异),说明安装成功。可以开始你的编程之旅了。

下面的板子是MakerLab Sun R1板子,板子接口/IO与Arduino 的Mega及Due板子兼容。
我的淘宝店:MakerLab
点击图片查看高清大图。STduino Sun Pinout.

本文最后更新于:22 天前
35 回复
kaso medium avatar
#1 - 2 年前
kaso

STM32F103c8t6可以支援?

Andy medium avatar
#2 - 2 年前
Andy

@kaso 严格来说是支持的,但我的代码里面只提供了中密度和高密度的相关静态库文件(lib***.a文件),如果你想用于低密度的芯片,需要到system文件夹中,自己编译一个低密度的静态库。

fjl_86 medium avatar
#3 - 2 年前
fjl_86

STM32F103VET6可以支持吗?

fjl_86 medium avatar
#5 - 一年前
fjl_86

那VET6 的管脚是怎么定义的啊

Andy medium avatar
#6 - 一年前
Andy

@fjl_86 后面的文章里有说,就是那几个文件里面

jackshi618 medium avatar
#7 - 一年前
jackshi618

这个板子淘宝店没有啊

shunli70 medium avatar
#9 - 一年前
shunli70

makerlab earth r1和stm32f103c8兼容吧?

shunli70 medium avatar
#10 - 一年前
shunli70

@Andy 请问makerlab earth r1何时有?

Andy medium avatar
#11 - 一年前
Andy

@shunli70 C8有点小,最好CB以上

fanfansong medium avatar
#12 - 一年前
fanfansong

为什么下架了,什么时候还有的卖?@Andy

Andy medium avatar
#13 - 一年前
Andy

@fanfansong 不太完美,将来再设计一款更完美的吧

Andy medium avatar
#15 - 一年前
Andy

@fanfansong 已经可以 打印了,完善谈不上。我已经移植过去了。你只需要配置一下IO口就可以用了。

shunli70 medium avatar
#16 - 一年前
shunli70

为何stm32f103c8y6下载不了,找不到串口。用mcuisp可以下载。

Andy medium avatar
#17 - 一年前
Andy

@shunli70 c8t6吧? 需要用串口接到usart1上,并且通过rts和dtr控制芯片的引导方式和复位状态

fjl_86 medium avatar
#18 - 一年前
fjl_86

@Andy
请问楼主Marlin在 2560的主板上打印的圆是多变行的感觉,移植到STM32后这种现象能处理掉吗

Andy medium avatar
#19 - 一年前
Andy

@fjl_86 要看什么原因导致的,你是什么机器?delta?

cyue medium avatar
#20 - 一年前
cyue

支持 Arduino 1.6.5 IDE了沒?

Andy medium avatar
#21 - 一年前
Andy

@cyue 支持,不过安装过程不是太友好,有个问题解决不了

su_11268 medium avatar
#22 - 一年前
su_11268

@Andy 请教一下,我按照你上面说的做了,也看到Tools(工具)->Boards(板)菜单下多的几个选择了,为什么直接编译你gethub上的Marlin_STM32固件程序却编译不成功呢?
用的Arduino1.5.8,导入了库u8glib,在u8glib的函数中报很多SPI 没定义的错误。如:
c:..\Arduino\libraries\U8glib\utility\u8g_com_arduino_hw_spi.c:302:26: error: 'SPI_SR_TDRE' undeclared (first use in this function)
while( (SPI0->SPI_SR & SPI_SR_TDRE) == 0 )

Andy medium avatar
#23 - 一年前
Andy

@su_11268 不能用硬件SPI,因为不兼容,软件SPI可以

su_11268 medium avatar
#24 - 一年前
su_11268

@Andy 谢谢回复,不过你的意思是说你的原始程序是编译不过的,一样要修改配置文件,改成软件SPI,才可以编译通过吗?
我是新手,想问一下在哪里改??

Andy medium avatar
#25 - 一年前
Andy

@su_11268 固件做修改了吗?如果没有打开lcd功能,应该可以直接通过的呀

su_11268 medium avatar
#26 - 一年前
su_11268

@Andy 对不起,与您的程序无关,我发现去掉导入的u8glib库就可以编译成功了,打扰了,对不起,谢谢!!

ALEXL medium avatar
#28 - 一年前
ALEXL

@Andy STM32F103c8t6到底可以支持吗?我用arduino IDE 编译程序生成bin文件,然后用J-Flash烧到0x08000000的位置,但是程序完全没运行啊~我改了variant.c的相应管脚配置,还有你前面说的静态库怎么弄?不知道是不是那个问题?特意注册了账号,望回复!!!

Andy medium avatar
#29 - 12 个月前
Andy

@ALEXL STM32F103c8t6好像是低密度cpu吧,我的配置只有中高密度的,所以如果想支持c8t6需要自己做一个低密度匹配的配置文件

FrontierCode medium avatar
#30 - 8 个月前
FrontierCode

您好 在编译一个空白sketch时我遇到了如下报错
D:...\arduino-1.5.8\hardware\arduino\stm32\cores\arduino\HardwareTimer.cpp: In member function 'uint16_t HardwareTimer::setPeriod(uint32_t)':
D:...\arduino-1.5.8\hardware\arduino\stm32\cores\arduino\HardwareTimer.cpp:261:42: error: 'CYCLES_PER_MICROSECOND' was not declared in this scope
uint32_t period_cyc = microseconds * CYCLES_PER_MICROSECOND;
^
编译有误。
我发现使用最新版本的IDE就可以完成编译 但是1.6.3版本以上的IDE都找不到STM32F4的板子
谷歌不到解决办法的我已经无能为力 只好来求助您了
我应该如何修改才能完成编译?谢谢

zxdzwcs medium avatar
#31 - 6 个月前
zxdzwcs

Administrator@PC201504051656 /cygdrive/g/Arduino/hardware/arduino
$ git clone https://github.com/MakerLabMe/STM32_Arduino_Cores.git stm32
正克隆到 'stm32'...
remote: Counting objects: 3158, done.
remote: Total 3158 (delta 0), reused 0 (delta 0), pack-reused 3158
接收对象中: 100% (3158/3158), 10.89 MiB | 87.00 KiB/s, 完成.
处理 delta 中: 100% (2082/2082), 完成.
检查连接... 完成。
正在检出文件: 100% (2855/2855), 完成.

Administrator@PC201504051656 /cygdrive/g/Arduino/hardware/arduino
$ cd stm32/

Administrator@PC201504051656 /cygdrive/g/Arduino/hardware/arduino/stm32
$ ls
boards.txt changelog.md cores libraries platform.txt programmers.txt readme.md sloadhost sloadhost.exe system variants

最后ls 出来的结果,为什么没有楼主说的,firmwares这个文件夹

1419440391 medium avatar
#32 - 6 个月前
1419440391

stm32f103c8t6型号的单片机行吗?我总是报这个错误

Failed to init device.
stm32flash 0.4

http://stm32flash.googlecode.com/

Using Parser : Raw BINARY
Interface serial_w32: 230400 8E1

weoan medium avatar
#34 - 5 个月前
weoan

比如点亮一盏LED,为什么直接用keil里的端口配置引脚模式,时钟等,arduino编译能过,但烧入硬件后没反应(keil工程能正确运行),而用digitalWrite的方式却正确?

su_11268 medium avatar
#35 - 22 天前
su_11268

楼主,麻烦请教一下,这个编译器可以像keil那样设置ROM的起始地址吗?
最近尝试做一个bootloader程序转到一个APP程序执行的功能,看别人的示例都说app程序除了设置中断向量偏移外还必须设置起始地址,它们都是keil编译的,这个Arduino IDE是不是无法设置?