Ardunio IDE完成STM32板子的串口通信

一、Ardunio简介

Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。

它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE。

Arduino IDE适用于WindowsMacintosh OS XLinux三大主流操作系统

对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_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下

这个是默认的安装路径下的handwareC:\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
3V33V3
GNDGND

然后将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中文社区

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值