STM32
直播中

剪刀脚

8年用户 856经验值
私信 关注
[问答]

如何在Ardunio完成STM32板子的串口通信程序呢

如何在Ardunio完成STM32板子的串口通信程序呢?有哪些基本步骤?

回帖(1)

韩香茹

2021-12-8 11:37:24
一、Ardunio下STM32 F103的串口通信

1、实验要求

在Ardunio 完成STM32板子的串口通信程序:
(1)持续向串口输出“Hello world!”
(2)当接收到“stop!”时,停止输出。
2、开发环境

开发软件: Ardunio IDE
开发板:stm32f103指南者开发板
3、安装并配置Ardunio IDE

(1)安装Ardunio IDE
双击arduino-1.8.12-windows.exe正常安装,一直按默认方式安装下去





将Arduino_STM32整个文件夹拷贝到Arduino IDE安装目录下的hareware下









打开Arduion软件查看菜单栏工具开发板…就能看见STM32各系列的芯片





(2)配置Ardunio IDE
打开Arduino,点击菜单栏工具开发板…第一栏的开发板管理器





输入ARM关键字搜索,选中Cortex-M3系列的编译支持文件并安装





待安装完成,退出开发板管理器。
4、完成STM32板子的串口通信

(1)选择芯片
打开Arduino,在菜单栏工具开发板选择芯片类型,由于我使用的是stm32f103指南者,所以选择为Generic STM32F103V series





然后Variant,Upload method,CPU Speed,Optimize这几个的选择如下:















(2)连接电脑与指南者开发板
直接USB线连接的开发板的"USB转串口"接口

用黄色跳帽将BOOT0与3v3相连,BOOT1与GND相连,RXD与A9相连,TXD与A10相连

(3)写入程序并烧录到板子里
在Ardunio中写入串口通信程序,代码如下:

int flag=1;   
char Stop[]="stopn";
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 = Serial.read();    //从串口的缓冲区取出并读取一个Byte的数据
        delay(10);
        i++ ;                              
}
if(Stop=inByte)
{
  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按钮




小灯开始闪烁

打开串口监视器可看到串口收到的信息

二、基于不同函数的stm32编程方式的差异

以实例程序(比如串口通信),分析基于标准库函数与基于HAL库函数的stm32编程方式的差异。
ST为开发者提供了非常方便的开发库。到目前为止,有标准外设库(STD库)、HAL库、LL库 三种。
1、标准外设库

STM32标准外设库(Standard Peripherals Library,简称SPL)之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。
该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。
但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。
2 、HAL库

HAL库是ST公司目前主力推的开发方式,全称就是Hardware Abstraction Layer(抽象印象层)。它的出现比标准库要晚,但其实和标准库一样,都是为了节省程序开发的时期,而且HAL库尤其的有效,如果说标准库把实现功能需要配置的寄存器集成了,那么HAL库的一些函数甚至可以做到某些特定功能的集成。也就是说,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。
并且HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一样的,例如在F4上开发的程序移植到F3上是不能通用的,而使用HAL库,只要使用的是相通的外设,程序基本可以完全复制粘贴,注意是相通外设,意思也就是不能无中生有,例如F7比F3要多几个定时器,不能明明没有这个定时器却非要配置,但其实这种情况不多,绝大多数都可以直接复制粘贴。
而且使用ST公司研发的STMcube软件,可以通过图形化的配置功能,直接生成整个使用HAL库的工程文件,可以说是方便至极,但是方便的同时也造成了它执行效率的低下,在各种william hill官网 帖子真的是被吐槽的数不胜数。

三、stduino IDE试玩体会

1、Ardunio IDE

Ardunio IDE在操作方面比keil更简单,只要选好自己使用的设备后就可以用C语言开始编程了,还支持一键下载程序到单片机,同时配有串口监视器,可以看到单片机的输出。
2、stduino IDE

stduino IDE本身就是基于Arduino IDE进行开发的,所以它具备了Arduino IDE的所有优点,简单易上手,同时还多了一些Arduino IDE没有的功能,比如GDB调试等。
四、总结

以上内容即为在Ardunio IDE完成STM32 F103指南者的串口通信,并对基于标准库函数与基于HAL库函数的stm32编程方式的差异进行了简要分析。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分