STM32入门基础介绍

什么是单片机

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

单片机特点:

  • 体积小:<5mm*5mm
  • 功耗低:mA
  • 集成度高:IO/TIM/AD/DA
  • 使用方便:C/Debug
  • 扩展灵活:IIC/SPI/FSMC

STM32命名规则

Cortex-M系列介绍

  ARM公司与ST公司

  • ARM公司:只做内核设计和 IP 授权,不参与芯片设计。
  • ST公司:拿到 ARM 公司授权后,进行芯片设计。类似的公司还有华为、高通、NXP 等。

ARM内核系列

  • A 系列:Application缩写。高性能应用,比如:手机、电脑、电视等。
  • R 系列:Real-time缩写。实时性强,汽车电子、军工、无线基带等。
  • M 系列:Microcontroller缩写。超低功耗,工控、消费电子、家电、医疗器械等。
  • 性能由高到低,时钟频率由高到低。

如何获取和使用数据手册

获取途径:

 如何阅读数据手册:(本篇以STM32F103系列产品说明)

  • 芯片手册(数据手册);
  • 参考手册。

嵌入式硬件基础

认识手中的开发板上

例:上官二号开发板

  • 主控芯片:STM32F103C8T6
  • 高速晶振:8M
  • 低速晶振:32.768k
  • LED5
  • KEY3
项目
介绍
内核
Cortex-M3
Flash
64K x 8bit
SRAM
20K x 8bit
GPIO
37 GPIO ,分别为 PA0-PA15 PB0-PB15 PC13-PC15 PD0-PD1
ADC
2 12bit ADC 合计 12 路通道,外部通道: PA0 PA7+PB0 PB1 内部通道 : 温度传感器通
ADC_Channel_16 和内部参考电压通道 ADC_Channel_17
定时器/计数器
4 16bit 定时器 / 计数器,分别为 TIM1 TIM2 TIM3 TIM4 TIM1 带死区插入,常用于
产生 PWM 控制电机
看门狗
定时器
2 个看门狗定时器(独立看门狗 IWDG 、窗口看门狗 WWDG)
滴答定时器
1 24bit 向下计数的滴答定时器 systick
工作电压、温度
2V~3.6V -40°C~85°C
通信接口
2 * IIC 2 * SPI 3 * USART 1 * CAN
系统时钟
内部 8MHz 时钟 HSI 最高可倍频到 64MHz ,外部 8MHZ 时钟 HSE 最高可倍频到 72MHZ

STM32F103C8T6引脚分布

注意: I = 输入,O = 输出,S = 电源, HiZ = 高阻  ,FT:容忍5V

  • 电源引脚

基本以字母 V 开头,比如 VDD/VSSVDDA/VSSAVREF+/VREF-VBAT 等。

  1. VDD/VSS:数字部分电源正/负引脚,为 STM32 供电。
  2. VDDA/VSSA:模拟部分电源正/负引脚,为内部模拟部分供电。
  3. VREF+/VREF-:为 ADC/DAC 提供参考电压,100 脚以上的型号 才有这两个脚。
  4. VBATRTC/后备区域供电引脚(可用纽扣电池供电)。
  • 晶振引脚

一共两组:OSC_IN/OSC_OUTOSC_IN32/OSC_OUT32

  1. OSC_IN/OSC/OUT:外部 HSE 晶振引脚(高速),用于给 STM32 提供高精度系统时钟。
  2. OSC_IN32/OSC_OUT32:外部 LSE 晶振引脚(低速),用于给 STM32 内部 RTC 提供晶振。
  3. 内部晶振:HSILSI
  • 复位引脚

只有一个:NRST

用于复位 STM32 ,低电平有效。

  • 下载引脚 三种下载引脚。)

第一种:JTAG(可仿真/调试,但占用引脚数较多);

 第二种:SWD可仿真/调试,占用引脚数较少,强烈建议!)

