Arduino 基于 STM32 的串口通讯与 LED 灯闪烁
日期: 2020-12-14 分类: 跨站数据测试 843次阅读
本文内容:
安装 Arduino IDE 和相关软件支持库,在 Arduino 完成 STM32 板子的串口通信程序:
1)持续向串口输出 “ Hello world!”,当接收到 “ stop! ” 时,停止输出。
2)LED 灯间断性闪烁。
实验工具:
——硬件:
——软件:
- Arduino IDE 安装包——提取码:3ffq
一、Arduino IDE 配置
1、安装 Arduino IDE
- 双击 arduino-1.8.12-windows.exe 文件安装,一直默认安装即可(可以更改安装路径)。
2、配置文件
- 将文件中的 Arduino_STM32 整个文件夹拷贝到 Arduino IDE 安装目录下的 hareware 下。
这些配置文件是一位国外大佬写的,他的最新配置文件在 github 网站:https://github.com/rogerclarkmelbourne/Arduino_STM32
3、安装编译支持文件
- 打开 Arduino 软件。
- 工具 ——> 开发板 ——> 开发板管理器。
- 搜索框内输入:ARM ,安装
Arduino SAM Boards(32-bits ARM Cortex-M3)
,点击安装按钮。
- 安装完成后,退出开发板管理器。
4、安装STM32固件烧录软件
- 双击 flash_loader_demo_v2.8.0.exe 文件,进行安装。
- 安装过程中会叫你输入信息,随便输入即可。
二、烧录 .bin 文件
1、连接 STM32
- 使用 USB 线插入 USB 转串口上。
- 再用短路帽按下图所示插入。
- RXD —(接)— A9
- TXD —(接)— A10
- 然后用短路帽将 BOOT0 接入 3V3 伏高电平
- 用短路帽将 BOOT1 接入 GND 低电平
2、烧录 .bin 文件
- 在系统菜单栏中找到 Demonstrator GUI ,双击打开。
- 就会出现 COM4 串口(接不同的串口就不一样,比如:COM5等)。
- 然后一直点 “ Next ” ,直到出现下面的界面。
- 首先在百度网盘下载的 Ardunio IDE 安装包内解压缩 STM32duino-bootloader-master.zip 文件。
- 然后勾选上,点击 “ … ” 。
- 从刚刚解压缩后的
STM32duino-bootloader-master\binaries\
文件中选择一个 bin 文件(我的是野火 STM32 指南者,LED 灯的 GPIO 有 PB5、PB0、PB1,分别表示红色、绿色、蓝色,所有的 bin 文件中只有 pb0 ,所以我选择的是generic_boot20_pb0.bin
)。
说明:
如果没有找到或者开发板上没有板载 LED ,就任选一个如 PC13 ,然后在 PC13 外接一个 LED 吧,可以像我一样选 generic_boot20_pb0.bin 就行,有没有 LED 不要紧。
- 添加完成后,点击 “ Next ”。
- 烧录成功后,点击 “ Close ” 关闭烧录软件。
三、程序实现
1、开发环境设置
- 我的 STM32 指南者的 CPU 是
STM32F103VET6
,所以开发板我选择的是Generic STM32F103V series
(这个要根据自己的单片机 CPU 型号选择)。
- Variant 选择的是:
STM32F103VE
(还是根据自己的 CPU 型号选择)。
- Upload method 选择的是:
Serial
(如果选择 ST-Link 等其它的,就需要自行安装驱动)。
- CPU Speed(MHz) 选择的是:
72Mhz
(绝大多数单片机的主频都是 72MHz ,一般默认即可,我的 STM32 指南者也是 72MHz)。
- Optimize :
Smallest(default)
(默认的,不用改变)。
- 端口选择的是:COM4。
2、代码编写
- 复制以下的代码。
String data = "";
void setup() {
// put your setup code here, to run once:
pinMode(PB0, OUTPUT);
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
while (Serial.available() > 0)
{
data += char(Serial.read());
delay(2);
}
if (data == "stop!\n")
{
digitalWrite(PB0, HIGH);
Serial.println("STM32 has stopped!\n");
data = "";
while(1);
}
digitalWrite(PB0, HIGH); //turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(PB0, LOW); //turn the LED off by making the voltage LOW
delay(1000); // wait for a second
Serial.println("Hello World!");
delay(1000); // wait for a second
}
- 粘贴进代码编辑窗口中(
注意
:管脚要根据自己的 LED 管脚设置)。
- 点击 “√” 按钮,编译代码(点了之后,会弹出文件窗口,保存这个文件即可),编译成功显示如下图。
- 点击 “→” 按钮,烧录到 STM32 中,烧录成功则如下图所示。
注意:
每一次烧录开始前需要按一下开发板上的复位键才能下载成功,如果需要断电保留程序,下一次上电就运行最后一次下载的程序,就需要把开发板上的 BOOT0 从高电平 1 接回低电平 0 ,再次下载最新的程序就需要再次把 BOOT0 从低电平 0 接回高电平 1 。
- 点击右上角的放大镜(串口监视器)。
- 串口输出结果如下。
- LED 灯闪烁(当输入 stop! 后,LED 灯不再闪烁)。
四、总结
相比于 Keil 来说,Arduino IDE 太过于简单了,对开发人员来说很方便,但是相对于 Keil 来说涉及底层没那么深,Keil 可以控制寄存器的各种操作,而 Arduino IDE 已经将这些操作给封装了,如果要深入的学习单片机的话,还是从 Keil 玩起。
五、参考资料
上一篇: 通过Ardunio完成基于stm32f103指南者的串口通信
下一篇: 一、操作系统的历史
精华推荐