stm32cube探索(一)

    今天突然来了兴致,想要把所学到的整理一下写成博客,计划一周至少一篇,想让自己养成总结知识的好习惯,也想要结识一些技术界的大牛。至于内容,想到什么写什么,今天是第一篇。因为要参加电赛,老师推荐stm32作为控制器,所以打算好好学习一下,而上周得知了ST公司的一款GUI ide,所以打算尝试一下。

    此外,事先说明,因为本人经验有限,所以博客仅供参考,欢迎大家提出问题。

********************************************************************************************************************************


STM32 Embedded Software

    首先来介绍一下stm32官方的三种固件库:

    到目前为止,有标准外设库(STD库)、HAL库、LL库 三种。前两者都是常用的库,后面的LL库是ST前段时间才添加,随HAL源码包一起提供。其中,STD库和HAL库两者相互独立,互不兼容。

 

    第一个便是用的人数最多,大家最熟悉的标准外设库(STD)了。标准外设库(Standard Peripherals Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。这应该是目前使用最多的ST库。几乎全部使用C语言实现。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。 而且,很不幸的是,几年前ST公司停止了对STD库的更新,所以STD库的版本停留在了v3.5,也就是说,它不支持从STM32 L0,L4和F7开始的之后的STM32系列芯片,所以如果大家有想开发这几种芯片的想法,一定要掌握HAL或LL库。


    第二个是官方主推的HAL库,而且也是stm32cubemx默认使用的库。HAL(Hardware Abstraction Layer),中文名:硬件抽象层。HAL库是ST为STM32最新推出的抽象层嵌入式软件,可以更好的确保跨STM32产品的最大可移植性。该库提供了一整套一致的中间件组件,如RTOS,USB,TCP / IP和图形等。 
  可以说HAL库就是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库是ST未来主推的库,从前年开始ST新出的芯片已经没有STD库了,比如F7系列。目前,HAL库已经支持STM32全线产品。

  使用HAL库编程,最好尽量符合HAL库编程的整体架构。

    最后一个便是年轻的LL库了,因为HAL库有个最大的缺点就是复杂程度高,执行速度慢,所以为了弥补这一缺点,官方又推出了LL库。LL库(Low Layer)是ST最近新增的库,与HAL捆绑发布,文档也是和HAL文档在一起的,比如:在STM32F3x的HAL库说明文档中,ST新增了LL库这一章节。 
  LL库更接近硬件层,对需要复杂上层协议栈的外设不适用,直接操作寄存器。其支持所有外设。可以独立使用,该库完全独立实现,可以完全抛开HAL库,只用LL库编程完成。在使用STM32CubeMX生成项目时,直接选LL库即可。如果使用了复杂的外设,例如USB,则会调用HAL库混合使用。LL库文件的命名方式和HAL库基本相同,像是STD库在cube环境中的实现。

    几种库的比较如下:(这张图是我copy的,官网实在是没找到)

            stm32cube探索(一)_第1张图片


STM32CubeMX

    ST为新的标准库注册了一个新商标:STMCube™。并且,ST专门为其开发了配套的桌面软件STMCubeMX,开发者可以直接使用该软件进行可视化配置,大大节省开发时间。 LL库和HAL库两者相互独立,只不过LL库更底层。而且,部分HAL库会调用LL库(例如:USB驱动)。同样,LL库也会调用HAL库。用户可以使用STMCubeMX直接生成对应芯片的整个项目(包括Keil v5和IAR),STMCubeMX负责给整理各种需要的源码文件。


下载软件

   看了这么多,还是不如来亲手实践一下。下面是stm32CubeMX下载链接。

    进入之后,页面如图所示:

stm32cube探索(一)_第2张图片

    点击后会直接到最下面:


    然后点击ACCEPT,之后输入邮箱,会有一封邮件发给你,点击邮件中的链接就可以下载了。下载后安装好就可以开始编程了。

熟悉界面

    首先我们来看一下初始化界面(可能会被强制更新一波):

      然后话不多说,先New一个工程。

      stm32cube探索(一)_第3张图片


在里面可以搜索到自己使用的单片机的型号(我用的是STM32F103VE系列)

stm32cube探索(一)_第4张图片


选中相应的封装,点击“Start Project”

stm32cube探索(一)_第5张图片


屏幕上显示了我们的单片机以及相应的引脚,首先来设置一下时钟,RCC设置,选择HSE(外部高速时钟)Crystal/Ceramic Resonator(晶振/陶瓷谐振器)

stm32cube探索(一)_第6张图片 

然后设置一下GPIO引脚,PE5,PE6LED1-LED2.找到对应管脚设置为GPIO_Output模式。(黄色引脚为该功能的GPIO已被用作其他功能,可以忽略。绿色表示管脚已使用)

stm32cube探索(一)_第7张图片  

STM32最高时钟为72M,在HCLK处(红色圈)输入72,软件即可自动配置。

stm32cube探索(一)_第8张图片


接下来设置第三个选项卡(功能外设):

在配置框我们可以看到有几个区域,分别对应的功能设置如下
Multimedia(多媒体):音频视频、LCD
Control(控制):定时器
Analog(模拟):DAC、ADC
Connectivity(通讯连接):串口、SPI 、I2C、USB、ETH
SYStem(系统):DMA(直接存储器存取)、GPIO、NVIC、RCC、看门狗
middlewares(中间件): FreeRTOS、FATFS、LwIP、USB
此工程中DMA没用的不用配置,NVIC(嵌套中断向量控制器(Nested Vectored Interrupt Controller))配置中断优先级。RCC不用配置。

stm32cube探索(一)_第9张图片


设置引脚(分别为GPIO初始化电平、GPIO模式、GPIO最大速度)

stm32cube探索(一)_第10张图片


可以看见,我们的引脚标签名称已经发生了变化

stm32cube探索(一)_第11张图片


设置完以后,我们就可以开始Projiect -> Generate Code了,设置好如图三个方框里的,注意路径不要带有中文

stm32cube探索(一)_第12张图片

第二个选项卡勾选红色圈,外设初始化为独立的C文件和头文件。

stm32cube探索(一)_第13张图片


生成代码,open后找到main.c,如果呈现如图界面则表示已经完成了基本的初始化操作

stm32cube探索(一)_第14张图片


谢谢大家,如有不足,请多指教。

你可能感兴趣的:(stm32)