第三种:串口( 只能下载程序,不可调试。只能串口 1 ,其它串口不行!)

  •  BOOT引脚

BOOT0 及 BOOT1 ,启动选择引脚。

  • GPIO引脚

以字母 P 开头的都是 GPIO 引脚。

STM32最小系统 

定义:单片机最小系统是指能够将 单片机芯片运行所必需的最少的硬件电路 集成在一起的系统。

它是一种基本的单片机应用系统,通常由 主芯片,时钟电路,复位电路,电源电路, BOOT 启动电路,程序 下载电路,扩展接口 组成,为单片机提供时钟信号、复位信号以及外设接口等必要功能。
STM32中的  晶振  是一个非常重要的组成部分,它  为整个系统提供了一个稳定的时钟源  。具体来说,晶振在STM32中的作用如下:
晶振的作用
提供时钟信号:
晶振是一个振荡器,它会产生连续的脉冲信号,这些信号的频率非常稳定。 STM32 微控制器中的CPU 和其他外围设备需要一个稳定的时钟信号来协调它们的工作。因此,晶振 为整个系统提供了一个可靠的时钟源,使得各个模块能够以相同的频率工作,从而保证系统的稳定性和准确性。
决定CPU的工作速度:
晶振的频率决定了CPU的工作速度。频率越高,CPU的执行速度就越快;反之,频率越低,CPU的执行速度就越慢。 因此,根据实际需求选择合适的晶振,可以确保系统在满足性能要求的同时,不会造成不必要的功耗浪费。
确保外围设备的正常工作:
除了 CPU 之外,系统中还有很多其他的外围设备,如串口、定时器、 ADC等。这些 外围设备也需要时钟信号来进行工作 。晶振提供的时钟信号可以确保这些外围设备正常、准确地工作。
解决电磁兼容性问题:
一些外围设备在工作时可能会产生电磁干扰,这些干扰可能会影响系统的稳定性。而晶振产生的时钟信号是高度稳定的,因此 使用晶振可以减少由于电磁干扰导致的系统误差或故障。

电路的基础知识(能看懂原理图)

VCC:接正极;GND:接地
电阻
电容:滤波(滤波电龙)
电感:通直阻交
连接件
开关

晶体管:

PNP、NPN、

P-MOS、N-MOS

稳压器件,能将5v电压转变成3.3v电压

 常见的晶体管电路图:

其他的原件示意图

非门:
与门:

或门:

异或门:

如何查看原理图(以上官二号开发板为例)

  • 电源电路

  • 主芯片电路 

  •  复位部分电路

①号:表示当按键未按下时,RST接上拉电阻,复位按键置3.3v高电平;

②号:当按键按下时,RST接GND,此时置低电平;

③号:通电复位,当接通电路时,C5电容蓄电,达到饱和时接通电路。

  • 晶振电路:

  •  下载电路(SWD)

  • BOOT启动电路

 上官二号最小系统板只有BOOT0电路,下拉输入,接置低电平0,表示只能从主闪存存储器启动:

其他最小系统板BOOT1和BOOT0电路都存在,表示能从系统存储器启动:

  • 扩展电路(不同的电路不同) 
    电路图接口名称

    按键

    GPIO口

    LED灯:①电源指示灯、②编程的时点亮的灯、③TXD2和RXD2串口灯(看数据是否存在通信)

    AT24C64: EEPROM(电可擦可编程只读存储器)芯片。

    功能:通过 I²C(Inter-Integrated Circuit) 接口与主控芯片(如MCU、CPU)通信,仅需两根信号线(SCL时钟线、SDA数据线)。

开发环境的搭建

官方安装包/器件

1 MDK5官方安装包获取

MDK-ARM Version 5.42a Evaluation Software Request

2.官方器件包获取

  • 什么是器件包呢?由于 ST 公司生产了非常多的芯片,每颗芯片所需要的支持文件都不一样,这些文件组合 起来就是器件包。
  • 但有这么多芯片,他们不可能把所有的器件包都集成在 MDK5 里,否则 MDK5 的安装包将变得超级无敌巨大,很占空间也没必要。比较好的解决方案就是你需要用到什么芯片,就安装对应的器件包就可以了。

