文章目录
一、安装Arduino
安装教程:Arduino的安装
二、串口通信
1、任务要求
(1)持续向串口输出“Hello world!”
(2)当接收到“stop!”时,停止输出。
2、所用器材
① STM32最小核心板(STM32F103C8T6)
②USB转TTL(ch340芯片)
③ IDE:Arduino
④ 实验所用串口:USART1
3、主要代码
int flag=1; //发送标志位
char Stop[]="stop\n"; //停止命令
char Start[]="begin\n"; //开始命令
void setup()
{
Serial.begin(115200); //串口初始化
}
void loop()
{
int i=0,flag_s=0,flag_s1=0;
char inByte[50];
while (Serial.available()> 0) //当发送缓冲区有数据时
{
inByte[i] = Serial.read(); //从串口的缓冲区取出并读取一个Byte的数据
delay(10);
if(Stop[i]!=inByte[i]) //判断发送数据是否与停止命令相等
flag_s=0;
else flag_s=1;
if(Start[i]!=inByte[i]) //判断发送数据是否与开始命令相等
flag_s1=0;
else flag_s1=1;
i++;
}
if(flag_s==1) //如果与停止命令相等
{
flag=0; //发送标志位置为0
Serial.println("已停止发送");
flag_s=0; //初始化判断,防止没有发送数据时一直执行
}
if(flag_s1==1) //如果与开始命令相等
{
flag=1; //发送标志位置为1
Serial.println("开始发送");
flag_s1=0; //初始化判断,防止没有发送数据时一直执行
}
if (flag==1) //判断发送标志位是否为1
{
Serial.println("Hello World!");
delay(1000);
}
}
4、代码解析
-
Arduino程序基本结构由setup() 和loop() 两个函数组成;
Arduino控制器通电或复位后,即会开始执行setup() 函数中的程序,该部分只会执行一次。
我们在setup() 函数中完成串口初始化。 -
在setup() 函数中的程序执行完后,Arduino会接着执行loop() 函数中的程序。而loop()函数是一个死循环,其中的程序会不断的重复运行。
我们会在loop() 函数中完成程序的串口通信功能。 -
Serial.available() 的意思是:返回串口缓冲区中当前剩余的字符个数。一般用这个函数来判断串口的缓冲区有无数据,当Serial.available()>0时,说明串口接收到了数据,可以读取;
-
Serial.read()指从串口的缓冲区取出并读取一个Byte的数据,比如有设备通过串口向Arduino发送数据了,我们就可以用Serial.read()来读取发送的数据。
-
Serial.println()和Serial.print()是Arduino的基本输出函数,区别在于后者比前者多了回车换行。
三、代码效果
四、基于标准库函数与基于HAL库函数的stm32编程方式的差异
- 标准外设库(Standard Peripherals Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。这应该是目前使用最多的ST库,几乎全部使用C语言实现。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。
- HAL库是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。
五、stduino IDE使用体会
Stduino IDE是一款面向32位处理器快速入门学习的集成开发平台,支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能。
-
在使用keil编写stm32程序的时候,我们需要读他的开发手册,如果想对寄存器进行操作,还得记住每个寄存器的位置和作用,用库函数进行操作也得知道每个函数的意义,需要花费比较多的学习时间成本。
-
Ardunio在操作方面比keil要简单得多,选好自己使用的设备后就可以开始编程了,编程方面只要会C语言就可以写出程序,还支持一键下载程序到单片机,同时配有串口监视器,可以看到单边机的输出。
-
stduino IDE本身就是基于Arduino IDE进行开发的,所以它具备了Arduino IDE的所有优点,简单易上手,同时还多了一些Arduino IDE没有的功能,比如GDB调试等。
-
单纯想要对单片机编程的话,掌握了keil和Arduino就已经足够了,那为什么还要不断开发新的软件呢?我认为这是为了让单片机编程变得更加简单,高效,让更多小白可以进入到这一嵌入式开发这一领域,就如同我们目前的4G已经可以满足日常的影音需求,但是我们还是研究出了5G,甚至已经在研究6G。
六、参考资料
1、Arduino编程基础
2、https://blog.csdn.net/qq_26164209/article/details/83274451
3、https://blog.csdn.net/weibo1230123/article/details/80042171
4、https://blog.csdn.net/f394028400/article/details/90263782