背景:简单玩过 Ardunio,C/C++算比较熟悉,会点python。最近公司需要实现些 简单功能,查资料 买了 STM32F103C8T6 的开发板。看了几天资料,用 keil 写了些简单程序。发现太麻烦了。而且我也不是专门搞这个的太浪费时间。(其实就是懒的学了)
找解决方案:
MicroPython 发现 没有比较现成的刷 stm32F103 的比较详细的教程。(官网)(STM32F103 可用用的github地址)
STM32 刷 Ardunio 感觉很简单的样子 就试了一下。
一,环境
- Window7 64
二,前期软件准备
Arduino IDE:环境搭建
官网下载软件并安装:https://www.arduino.cc/en/Main/Software
STMicroelectronics :引导烧录程序
ST 官网下载链接:https://www.st.com/en/development-tools/flasher-stm32.html
国内备用链接:https://download.csdn.net/download/github_37290846/13255802
Arduino_STM32:版型文件
这个 主要是 让arduino ide 可以识别主板用的
Github下载地址:https://github.com/rogerclarkmelbourne/Arduino_STM32
国内备用链接;https://download.csdn.net/download/github_37290846/13254506
STM32duino-bootloader:板子的引导程序
注:这个是板子的固件,可以理解为 板子的系统
Github下载地址:https://github.com/rogerclarkmelbourne/STM32duino-bootloader
国内备用下载链接:https://download.csdn.net/download/github_37290846/13253645
三,硬件准备
STM32F103C8T6 核心板
我的就某宝买的,10块钱不到 搞定。
串口线
注:这里的线必须是usb转串口的才可以 我的也是淘宝10块钱搞定的。
这样的:
和 这样的都可以 二选一:
板子上的mini usb 串口线
注意一定要可以做串口输出的。(我不会承认自己拿了一根只可以充电的线搞了n久 搞不定的)
四,开干
- 首先将Arduino引导程序上传到STM32通过USB转串口连接STM32的串口
-
将BOOT0接到VCC(1)
-
安装ST官方的Flasher工具,可使用该工具来刷新二进制文件
注:这里大家就自行截图吧。
有几个注意项:
1.一定要选64k
2.binaries 需要选适合自己的(一般来说为:generic_boot20_pc13.bin)板载小灯的控制针脚。
3.ST 的软件安装后没有桌面图标,所以安装好后要记得 安装路径。(实在忘记了就全局搜索一下:STMFlashLoader Demo.exe)
- 软件设置
1.之前下载的 Arduino_STM32 文件解压放在arduino 安装路径下如:
2.重启 Arduino IDE,打开工具>板型,可见如图则安装成功:
3.安装STM32 开发板管理器
这里注意不要选错了。我傻不愣登的 选择 “库管理” 找半天找不到。最后才发现自己 眼睛抽抽。
- 安装驱动
进入下面目录D:\App\Arduino\hardware\Arduino_STM32\drivers\win,以管理员身份运行install_drivers.bat和install_STM_COM_drivers.bat
然后将开发板的串口线断开,将开发板BOOT0接GND后按住重置键不松,使用手机数据线连接开发板MicroUSB和电脑USB开始安装驱动,会发现一个新的USB串行设备下面为COM31
注:我经常得重复好几次才能成功。所以不要灰心。加油
补充:记得将BOOT0 的跳线帽拨回 O,(四 章节 第二点 ,改为了 1)
- Arduino 软件参数选择
注:串口一定要选刚安装驱动出来的:一般为:Maple Mini 结尾
五,好了 我们可以 像 普通 arduino 一样烧录我们的 stm32 了
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(PC13, OUTPUT);
Serial.begin(115200);
Serial1.begin(115200); //RX=PA9,TX=PA10
Serial2.begin(115200); //RX=PA2,TX=PA3
Serial3.begin(115200); //RX=PB10,TX=PB11
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(PC13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(PC13, LOW); // turn the LED off by making the voltage LOW
delay(1000);
Serial.println("Test Serial");
Serial1.println("Test Serial1");
Serial2.println("Test Serial2");
Serial3.println("Test Serial3");// wait for a second
}
注:一般实例代码里面默认的 点等程序用的是PB1,我们的是 PC13 (上面也说了)。所以需要改一下。
7.针脚定义