网址如下:

3.STM32CubeMX 的安装

为什么要下载CH340?

 答:

  1. 串口下载程序(BOOT0引脚:1,BOOT0引脚:0);
  2. 进行通信(USART)。

下载程序的五种方式

  • 串口下载(学会);
  • ST-Link V2下载(学会);
  • JLink下载;
  • STVP下载(一般不用)。

具体使用方法: STM32下载程序的五种方法 | 良许嵌入式

MDK5常用的配置和使用技巧

编辑器配置(扳手)代码提示与语法检测(扳手)快速定位函数或变量位置(魔法棒)-快捷键:F12
  • 使用技巧:
查找匹配花括号:ctrl+eTab键的使用:
  • 一次填充 4 个空格
  • 代码段整体右移/左移
快速注释/取消注释:
  • 选中代码段 →
  • 选中代码段 Comment Selection
快速编辑一列
按住 Alt 选择一列编辑
快速打开头文件:
右击,选择 open document
快速拆分窗口
右击标签页,选择 new horizontal(按行)/vertical tab group(按列)

查找和替换功能:

MDK仿真调试

仿真调试的配置(参考文章):手把手教你使用MDK仿真调试 | 良许嵌入式

这篇文章主要介绍:调试工具的配置,各个调试按钮的作用,工具栏常用窗口按钮的介绍 。并举例如何查看延时函数是否起作用。

STM32系统入门

  • F1系列内核和芯片系统架构

在小容量、中容量和 大容量产品中,主系统 由以下部分构成:

四个驱动单元(主动单元):
对被动单元发出命令请求;用来控制被动单元

四个被动单元

不能对主动单元发起控制

  • Cortex™-M3内核:DCode总线(D-bus),和系统总线(S-bus);
  •  通用DMA1和通用DMA2(STMF103C8T6 没有 DMA2)。
  • 内部 SRAM
  • 内部FLASH闪存存储器;
  • FSMC(STMF103C8T6没有);
  • AHB到APB的桥(AHB2APBx),它连接所有APB设备

补充:

DMA(Direct Memory Access,直接内存访问):

  • 定义:是一种允许外部设备(如硬盘、网卡等)直接访问计算机内存的技术,而无需 CPU 的干预。
  • 工作原理:在进行数据传输时,DMA 控制器会接管总线控制权,直接在内存和外部设备之间传输数据,传输完成后再将总线控制权交还给 CPU。这样可以大大提高数据传输效率,减少 CPU 的负担,使 CPU 能够同时处理其他任务。

AHB(Advanced High - performance Bus,高级高性能总线):

  • 定义:是 AMBA(Advanced Microcontroller Bus Architecture)总线架构中的一种高性能总线,主要用于连接高性能的处理器、存储器和其他高速设备。用于构建片上系统(SoC),连接 CPU、内存控制器(复位)、高速外设(时钟控制RCC)等组件,以满足系统对高性能数据传输的需求。
  • 工作原理:采用了流水线操作和突发传输等技术,支持多个主设备和从设备同时进行数据传输,能够实现高速的数据传输和复杂的总线仲裁机制,以确保多个设备之间的高效协作。

APB(Advanced Peripheral Bus,高级外设总线):

  • 定义:也是 AMBA 总线架构的一部分,是一种低功耗、低成本的总线,主要用于连接低速外设,如 UART、SPI、GPIO 等。
  • 工作原理:APB 总线相对简单,采用了单周期传输和简单的地址译码机制,不需要复杂的仲裁逻辑。它通过桥接器与 AHB 等高性能总线相连,实现了高速总线与低速外设之间的数据传输和通信。
  • 系统结构简图(参考手册)
  •  STM32F103xx增强型模块框图(数据手册上的)

