目录

  • 一、Arduino
    • 1、Arduino下载
    • 2、Arduino实验示例
      • a、开发板设置
      • b、Arduino编译烧录
  • 二、基于STM32两种库
    • 标准库函数
    • HAL库函数
  • 三、Stduino

一、Arduino

Arduino IDE开发的优点是更简单,易用,上手,适合新手使用。缺点是省去了更多代码配置环节,不便于底层理解。但这不影响Arduino IDE开发的强大性,一般情况下开发板实现相同的功能,Arduino IDE开发比keil开发使用更少的代码就能实现,这一点有点类似编程界的Python与其他编程语言的对比吧。想在底层方面了解更多,如亲自操作开发板寄存器的话,建议还是使用keil+库函数开发吧。

1、Arduino下载

可以直接去Arduino官网进行下载,这里为了方便,可以直接进入云盘进行接下来完整的资料的下载:
https://pan.baidu.com/s/1kqpP1YGKtY2WRz9GNT0Z7w
提取码: q251

得到下面的文件即可

然后我们直接点击选中的程序进行安装Arduino IDE,安装过程基本就是默认即可

接下来要进行的是把整个Arduino_STM32整个文件夹拷贝到Arduino IDE安装目录下的hareware下,如图所示:


这样就可在开发板选项中看到各种STM32开发板了:

接下来进行安装编译支持文件:首先打开应用中的“工具”界面,选择如图所示选项:

进入界面以后在搜索框中输入“ARM”选中第一个就可以进行安装,完成以后退出即可。

2、Arduino实验示例

a、开发板设置

首先把STM32开发板和电脑进行连接好,注意连接的是“USB转串口”接口。如图:

接下来需要将BOOT引脚的默认方式修改一下:用跳帽将BOOT0与3v3相连,BOOT1与GND相连,如上图连接即可。

调整好跳帽以后就打开电源即可。

b、Arduino编译烧录

首先我们打开Arduino软件,新建一个工程:

然后直接把以下程序复制进去,该程序完成持续向串口输出“Hello world”,然后输入“stop”即停止。

int flag=1;
char Stop[]="stop\n";
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); // 延迟while (Serial.available()> 0)     //当发送缓冲区有数据时{inByte[i] = Serial.read();    //从串口的缓冲区取出并读取一个Byte的数据delay(10); i++ ;                              }if(Stop[i]=inByte[i]){if(Stop[i-1]==inByte[i-1]&&Stop[i-2]==inByte[i-2]&&Stop[i-3]==inByte[i-3]){flag=0;}}if(flag==0){Serial.println("收到!");//当收到stop命令时停止并回复收到!while(1){continue;}}if(flag==1){Serial.println("Hello world!");//向串口发送数据delay(100); // 延迟}}

输入完成以后进行先进行保存,然后在选择对应的开发板。

我们买的是STM32103VET6指南者

因此我们选择STM32103VE即可;


接下来的上传方式选择如图所示:

接下来选择端口:端口的选择可以通过开关开发板电源来知道,如果打开电源,新出现的端口就是所需端口,除此之外,还可以我的电脑中通过设备管理器进行明确。

基本设置完以后,就可以进行编译

显示编译完成,此时要注意,先不要直接上传,先按一下开发板的复位键,然后在进行上传烧录

此时可以看到开发板上的灯亮了

此时点击Arduino软件左上角工具->串口监视器

将波特率设置为115200波特率。
然后打开监视器就可以看到程序结果了,与作业的要求一致

二、基于STM32两种库

