Ardunio IDE完成STM32板子的串口通信
一、Ardunio简介
Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。
它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE。
Arduino IDE适用于Windows、Macintosh OS X、Linux三大主流操作系统
对Arduino的编程是通过 Arduino编程语言 (基于 Wiring)和Arduino开发环境(基于 Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。百度百科
Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。
二、 Ardunio IDE安装以及相关配置
2.1 前期准备
由于是要进行烧录到STM32上进行相关串口通信,所以需要准备一下软件和硬件。
①软件
- Ardunio IDE(1.8以上)
- Demonstrator GUI(ST官方烧录软件)
②硬件
- USB转TTL
- STM32核心板(其他STM32板也可代替)
2.2 软件安装以及配置
相关资料:
- Arduino IDE开发STM32F10X的环境
- 提取码: q251
- Arduino_STM32-master.zip中是国外大佬配置的STM32的文件包。
- STM32duino-bootloader-master.zip:相关串口文件
2.2.1 安装Arduino IDE并配置
①打开arduino-1.8.12-windows.exe进行安装
软件安装路径不要有中文和空格以及其他字符
然后一路点击’NEXT’即可安装成功。
②将打包文件中的Arduino_STM32整个文件夹拷贝到Arduino IDE安装目录下的hareware下
这个是默认的安装路径下的handware
C:\Program Files (x86)\Arduino\hardware
这些配置文件是一位国外大佬写的,他的最新配置文件在github网站国外大佬STM32配置文件
拷贝之后在Arduino中进行检查下:工具>开发板,在下一级菜单目录下就有STM32F1系列的板子了。
③在Arduion中安装编译支持文件
菜单栏>工具>开发板>开发板管理器,进行搜索ARM。
这个是在线安装需要下载3~5分钟。
④安装串口烧录软件flash_loader_demo_v2.8.0.exe
⑤插入端口
由于之后串口烧录文件需要用到端口所以这一步进行端口连接。
USB转TTL与STM32连线:
stm32核心板 | USB转串口 |
---|---|
PA9 (USART1-TX) | RXD |
PA10 (USART1-RX) | TXD |
3V3 | 3V3 |
GND | GND |
然后将STM32开发板上的BOOT0用短路冒接入高电平1,BOOT1用短路冒接入低电平0。
示范如下:
⑥确认USB转TTL工具连线无误后,将USB转TLL插入电脑USB接口,然后在系统菜单中找到Demonstrator GUI并打开。
如果文件没没有显示你的端口号,请跳至下载的压缩包文件
STM32duino-bootloader-master.zip
目录下bootloader_only_binaries
中寻找适合自己板子的LED端口。
如果还是没有自己的LED引脚,也不要着急,默认选择PC13之后也可以外接LED。有没有LED不要紧,最后调试串口成功才能说明配置环境算是成功了。
这里串口烧录软件就安装成功了。
2.3 测试软件以及烧录测试程序
①打开Arduino
以上配置很重要
这里建议也进行如下设置
- 文件>首选项
可以显示行号以及显示详细验证与上传信息。
②测试代码
void setup() {
//initialize digital pin LED_BUILTIN as an output.
pinMode(PC13, OUTPUT);
Serial.begin(115200);
}
// the loop function runs over and overagain 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); // wait for a second
Serial.println("Hello World!");
delay(100); // wait for a second
}
以上代码默认PC13为LED,请各位注意。
这里对代码没有相对应的解释,大家有兴趣的可以自己查找学习下。
③编译
编译成功。
④烧录
点击上传即可。
这里一定要设置好BOOT0和BOOT1的跳线,否则将无法上传。
⑤测试效果
串口通信一定要设置正确的波特率进行传输与接收,否则将会出现乱码和接收不到的情况。
以上软件安装以及配置大体参考使用Arduino IDE开发STM32F10X
三、 按照任务要求相关代码调试
3.1 任务要求
1)持续向串口输出“Hello world!”;
2)当接收到“stop”时,停止输出。
3)当接收到“begin”时,开始输出。
默认一开始就还是输入“Hello world!”。
3.2程序代码
- 程序代码
String Stopflag = "stop\n";//停止发送信号,因为默认读字符串是会将'\n'读入所以将Stopflag= "stop\n"
String Beginflag = "begin\n"; //恢复发送信号
int flag = 1;//设置标志位
String inputString = "";//定义inputString
void setup() {
pinMode(PC13, OUTPUT);//PC13模式设置为输出,有个现象就是打开这个端口,PC13默认高电压
Serial.begin(115200);//设置波特率为115200
}
void loop() {
digitalWrite(PC13, HIGH); //LED灭
dely(1000); // 延时
digitalWrite(PC13, LOW); //LED灭
delay(1000); // 延时,标识系统正在运行
while (Serial.available())//输入信号进入缓冲
{ inputString = Serial.readString(); //直接读取字符串至inputString
delay(2);//这里延时是为了字符串完整读入
}
// if (inputString.length() > 0) //如果inputString长度大于0,则进行输出数据,可判断字符是否读入
// {
// Serial.print(inputString);//输出,
//
// }
if (Stopflag.equals(inputString)) //停止标志位于输入信号一致,便停止发送数据
{
flag = 0;//标志位置0
Serial.println("已停止发送");
inputString = "";//清空,跳出if--因为之前实验有出现过一直在if循环的情况出现
}
if (Beginflag == inputString) //开始标志位于输入信号一致,便开始恢复发送数据
{
flag = 1;
Serial.println("已恢复发送");
inputString = "";
}
inputString = ""; //inputString置空
if (flag)
{
//flag为1表示允许stm32发送数据
// if (flag == 1) times++;
// if ( flag == 1)
Serial.println("hello Windows!");
delay(100);
}//代码来源Liu-FE
}
3.3 实现效果
输入判定的时候有明显延迟,该延迟是为了串口可以有效读出缓存区的数据。
相关函数介绍参考Arduino官网串口使用指南
四、 总结
通过对Arduino的初步认识与学习,感受到了Arduino的简单易用以及良好的编程环境,大大提高了我对该Arduino IDE和Arduino开发板的兴趣。其中也遇到了不少问题,但在解决问题的同时,也提升了分析问题,解决问题的能力。希望自己日后可以腾出更多的时间来了解并学习Arduino。
五、 参考资料
[1]使用Arduino IDE开发STM32F10X
[2]Arduino基础入门篇23—串口通讯
[3]Arduino 的串口通信
[4]Arduino中文社区