STM32介绍

什么是单片机

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

STM32命名规则

ST -> 意法半导体

M -> Microelectronics微电子

32 -> 总线长度

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

STM32F103C8T6单片机

标准外设库和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晶体)

时钟树

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

使用STM32CubeMX配置HSE时钟

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

  1. 配置时钟

如何构建STM32工程(点灯)

  1. 使用STM32CubeMX新建一个工程

  1. 左上角输入板子对应的型号,然后选择型号STM32F103C8T6

  1. 配置SYS,Debug方式选择串行线

  1. 根据板子的原理图,找到LED灯对应的引脚

  1. 如原理图将(LED1、LED2)PB8、PB9配置成输出引脚,输出低电平

  1. 配置工程名称、工程路径

  1. 选择固件库

  1. 生成工程

打开工程

如何下载程序到STM32单片机

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

  1. 创建hex文件

  1. Debug方式选择ST-Link

  1. 编译和烧录文件