ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Ardunio完成STM32的串口通信程序

2020-12-13 21:04:06  阅读:222  来源: 互联网

标签:HAL Arduino STM32 Ardunio flag 串口 IDE 外设


一、Arduino IDE软件下载安装

1、进入官网
https://www.arduino.cc/en/software
在这里插入图片描述
在这里插入图片描述

由于官网下载要钱,所以我分享一个免费的
链接:https://pan.baidu.com/s/1sQmTcyIbg5yDii7-pfTwDA
提取码:y8q3
2、安装
在这里插入图片描述

安装完成
在这里插入图片描述
3、把Arduino_STM32文件夹拷贝到Arduino\hardware下
在这里插入图片描述
在这里插入图片描述
4、安装编译支持文件(工具-开发板-开发板管理器-ARM)
在这里插入图片描述

二、安装串口烧录软件

1、安装
在这里插入图片描述
安装完成
在这里插入图片描述
2、连接串口
在这里插入图片描述
在这里插入图片描述
通过USB转TTL连接电脑。

3、打开GUI
在这里插入图片描述
4、点next
在这里插入图片描述
在这里插入图片描述
5、安装完成
在这里插入图片描述

三、Ardunio 完成STM32的串口通信

1、任务要求

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

2、打开Arduino(进行如下设置)
点开工具
在这里插入图片描述
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);
    }
    
}


3、编译(1编译 2上传)
在这里插入图片描述
编译成功
在这里插入图片描述
4、上传
在这里插入图片描述
5、效果展示
打开工具-串口监视器
在这里插入图片描述
串口监视器(COM3)
在这里插入图片描述

四、基于标准库函数与基于HAL库函数的stm32编程方式的差异

1、标准库函数
标准外设库(Standard Peripherals Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。在使用中我们只需要配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。
2、HAL库函数
HAL库是ST公司提供的新标准库,包含在ST为新的标准库注册了一个新商标:STMCube™当中。可以说HAL库就是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。
3、差异
(1)HAL库的出现比标准库要晚,但其实和标准库一样,都是为了节省程序开发的时期,而且HAL库尤其的有效,如果说标准库把实现功能需要配置的寄存器集成了,那么HAL库的一些函数甚至可以做到某些特定功能的集成。也就是说,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。
(2)HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一样的,例如在F4上开发的程序移植到F3上是不能通用的,而使用HAL库,只要使用的是相通的外设,程序基本可以完全复制粘贴,注意是相通外设,意思也就是不能无中生有,例如F7比F3要多几个定时器,不能明明没有这个定时器却非要配置,但其实这种情况不多,绝大多数都可以直接复制粘贴。

五、试玩 Stduino IDE的体会

1、Stduino IDE介绍
Stduino IDE是一款面向32位处理器快速入门学习的集成开发平台,已率先支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能!
2、Arduino IDE介绍
Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。
它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。
3、keil缺点
在使用keil编写stm32程序的时候,我们需要读他的开发手册,如果想对寄存器进行操作,还得记住每个寄存器的位置和作用,用库函数进行操作也得知道每个函数的意义,需要花费比较多的学习时间成本。
4、Ardunio优点
Ardunio在操作方面比keil要简单得多,选好自己使用的设备后就可以开始编程了,编程方面只要会C语言就可以写出程序,还支持一键下载程序到单片机,同时配有串口监视器,可以看到单边机的输出。
5、stduino优点
stduino IDE本身就是基于Arduino IDE进行开发的,所以它具备了Arduino IDE的所有优点,简单易上手,同时还多了一些Arduino IDE没有的功能,比如GDB调试等
6、总结
每个开发软件各有千秋,根据自己实际情况去使用,当然全都掌握是最好的!

标签:HAL,Arduino,STM32,Ardunio,flag,串口,IDE,外设
来源: https://blog.csdn.net/qq_51023112/article/details/111094243

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有