注意:

        不同型号的 STM32 微控制器,其系统时钟架构和最高频率有所不同。比如,STM32F4 系列微控制器的 APB1 最高频率可达 42MHz,APB2 最高频率可达 84MHz;而 STM32H7 系列微控制器的频率更高。所以,具体的频率要参考对应微控制器的数据手册。 

  •  存储器映像

 STM32 寻址范围:2^32 = 4 * 2^10 *2^10 K = 4 * 2^10 M = 4G

地址所访问的存储单元是按字节编址的。

什么是存储器映射?

答:存储器本身不具有地址信息,给存储器分配地址的过程称为存储器映。

ROM只读存储器,非易失性,掉电不丢失的存储器(类似于硬盘);

RAM随机存储器,易失性,掉电丢失的存储器(类似内存)。

什么是寄存器?

答:现在举一个高压锅的例子,高压锅的显示屏:数据存储器

开关、食物的类型、口感:控制寄存器

饭好了会亮灯、鸣响:中断寄存器

加热、升压:状态寄存器

        等等,还有许多种类的寄存器,大多数寄存器不单是起存储的作用,内部也有许多电路连接,可以控制硬件,也可以显示硬件的状态,操作寄存器可以起到对外部硬件控制的作用。

寄存器映射

定义:寄存器特殊的存储器,给寄存器地址命名的过程,就叫作寄存器映射。

寄存器地址:0x4001080C、寄存器名字:GPIOx_ODA

寄存器的操作
直接操作寄存器(地址)寄存器映射后在操作

结构体操作

(更加的便捷操作寄存器,可以一次批量的重映射一大堆)

门牌号111 = 一斤鸡蛋老王家 = 一斤鸡蛋老王家=一斤鸡蛋
*(unsined int *)(0x4001080C) = 0xFFFF
GPIOx_ODR = 0xFFFF
GPIO->ODR = 0下FFFF
  •  寄存器起始地址(参考手册:寄存器映射)

  • 进行外设地址映射 

总线基地址 外设相对于总结基地址偏移量 寄存器相对于外设基地址偏移量

举例:假如有一个小区,分成ABC三个小区,没区有十栋楼,每栋楼有二十户人家。

小区总线基地址偏移量(相对于APB1基地址)
A
APB1
0X4000 00000
B
APB2
0X4001 0000
0X1 0000
C
AHB
0X4001 8000
0X1 8000

外设基地址:

外设(挂载在APB2总线上)基地址偏移量(相对于APB2总线基地址)
1GPIOA
0X4001 0800
0X800
2GPIOB
0X4001 0C00
0XC00
3GPIOC
0X4001 1000
0X1000
4GPIOD
0X4001 1400
0X1400

GPIOA寄存器地址:

门牌号寄存器(GPIOA上的部分寄存器)地址偏移量(相对于GPIOA外设基地址)
1
GPIOA_CRL
0X4001 0800
0X00
2
GPIOA_CRH
0X4001 0804
0X04
3
GPIOA_IDR
0X4001 0808
0X08
4
GPIOA_ODR
0X4001 080C
0X0C
5
GPIOA_BSRR
0X4001 0810
0X10
6
GPIOA_BRR
0X4001 0814
0X14
7
GPIOA_LCKR
0X4001 0818
0X18

新建HAL版本工程模板

搭建工程模板教程

 什么是CMSIS

答:使用CMSIS,可以为 处理器 和 外设 实现一致且简单的 软件接口 ,从而简化软件的重用、缩短微控制器新开发人员的学习过程,并缩短新设备的上市时间。

 操作单片机的方式(三种)

寄存器标准库HAL库(Hardware Abstraction Laye)
  • 寄存器众多,需要经常翻阅芯片手册,费时费力
  • 更大灵活性,可以随心所欲达到自己的目的;
  • 深入理解单片机的运行原理,知其然更知其所以然。
  • 寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用
  • 每款芯片都编写了一份库文件,也就是工程文件里stm32F1xx…之类的;
  • 配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能;
  • 大大降低单片机开发难度,但是在不同芯片间不方便移植
  • ST公司目前主力推的开发方式,新的芯片已经不再提供标准库;
  • 为了实现在不同芯片之间移植代码
  • 为了兼容所有芯片,导致代码量庞大,执行效率低下

