> 文章列表 > 认识STM32和如何构建STM32工程

认识STM32和如何构建STM32工程

认识STM32和如何构建STM32工程

STM32介绍

什么是单片机

单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种/0口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。

STM32命名规则

ST -> 意法半导体

M -> Microelectronics微电子

32 -> 总线长度

认识STM32和如何构建STM32工程

博主后续关于STM32相关博客使用的都是STM32F103C8T6这一个型号

STM32F103C8T6单片机

认识STM32和如何构建STM32工程

标准外设库和HAL库的区别

标准外设库

STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。

  • 寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用

  • 每款芯片都编写了一份库文件,也就是工程文件里stm32F1xx...之类的

  • 配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能

  • 大大降低单片机开发难度,但是在不同芯片间不方便移植

HAL库

HAL库 ,HAL是Hardware Abstraction Layer的缩写,中文名称是:硬件抽象层,HAL库工程一般使用STM32CubeMX软件来生成工程。HAL库是ST公司为STM32的MCU最新推出的抽象层嵌入式软件,更方便的实现跨STM32产品的最大可移植性。优势就是不需要开发工程师再关注所用MCU型号,只需要专注所以要的功能软件开发工作。而且是未来主推的方向,正在不断的推出更新。HAL库推出的同时,也加入了很多第三方的中间件,有RTOS,USB,TCP / IP和图形等等。和标准库对比起来,STM32的HAL库更加的抽象,ST最终的目的是要实现在STM32系列MCU之间无缝移植,甚至在其他MCU也能实现快速移植。

  • ST公司目前主力推的开发方式,新的芯片已经不再提供标准库

  • 为了实现在不同芯片之间移植代码

  • 为了兼容所有芯片,导致代码量庞大,执行效率低下

GPIO外设

GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。

GPIO相关寄存器

每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器

(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存

器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。

GPIO的工作模式

输入浮空

输入浮空状态下,I/O口的电平状态是不确定的,完全是由外部的输入确定的,如果在该引脚浮空的情况下读取该引脚的电平是不确定的。

输入上拉

I/O口在无输入的状态下,保持着高电平。

输入下拉

I/O口在无输入的状态下,保持着低电平。

模拟输入

输入信号不经施密特触发器直接输入,输入信号为模拟量而不是数字量,而其他输入方式均是输入数字量。

推挽输出

当给予一个高(低)电平信号时,可以真正的输出高3.3v(低0v)电平。

开漏输出

  • 当给予一个低电平信号时,可以真正的输出低电平0v。

  • 当给予一个高电平信号时,无法真正的输出高电平,即高电平没有驱动能力,需要借助外部上拉电阻完成对外驱动,才能输出高电平5v。

推挽复用功能

此时I/O受内部外设控制,如UART的RX、TX等等

开漏复用功能

此时I/O受内部外设控制,如IIC的SCL、SDA等等

复位和时钟(RCC)

复位

系统复位

除了时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器以外,系统

复位将复位所有寄存器至它们的复位状态。

系统复位事件

当发生以下任一事件时,产生一个系统复位:

  • NRST引脚上的低电平(外部复位)

  • 窗口看门狗计数终止(WWDG复位)

  • 独立看门狗计数终止(IWDG复位)

  • 软件复位(SW复位)

  • 低功耗管理复位

电源复位

电源复位将复位除了备份区域外的所有寄存器。

电源复位事件

当发生以下任一事件时,产生一个系统复位:

  • 上电/掉电复位(POR/PDR复位)

  • 从待机模式中返回

备份区复位

备份区域拥有两个专门的复位,它们只影响备份区域。

备份区复位事件

当发生以下任一事件时,产生一个系统复位:

  • 软件复位,备份区域复位可由设置备份域控制寄存器 (RCC_BDCR)中的BDRST位产生。

  • 在VDD和VBAT两者掉电的前提下,VDD或VBAT上电将引发备份区域复位。

时钟(RCC)

时钟打开,对应的设备才会工作。

时钟来源

三种不同的时钟源可被用来驱动系统时钟(SYSCLK):

  • HSI振荡器时钟(高速内部时钟)

  • HSE振荡器时钟(高速外部时钟)

  • PLL时钟(锁相环倍频时钟)

二级时钟源:

  • 40kHz低速内部RC(LSIRC)振荡器

  • 32.768kHz低速外部晶体(LSE晶体)

时钟树

认识STM32和如何构建STM32工程

对于时钟的学习,后续用到不同的外设时再对时钟进行不同深度的学习。

使用STM32CubeMX配置HSE时钟

  1. 配置HSE时钟为晶体/陶瓷谐振器(Crystal/Ceramic Resonator)

认识STM32和如何构建STM32工程
  1. 配置时钟

认识STM32和如何构建STM32工程

如何构建STM32工程(点灯)

认识STM32和如何构建STM32工程
  1. 使用STM32CubeMX新建一个工程

认识STM32和如何构建STM32工程
  1. 左上角输入板子对应的型号,然后选择型号STM32F103C8T6

认识STM32和如何构建STM32工程
  1. 配置SYS,Debug方式选择串行线

认识STM32和如何构建STM32工程
  1. 根据板子的原理图,找到LED灯对应的引脚

认识STM32和如何构建STM32工程
  1. 如原理图将(LED1、LED2)PB8、PB9配置成输出引脚,输出低电平

认识STM32和如何构建STM32工程
  1. 配置工程名称、工程路径

认识STM32和如何构建STM32工程
  1. 选择固件库

认识STM32和如何构建STM32工程
  1. 生成工程

认识STM32和如何构建STM32工程

打开工程

认识STM32和如何构建STM32工程

如何下载程序到STM32单片机

  1. 插入STLink烧录器,手动安装驱动程序

认识STM32和如何构建STM32工程
  1. 创建hex文件

认识STM32和如何构建STM32工程
  1. Debug方式选择ST-Link

认识STM32和如何构建STM32工程
  1. 编译和烧录文件

认识STM32和如何构建STM32工程