文章目录
前言
-
安装 Arduino IDE 和相关软件支持库,在Arduino 完成STM32板子的串口通信程序:1)持续向串口输出“Hello world!”;2)当接收到“stop!”时,停止输出。
-
以实例程序(比如串口通信),分析基于标准库函数与基于HAL库函数的stm32编程方式的差异。
-
大概是受到Ardunio IDE的启发,网上有一个国人版的MCU集成开发平台, stduino IDE,请试玩之,然后谈一下体会,比如:已经有了Keil、Arduino,觉得是否还有必要“再造车轮”?
一、安装 Arduino IDE 和相关软件支持库
Arduino IDE是Arduino产品的软件编辑环境。简单的说就是用来写代码,下载代码的地方。任何的Arduino产品都需要下载代码后才能运作。我们所搭建的硬件电路是辅助代码来完成的,两者是缺一不可的。如同人通过大脑来控制肢体活动是一个道理。如果代码就是大脑的话,外围硬件就是肢体,肢体的活动取决于大脑,所以硬件实现取决于代码。
arduino ide是一款专业的arduino开发工具,主要用于arduino程序的编写和开发,拥有开放源代码的电路图设计、支持ISP在线烧,同时支持Flash、Max/Msp、VVVV、PD、C、Processing等多种程序兼容的特点。
1.在官网下载安装压缩包,解压后点击“arduino-1.8.12-windows”
安装过程如下:
2.Arduino IDE 相关配置
打开Arduino “工具”——“开发板:“Arduino Uno” ”——“开发板管理器”
在开发板管理器上搜索ARM 选择第一个安装
然后再次查看 “工具”——“开发板:“Arduino Uno” ”
在之前的安装包找到这个文件“Arduino_STM32-master”
将它复制到Arduino IDE的安装目录下 如图:
以下是复制之后,多了很多的STM32的开发板型号
3.检查环境是否搭建成功
点击“文件”——“示例”——“A_STM32_Example”——“Digital”——“Blink”
点击编译,显示编译成功,至此环境搭建完成。
二、在Arduino 完成STM32板子的串口通信程序
我用的是指南者STM32F103VE
1.打开Arduino,新建文件
2.输入程序
String rString=""; //接收到达字符串
String Stop_flag="stop";
String Begin_flag="begin";
void setup() {
//初始化
pinMode(PB1, OUTPUT); //PB0为绿色,PB1为蓝色,PB5为红色,可根据需要改动
Serial.begin(115200);
}
void loop()
{
int i=0,flag=1;
char inByte[1000];
digitalWrite(PB1, HIGH); //小灯亮
delay(500); // 延迟
digitalWrite(PB1, LOW); //小灯灭
delay(500); // 延迟
Serial.println("Hello world!");//向串口发送数据
while (Serial.available()> 0) //当发送缓冲区有数据时
{
rString = Serial1.readString(); //将接收数据存到接收字符串里
}
if(rString==Stop_flag)
{
Serial.println("收到!");//当收到stop命令时停止并回复收到!
while(1)
{
while (Serial.available()> 0) //当发送缓冲区有数据时
{
rString = Serial1.readString(); //将接收数据存到接收字符串里
}
if (rString==Begin_flag)
{
Serial.println("继续发送");
break;
} //表明恢复发送,跳出死循环
}
}
}
3.保存
4.点击“工具” 选择与你自己开发板同型号的板子
5.Variant选择“STM32F103VE”
6.Upload method选择“Serial”
7.用USB线将开发板和电脑连接起来 如图
8.编译,先按板子上的复位键,再上传
运行结果如下:
三、分析基于标准库函数与基于HAL库函数的stm32编程方式的差异
标准库
标准外设库(Standard Peripherals
Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。在使用中我们只需要配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。
ST公司为每款芯片都编写了一份库文件,也就是工程文件里stm32F1xx…之类的。在这些 .c .h文件中,包括一些常用量的宏定义,把一些外设也通过结构体变量封装起来,如GPIO口时钟等。所以我们只需要配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能。
HAL库
全称Hardware Abstraction
Layer(抽象印象层)。HAL库的一些函数可以做到某些特定功能的集成。也就是说,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。并且HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一样的,例如在F4上开发的程序移植到F3上是不能通用的,而使用HAL库,只要使用的是相通的外设,程序基本可以完全复制粘贴。
HAL库是ST公司提供的新标准库,包含在ST为新的标准库注册了一个新商标:STMCube当中。可以说HAL库就是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品
四、试玩MCU集成开发平台
Stduino IDE是一款面向32位处理器快速入门学习的集成开发平台,已率先支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能!