在Arduino完成STM32的串口通信

一、安装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

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值