本文目的是在Arduino平台上进行STM32F103C8T6的串口通信实验,学习在Keil MDK平台以外的Arduino平台进行STM32的开发。
目录
(一)安装和配置Arduino IDE开发环境
工欲善其事,必先利其器。
1.Arduino简介
Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。
2.安装Arduino IDE
- 方式一:官网下载
链接:https://www.arduino.cc/en/software - 方式二:微软商店下载
可以直接去微软商店下载Arduino IDE,也可以在官网点击下图中的标号2跳转到微软商店中下载。
注意:如果是之前安装过Arduino IDE但是升级后出现双击程序不能打开的情况,
可以尝试删除C:\Users\Administrator\AppData\Local\Arduino15的library_index.json文件,
重新启动该IDE后会使之重新生成该文件;原因是因为升级Arduino IDE时造成了该文件的损坏。
3.配置STM32F10X的开发环境
- 在线安装:
参考文章:在Arduino下开发STM32F103 - 离线安装
参考文章:Arduino支持STM32套件的开发板管理器安装 - 注意事项
如果在Arduino IDE里安装STM32开发板时在“附加开发板管理器地址”中输入https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
,这可能会导致在开发板管理器中无法找到STM32开发板,同时还会提示下载https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json 时出错
的信息。- 原因分析:
可能是因为从GitHub下载文件时太慢导致出错。 - 解决方法:
- 方法一:将
https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
更换为http://dan.drown.org/stm32duino/package_STM32duino_index.json
- 方法二:进行离线安装
- 方法一:将
- 原因分析:
(二)Arduino IDE平台进行串口通信实验
1.实验说明
- 实验硬件
- 主控芯片:STM32F103C8T6
- 实验软件:Arduino IDE 1.8.13
- 实验器材:USB转串口、stm32核心板、面包板、若干杜邦线
- 实验要求
- 持续向串口输出
Hello world!!!
; - 当接收到
stop!
时,停止输出; - 当接收到
begin!
时,继续输出。
- 持续向串口输出
- 实验配置
- 开发板选择:根据自己的STM32芯片型号选择
- 参数配置:根据芯片来配置
- 开发板选择:根据自己的STM32芯片型号选择
- 注意:
- 我这里使用串口下载,因此我这里的
Upload method
选择的是Serial
,不然程序上传的时候会报错。
- 上传程序时,需要保证芯片复位且未处于运行状态,否则可能会产生如下错误:
Failed to init device. stm32flash 0.4 http://stm32flash.googlecode.com/ Using Parser : Raw BINARY Interface serial_w32: 115200 8E1
- 我这里使用串口下载,因此我这里的
2.实验代码
int flag = 1; //串口发送标志位,1表示正在发送,0表示停止发送
void setup() {
// put your setup code here, to run once:
Serial.begin(115200); //打开串口,波特率为115200
pinMode(PC13, OUTPUT); //PC13模式设置为输出,默认为高电压
}
void loop() {
// put your main code here, to run repeatedly:
if (flag == 1)
{
Serial.println("Hello World!!!");
digitalWrite(PC13, HIGH); //LED灭
delay(500); // 延时
digitalWrite(PC13, LOW); //LED亮
delay(500); //延时
}
usart();
}
void usart()
{
String Stop_flag = "stop!\n"; //停止发送信号
String Begin_flag = "begin!\n"; //重新发送信号
String data = ""; //储存接受到的数据
while (Serial.available() > 0) //判断串口是否接收到数据
{
data = Serial.readString(); //读取字符到字符串data中
//Serial.print(data);
}
if (data == Stop_flag)
flag = 0; //表明停止发送
if (data == Begin_flag)
flag = 1; //表明恢复发送
}
3.实验结果及分析
- 串口监视器
当没有发送给STM32任何数据或者发送的数据不是停止发送信合和恢复发送信号时,每隔1s发送一次Hello World!!!
,当接收到停止发送信号时停止串口数据发送;当接收到恢复发送信号时就恢复串口数据发送。
- 硬件状态
使用LED灯的亮灭状态指示串口数据的发送状态,每发送一次数据,LED灯就亮灭一次。
(三)总结
通过这次Arduino IDE的STM32串口实验,拓宽了我的视野。原本以为STM32的标准开发平台就是Keil MDK,没想到使用Arduino IDE也能用于STM32的开发,而且感觉比在Keil MDK上更加容易和方便。这让我对于Arduino IDE的了解又有了更加深入地认识。
参考文章:
1.【Arduino】IDE闪退,无法启动问题脱坑
2.在Arduino下开发STM32F103
3.Arduino支持STM32套件的开发板管理器安装
4.Arduino学习笔记(2)-- Arduino基本函数
5.Arduino 串口通讯参考笔记 - Serial 类库及相关函数介绍
6.Arduino–百度百科
7.【Arduino】(三)Arduino IDE的安装与使用(电脑:Windows操作系统)