在Ardunio完成STM32开发板的串口通信程序

一.安装 Ardunio IDE 和相关软件支持库,在Ardunio 完成STM32板子的串口通信程序

1.实验要求:

1)持续向串口输出“Hello world!”;
2)当接收到“stop!”时,停止输出。

2.进行Ardunio IDE 和相关软件支持库的安装

在这里插入图片描述
在这里插入图片描述

3.进行配置Ardunio IDE

我们将打包文件中的Arduino_STM32整个文件夹拷贝到Arduino安装目录下的hareware下。
在这里插入图片描述
在这里插入图片描述

4.进入开发板管理器,输入AMR,选中Cortex-M3系列的编译支持文件并安装

在这里插入图片描述

5.我们使用的是指南者stm32开发板,点击工具选择Generic STM32F103V series

在这里插入图片描述
然后进行Variant的选择:STM32F103VE;Upload method的选择:Serial;CPU Speed的选择:72Mhz(normal);Optimize的选择:Smarllest(defaut)

6.硬件的连接及程序的烧录

我们将STM32指南针连接到电脑上,注意usb线连接的开发板的"usb转串口"这个接口。
然后将代码复制到Arduino软件中去,代码如下所示:

int flag=1;   
char Stop[]="stop\n";
void setup() {
//初始化
pinMode(PB0, OUTPUT);//PB0为绿色,PB1为蓝色,PB5为红色,可根据需要改动
Serial.begin(115200);
}
void loop() {
int i=0,flag_s=0;
char inByte[50];
digitalWrite(PB0, HIGH); //小灯亮
delay(500); // 延迟
digitalWrite(PB0, LOW); //小灯灭
delay(500); // 延迟
while (Serial.available()> 0)     //当发送缓冲区有数据时
{
        inByte[i] = Serial.read();    //从串口的缓冲区取出并读取一个Byte的数据
        delay(10); 
        i++ ;                              
}
if(Stop[i]=inByte[i])
{
  if(Stop[i-1]==inByte[i-1]&&Stop[i-2]==inByte[i-2]&&Stop[i-3]==inByte[i-3])
  {
  flag=0;
  Serial.println("收到!");
  }//当收到stop命令时停止并回复收到
}
if(flag==1)
{  
Serial.println("Hello World!");//向串口发送数据
delay(100); // 延迟
}
}

在这里插入图片描述
选择连接串口3,然后依次我们进行点击验证,烧录,这里注意每一次烧录文件前一定要按开发板上的RESET按钮。
在这里插入图片描述
我们可以看到板子开始闪烁绿色的光。
点击工具上的串口监视器,将波特率设为115200,可以看到如下画面:
在这里插入图片描述
输入"stop“后结果如下所示:完成了实验要求:
在这里插入图片描述
板子闪灯如下所示:

在这里插入图片描述

二.以实例程序(比如串口通信),分析基于标准库函数与基于HAL库函数的stm32编程方式的差异。

(1)STM32有非常多的寄存器,而导致了开发困难,所以为此ST公司就为每款芯片都编写了一份库文件,也就是工程文件里stm32F1xx…之类的。在这些 .c .h文件中,包括一些常用量的宏定义,把一些外设也通过结构体变量封装起来,如GPIO口时钟等。所以我们只需要配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能。也是目前最多人使用的方式,也是学习STM32接触最多的一种开发方式。
(2)而HAL库是ST公司目前主力推的开发方式,全称就是Hardware Abstraction Layer(抽象印象层)。库如其名,很抽象,一眼看上去不太容易知道他的作用是什么。它的出现比标准库要晚,但其实和标准库一样,都是为了节省程序开发的时期,而且HAL库尤其的有效,如果说标准库把实现功能需要配置的寄存器集成了,那么HAL库的一些函数甚至可以做到某些特定功能的集成。也就是说,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。并且HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一样的,例如在F4上开发的程序移植到F3上是不能通用的,而使用HAL库,只要使用的是相通的外设,程序基本可以完全复制粘贴,注意是相通外设,意思也就是不能无中生有,例如F7比F3要多几个定时器,不能明明没有这个定时器却非要配置,但其实这种情况不多,绝大多数都可以直接复制粘贴。是而且使用ST公司研发的STMcube软件,可以通过图形化的配置功能,直接生成整个使用HAL库的工程文件,可以说是方便至极,但是方便的同时也造成了它执行效率的低下,在各种论坛帖子真的是被吐槽的数不胜数。
参考:STM32 之 HAL库.

三. 试玩stduino IDE,然后谈一下体会

Stduino IDE是一款面向32位处理器快速入门学习的集成开发平台,目前已经支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能。其更加容易掌握熟练,不是太需要单片机或编程基础,能进行快速的开发。其界面如下所示:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Arduino ESP32 中,可以使用软串口(SoftwareSerial)库来实现串口通信。软串口是通过软件模拟的串口,可以通过任意两个 GPIO 引脚来实现串口通信。 下面是一个示例代码,演示了如何使用软串口在 ESP32 上进行串口通信: ```c++ #include <SoftwareSerial.h> // 设置软串口的引脚 SoftwareSerial mySerial(2, 3); // RX, TX void setup() { Serial.begin(9600); // 打开硬串口,用于调试输出 mySerial.begin(9600); // 打开软串口 } void loop() { if (mySerial.available()) { // 如果软串口有数据可读 char c = mySerial.read(); // 读取一个字符 Serial.print(c); // 在硬串口上输出字符 } if (Serial.available()) { // 如果硬串口有数据可读 char c = Serial.read(); // 读取一个字符 mySerial.write(c); // 在软串口上发送字符 } } ``` 在上面的代码中,我们使用了引脚 2 和 3 作为软串口的 RX 和 TX 引脚,分别连接到另一个串口设备。在 `setup()` 函数中,我们打开了硬串口和软串口,分别用于调试输出和串口通信。 在 `loop()` 函数中,我们使用了 `mySerial.available()` 和 `Serial.available()` 函数来检查软串口和硬串口是否有数据可读。如果有数据可读,我们就使用 `mySerial.read()` 和 `Serial.read()` 函数来读取数据,并通过 `mySerial.write()` 和 `Serial.print()` 函数来发送和输出数据。 需要注意的是,在使用软串口时,需要确保 RX 和 TX 引脚不会被其他设备占用。此外,软串口的波特率需要与另一个串口设备的波特率相同,否则数据可能无法正确传输。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值