两个宏和常见文件的意义

  • 两个宏定义的意义

两个宏定义:USE_HAL_DRIVER 和 STM32F103xB(中间用英文逗号隔开)

如果要使用别的芯片的话:要将 STM32F103xB 替换成对应的

配置:

 作用:

USE_HAL_DRIVERSTM32F103xB
  •  常见文件的意义:

 STM32启动

从上电/复位到在运行main函数的时候,中间还需要执行一段代码。

启动流程

1.上电/复位;

2.根据BOOT0/BOOT1确定程序从哪个存储位置启动。(有三中方式)

         3.初始化 sp 和 pc 指针

    • 将 0X08000000 位置(存储器映像中Flsah存储器的起始地址)的 栈顶地址 存放在 SP 指针中。(如下图所示)
    • 0x08000004 位置 (相差一个int字节)存放的 向量地址(0x080001CD:存放的是接下来要执行的复位代码) 装入 PC 程序计数器。(如下图所示)

    进一步说明:(0x080001CD : 启动引导代码 )

    执行 Reset handler函数:将__main( != main函数)和 SystemInit 导入进来。

    4.初始化系统时钟

    5. 初始化用户堆栈

    6. 进入main函数

    map文件

    定义:map 文件是 MDK 编译代码后,产生的集程序、数据及IO空间的一种映射列表文件。简单来说就是包括了: 各种 .c 文件、函数、符号等的地

    址、大小、引用关系等信息。

    作用: 用于分析各 .c 文件占用 FLASH RAM 的 大小,方便 优化代码 

    生成和打开该文件

    • 生成:利用魔法棒进行如下配置

    • 打开方式 

    组成(五部分):

    模块、段(入口)交叉引用( Section Cross References
    移除未使用的模块( Removing Unused input sections from the image
    映射符号表( Image Symbol Table
    内存(映射)分布(Memory Map of the image) 重点
    映射组件大小(Image component sizes) 重点
    描述了各文件之间函数的调用关系, 有 助于理解各个源文件如何相互关联。
    描述了工程中未用到 而被删除的冗余程序段 ,有助于优化代码,降低内存负担。
    描述了各符号(程序段、数据)在存储器中的地址、类型、大小等信息 ,对于理解程序的内存布局以及定位特定代码或数据段非常有用。
    描述了各程序段(函数)在存储器中的地址及占用大小 ,有助于分析程序的内存占用情况。
    给出了整个映像代码(.o)占用空间的汇总信息 ,包括
    代码、只读数据、已初始化读写数据、未初始化读写数据等的大小,有助于了解程序的总体内存使用情
    况。

    map 文件相关的一些基本概念

    段(section
    RO
    RW
    ZI
    .text
    .constdata
    .bss
    .data
    描述映像文件的代码和数据块
    Read-Only 的缩写,包括 RO-data (只读数据)和 RO-code (代码)
    Read-Write 的缩写,主要是 RW-data RW-data 由程序初始化初始值
    Zero-initialized 的缩写,主要是 ZI-data ,由编译器初始化为 0
    与RO-code 同义
    RO-data 同义
    ZI-data 同义
    RW-data 同义

    时钟树

    什么是时钟

    定义:时钟是由电路产生的具有周期性的脉冲信号,相当于单片机的心脏,给单片机提供一个统一的信号。 要想使用单片机的外设必须开启相应的时钟。

    HSEHSILSI LSE
    高速外部时钟
    高速内部时钟低速内部时钟低速外部时钟

    配置时钟树

    • 由 外部时钟 到 系统时钟

    • 系统时钟 到 内核、AHB、APBx时钟 

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值