标准库函数

  • 标准外设库(Standard Peripherals Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。这应该是目前使用最多的ST库。几乎全部使用C语言实现。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。相对于HAL库,标准外设库仍然接近于寄存器操作,主要就是将一些基本的寄存器操作封装成了C函数。开发者需要关注所使用的外设是在哪个总线之上,具体寄存器的配置等底层信息。

注意:标准外设库不支持从STM32 L0,L4和F7开始的之后的STM32系列芯片也是针对某一系列芯片而言的,没有可移植性。

  • ST为各系列提供的标准外设库稍微有些区别。例如,STM32F1x的库和STM32F3x的库在文件结构上就有些不同,此外,在内部的实现上也稍微有些区别,这个在具体使用(移植)时,需要注意一下!但是,不同系列之间的差别并不是很大,而且在设计上是相同的。STM32的标准外设库涵盖以下3个抽象级别:
  • 包含位,位域和寄存器在内的完整的寄存器地址映射
  • 涵盖所有外围功能(具有公共API的驱动器)的例程和数据结构的集合。
  • 一组包含所有可用外设的示例,其中包含最常用的开发工具的模板项目。

HAL库函数

  • HAL是Hardware Abstraction Layer的缩写,中文名:硬件抽象层。HAL库是ST为STM32最新推出的抽象层嵌入式软件,可以更好的确保跨STM32产品的最大可移植性。该库提供了一整套一致的中间件组件,如RTOS,USB,TCP / IP和图形等。
  • HAL库是基于一个非限制性的BSD许可协议(Berkeley Software Distribution)而发布的开源代码。 ST制作的中间件堆栈(USB主机和设备库,STemWin)带有允许轻松重用的许可模式, 只要是在ST公司的MCU 芯片上使用,库中的中间件(USB 主机/设备库,STemWin)协议栈即被允许随便修改,并可以反复使用。至于基于其它著名的开源解决方案商的中间件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的用户许可条款。

可以说HAL库就是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库是ST未来主推的库,从前年开始ST新出的芯片已经没有STD库了,比如F7系列。目前,HAL库已经支持STM32全线产品

下面就给出两种对应的程序可以查看差异:

标准库函数:

int main(void){      u16 t;  u16 len;    u16 times=0;delay_init();           //延时函数初始化    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);     //串口初始化为115200LED_Init();               //LED端口初始化KEY_Init();          //初始化与按键连接的硬件接口while(1){if(USART_RX_STA&0x8000){                       len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度printf("\r\n您发送的消息为:\r\n\r\n");for(t=0;t<len;t++){USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束}printf("\r\n\r\n");//插入换行USART_RX_STA=0;}else{times++;if(times%5000==0){printf("\r\n精英STM32开发板 串口实验\r\n");printf("正点原子@ALIENTEK\r\n\r\n");}if(times%200==0)printf("请输入数据,以回车键结束\r\n"); if(times%30==0){LED0=!LED0; LED1=!LED1;}//闪烁LED,提示系统正在运行.delay_ms(10);   }}     }

HAL库:

int main(void)
{u8 len;    u16 times=0;HAL_Init();                            //初始化HAL库    Stm32_Clock_Init(RCC_PLL_MUL9);    //设置时钟,72Mdelay_init(72);                       //初始化延时函数uart_init(115200);                 //初始化串口LED_Init();                          //初始化LED    KEY_Init();                         //初始化按键while(1){if(USART_RX_STA&0x8000){                       len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度printf("\r\n您发送的消息为:\r\n");HAL_UART_Transmit(&UART1_Handler,(uint8_t*)USART_RX_BUF,len,1000);   //发送接收到的数据while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TC)!=SET);        //等待发送结束printf("\r\n\r\n");//插入换行USART_RX_STA=0;}else{times++;if(times%5000==0){printf("\r\nALIENTEK 精英STM32开发板 串口实验\r\n");printf("正点原子@ALIENTEK\r\n\r\n\r\n");}if(times%200==0)printf("请输入数据,以回车键结束\r\n");  if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.delay_ms(10);   } }
}

观察代码可以看出在函数内容上是有所不同的:


通过这两个部分可以看出HAL库比起标准库具有很简洁,很方便的特点。

三、Stduino

Stduino软件可以在官网进行下载:
http://www.stduino.com/pindex.php

简介:

Stduino IDE是一款面向32位处理器快速入门学习的集成开发平台,已率先支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能!

IDE当前支持的功能有:
GDB调试
封装库下载安装
代码自动补全提示
中英文模式
UTF-8\GBK编码格式
代码快速格式化
SWD\串口程序下载&调试(已验证)
DFU程序下载方式(待验证)
USB HID程序下载方式(待验证)
maple DFU程序下载方式(待验证)
maple DFU2程序下载方式(待验证)
MassStorage程序下载方式(待验证)
更多功能细节请搜索stduino.com进行了解

已经支持的芯片&板型列表:
Stduino UNO&Nano
Nucleo 144 boards
Nucleo 64 boards
Nucleo 32 boards
Discovery boards
Eval boards
STM32MP1 series coprocessor boards
Generic STM32F0 boards
Generic STM32F1 boards
Generic STM32F3 boards
Generic STM32F4 boards
Generic STM32H7 boards
Generic STM32L0 boards
(免安装,解压后双击Stduino.exe即可运行)

下面是Stduino IDE的界面:

Arduino和Stduino对比:
通过两个简单的程序来属性使用Stduino IDE,可以发现它跟Ardunio还比较类似,尤其是在代码编写上风格基本一致。但是,两者在界面上却存在比较大的差别,Ardunio更加简单,没有过多的渲染,而Stduino就比较丰富,界面上做的更加精美。总的来说,其实两者在使用上是没有什么差别的。与keil相比来说,这个开发工具跟Ardunio一样,对于那些对keil操作不太熟练的人来说,这个开发工具的操作方式更加简单,更加容易上手。每种工具的出现,都是在一些软件的基础之上加以改进了。就像Stduino跟Ardunio很类似,但是,在界面方面却做更加精美,对于一些使用者来说,可能更具吸引力。

使用Arduino完成STM32的串口通信相关推荐

  1. Ardunio下实现STM32的串口通信及其与Stduino的区别

    摘要 本文介绍了在Ardunio下配置STM32并进行STM32的串口通信:之后我将介绍一下国人MCU开发平台Stduino与现在所使用的Arduino进行比较. 文章目录 摘要 :man_stude ...

  2. STM32 —— STM32 的串口通信

    STM32 -- STM32 的串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器).USART(通用同步异步收发器).而对于大容量 STM32F10x 系列芯片,分别有 3 ...

  3. 单片机与PC机的交流———基于STM32的串口通信

    STM32之串口通信程序 前言: 一.串口通信要求 二.串口通信准备 1.硬件准备 2.软件准备 三.下载程序进入STM32 1.下载之前相关配置 2.下载 四.最终效果展示 总结: 前言: 本文主要 ...

  4. K210学习笔记(三) K210与STM32进行串口通信,K210发STM收

    文章目录 前言 一.以/r/n为结尾 二.K210端代码 三.STM32端 3.1 main函数 四.测试结果 4.1当收到1时 4.2当收到2时 4.3 测试视频 总结 前言 前面我们讲了STM32 ...

  5. 嵌入式STM32入门之STM32基础串口通信

    STM32基础串口通信 一.前言 二.串口协议 (1)浅谈设备通信方式 (2)具体串口协议 (3)STM32的串口通信 (4)RS-232通信协议 (5)USB To TTL(CH340) 5.1 C ...

  6. 【星曈科技】OpenMv笔记——利用OpenMV与STM32进行串口通信

    利用OpenMV与STM32进行串口通信 OpenMV端的程序 # Untitled - By: dell - 周一 7月 19 2021# Blob Detection and uart trans ...

  7. 【Arduino】双主板串口通信并将光敏传感器信息上传到阿里云

    [Arduino]双主板串口通信并将光敏传感器信息上传到阿里云 文章目录 [Arduino]双主板串口通信并将光敏传感器信息上传到阿里云 前言 一.所需材料 二.掌控板部分 1.引入库 2.配置WiF ...

  8. javarxtx串口接收时数据会分成好几段_【STM32】串口通信基本原理(超基础、详细版)...

    STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...

  9. Arduino uno esp01s 硬串口通信

    参考资料: esp 烧录固件 和 烧录程序 esp 通信测试程序 ili9341 tft显示屏使用 零件: Arduino uno ili9341 tft esp01s usb 烧录器 最初的想法是, ...

最新文章

  1. 【Python】青少年蓝桥杯_每日一题_5.03_判断是否是三角形
  2. How I Hacked 40 Websites in 7 minutes
  3. Apache负载均衡设置方法: mod_proxy
  4. 360算法技术解密与实践-技术干货满满哒
  5. 异步执行线程的两种方法
  6. python面试题之迭代器和生成器的区别
  7. SUSE梁胜:程序员涨薪飞快,做开源贡献者没有意义
  8. 全网、全国最好用的基于经纬度的天气查询、天气预报接口
  9. 陈纪修老师《数学分析》 第12章:多元函数微分学 笔记
  10. 一文了解AAAI国际会议–附: 各年论文连接
  11. C++实现进程通信(管道pipe)
  12. 【数据分析】基础技术篇 三——matplotlib
  13. html 3D球状旋转标签云文字云效果
  14. 电脑wifi显示连接上了但是没有网络是怎么回事,手机wifi网络正常,已解决
  15. java8新特性之lambda表达式--超级详细版本
  16. Python 网络爬虫实战:去哪儿网旅游攻略图文爬取保存为 Markdown电子书
  17. python自动发邮件报554错误_python3利用网易smtp服务器报554排查原因
  18. 上海悦颜白继平院长助力上海整形科技周第二十届上海国际整形美容外科会议圆满结束!
  19. 哪些公司开发android输入法软件,六款Android平台第三方输入法软件横评
  20. 如何管理你的手机存储空间,告别微信内存过大!

热门文章

  1. [cesium] 基于Cesium的动态泛光效果示例
  2. blackduck issue fix
  3. C语言-数据输入与输出函数
  4. 奢侈手机品牌,钱途路上的黄粱一梦
  5. 近期频现NFT新型钓鱼诈骗,用户收到不明OpenSea”高价“空投
  6. stata的固定效应,控制时间和个体的语句
  7. 智慧水务综合管理平台解决方案,助力水司数字化管理
  8. RabbitMQ交换机类型
  9. 2015浙江计算机一级试题,2015年计算机一级考试试题及答案
  10. OS X下修改系统Hosts文件以及苹果手机如何host映射