STM32单片机课程自学知识点整理 - 指南版

课程目录

  • 前言
  • 网络课程推荐
  • 一、基础知识
    • 题外话:什么是RISC-V,RISC-V芯片的发展现状
    • 1. 原码、补码和反码
    • 2. 为什么1Byte=8bit
    • 3. 什么是I^2^C
    • 4. 什么是ICode、DCode、系统总线、DMA、FSMC、AHB
    • 5. 寄存器
    • 6、地址、AHB和APB
    • 7. GPIO的开漏输出与推挽输出
    • 8. DMA
    • 9. CAN、422、485总线
  • 二、使用步骤
    • 1. 寄存器的设置顺序
  • 其他
    • 图纸上的VCC、VDD、VEE和VBB有什么区别
  • 总结


前言

这里会陆续整理一些关于STM32单片机课程的资料,最终的计划是形成一份完整的课程学习资料,内容会在近一两年内逐步更新迭代。

网络课程推荐

另一个是刘火良老师的【单片机】野火STM32F103教学视频。
STM32单片机课程自学知识点整理 - 指南版_第1张图片

STM32 的相关课程很多,比较推荐的有两个,一个是小蜜蜂老师的:【小蜜蜂笔记】基于STM32CubeMX的嵌入式开发基础教程,讲解的是基于STM32 HAL库的开发。
STM32单片机课程自学知识点整理 - 指南版_第2张图片


当然,每一个不同的知识传播者自身的理解不同,讲解的方式不同,而且难免有失误之处,在B站看教学视频比较好的一点就是会有弹幕供参考。


一、基础知识

六分钟了解什么是ARM#哔哩哔哩动画#

STM32单片机课程自学知识点整理 - 指南版_第3张图片

【十万个品牌故事128】ARM:没有人能离开它的产品,曾被牙膏厂看扁,却逆袭拯救了苹果#哔哩哔哩动画#
STM32单片机课程自学知识点整理 - 指南版_第4张图片

题外话:什么是RISC-V,RISC-V芯片的发展现状

打破美英巨头垄断,RISC-V将是中国芯片最佳机会?#哔哩哔哩动画# https://www.bilibili.com/video/BV14L411H7wf

Intel正式进军RISC-V处理器:明年首发7nm#哔哩哔哩动画# https://www.bilibili.com/video/BV1Wv411W73S

【评测】纯国产MCU发展的怎么样了?平头哥RISC-V芯片开发板评测#哔哩哔哩动画# https://www.bilibili.com/video/BV1oq4y1h7T3

对标STM32的国产GD32单片机

兆易第一款RISC-V开发板——GD32VF103V-EVAL开箱评测#哔哩哔哩动画# https://www.bilibili.com/video/BV1zJ411a7bQ

【国产MCU视频】手把手带你玩转对标STM32的国产GD32单片机

起床困难症?自制喷水闹钟,每天“滋”醒你!GD32主控C#电脑上位机控制#哔哩哔哩动画#
STM32单片机课程自学知识点整理 - 指南版_第5张图片


在 RISC-V 架构的全志 D1「哪吒」开发板上,跑个 ncnn 神经网络推理框架的 demo#哔哩哔哩动画#
能运行Linux的基于RISC-V SoC的单板计算机

「哪吒」开发板基于全志 D1 芯片,是目前比较罕见的使用 RISC-V SoC 且可运行 GNU/Linux 操作系统的可量产开发板;ncnn 是腾讯优图实验室推出的为移动端极致优化的高性能神经网络前向计算框架,是目前同样比较罕见的为 RISC-V 架构做过适配和优化的神经网络框架。

昉·星光 VisionFive RISC-V Linux单板计算机#哔哩哔哩动画#
能运行Linux的基于RISC-V SoC的单板计算机

1. 原码、补码和反码

在计算机系统中,已经转换为二进制的数据信息一律采用补码的形式来进行表示和存储。最重要原因就是:使用补码可以将符号位和数值域进行统一处理;与此同时,采用补码后计算机中的数据加法和数据减法也可以统一用加法器机械处理,大大简化了计算机的设计。
具体的内容可以参考这两个视频,讲解的非常直观、全面。
STM32单片机课程自学知识点整理 - 指南版_第6张图片
视频1: 『教程』补码怎么来的?#哔哩哔哩动画# 链接: link.

STM32单片机课程自学知识点整理 - 指南版_第7张图片

视频2:原码、反码和补码的相关知识点#哔哩哔哩动画# 链接: link.

关键点:补码为什么加一
_华灯_回复 @新手村拓哉 :反码表示0会有+0和-0,即00000000和11111111,加1之后,0的表示就唯一了。[doge]

2. 为什么1Byte=8bit

Statkeoverflow上有一个答案供大家参考:
It‘s been a minute since I took computer organization, but the relevant wiki on ‘Byte’ gives some context.

The byte was originally the smallest number of bits that could hold a single character (I assume standard ASCII). We still use ASCII standard, so 8 bits per character is still relevant. This sentence, for instance, is 41 bytes. That’s easily countable and practical for our purposes.

If we had only 4 bits, there would only be 16 (2^4) possible characters, unless we used 2 bytes to represent a single character, which is more inefficient computationally. If we had 16 bits in a byte, we would have a whole lot more ‘dead space’ in our instruction set, we would allow 65,536 (2^16) possible characters, which would make computers run less efficiently when performing byte-level instructions, especially since our character set is much smaller.
Additionally, a byte can represent 2 nibbles. Each nibble is 4 bits, which is the smallest number of bits that can encode any numeric digit from 0 to 9 (10 different digits).

STM32单片机课程自学知识点整理 - 指南版_第8张图片
STM32单片机课程自学知识点整理 - 指南版_第9张图片

视频:Bit、Byte、kb、KB、MB,KiB、MiB都有什么区别?硬盘容量不符竟是这个的原因! 视频链接

简单理解:为了把a-z、A-Z、0-9、音标和特殊符号都用二进制数进行编号,我们需要8bit的内存空间来存储这个编号,所以我们讲1byte(1个英文字节)定义为8bit。


为什么1Word(字)=2Byte呢?同理可以理解为:为了完整的表示所有的中文字符,每个中文字符需要用2Byte来表示,这样,我们就可以理解为什么1 Word=2Byte=16bit了。

3. 什么是I2C

I2C协议是一个常用的基础总线协议, 也是初学者接触到的第一种总线协议,整个知识点比较简单,只需要一两个视频就可以有一个大概的了解了。

STM32单片机课程自学知识点整理 - 指南版_第10张图片
3分钟理解通信协议之I2C总线:哔哩哔哩动画

STM32单片机课程自学知识点整理 - 指南版_第11张图片

必须知道的I2C总线协议 - 孤独的二进制 - 每天5分钟 带你走近Arduino的神奇世界:哔哩哔哩动画

4. 什么是ICode、DCode、系统总线、DMA、FSMC、AHB

ICode

ICode 中的 I 表示 Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在 FLASH 中,内核要读取这些指令来执行程序就必须通过 ICode 总线,它几乎每时每刻都需要被使用,它是专门用来取指的。


针对Cortex M3:I-Code的作用是取指令&执行指令,只和指令有关,I-Code 总线是一条基于 AHB-Lite 总线协议的 32 位总线,负责在 0x0000_0000 – 0x1FFF_FFFF 之间的取指操作。取指以字(32位)的长度执行,即使是对于 16 位指令也如此。因此 CPU 内核可以一次取出两条 16 位 Thumb 指令。1

DCode

DCode 中的 D 表示 Data,即数据,那说明这条总线是用来取数的2。我们在写程序的时候,数据有常量和变量两种,常量就是固定不变的,用 C 语言中的 const 关键字修饰,是放到内部的 FLASH 当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的SRAM中。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。


针对Cortex M3:D-Code 的作用是对数据读写访问,只和数据有关,D-Code 总线也是一条基于 AHB-Lite 总线协议的 32 位总线,负责在 0x0000_0000 – 0x1FFF_FFFF(与I-Code相同)之间的数据访问操作。尽管 CM3 支持非对齐访问,但你绝不会在该总线上看到任何非对齐的地址,这是因为处理器的总线接口会把非对齐的数据传送都转换成对齐的数据传送。因此,连接到 D-Code总线上的任何设备都只需支持 AHB-Lite 的对齐访问,不需要支持非对齐访问。

系统(System)总线

我们通常说的寄存器编程,即读写寄存器都是通过系统总线来完成的,系统总线主要是用来访问外设的寄存器。

STM32单片机课程自学知识点整理 - 指南版_第12张图片

STM32单片机课程自学知识点整理 - 指南版_第13张图片

DMA的基本介绍

DMA,全称Direct Memory Access,即直接存储器访问。 3


DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。


我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,是不是能够更好的利用CPU的资源呢?
STM32单片机课程自学知识点整理 - 指南版_第14张图片
因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,直接让数据由A拷贝到B 不经过CPU的处理。

FSMC

FSMC的英文全称是Flexible static memory controller(灵活的静态的存储器控制器)4。通过FSMC可以扩展内存,如外部的SRAM、NAND-FLASH和NORFLASH,相关文章:EEPROM和Flash这样讲,我早就懂了。但FSMC只能扩展静态的内存,不能是动态的内存,比如就不能用来扩展SDRAM。

AHB

从AHB总线延伸出来的两条APB2和APB1总线是最常见的总线,GPIO、串口、I2C、SPI 这些外设就挂载在这两条总线上。这个是学习STM32的重点,要学会对这些外设编程,去驱动外部的各种设备。

针对Cortex M3:这是一条基于 APB 总线协议的 32 位总线。此总线来负责 0xE004_0000 – 0xE00F_FFFF 之间的私有外设访问。但是,由于此 APB 存储空间的一部分已经被 TPIU、 ETM 以及 ROM 表用掉了,就只留下了 0xE004_2000-E00F_F000 这个区间用于配接附加的(私有)外设。

5. 寄存器

寄存器

关于什么是寄存器,这里直接上视频:【10分钟速成课:计算机科学】第6集-寄存器&内存#哔哩哔哩动画#。简单的文字描述对跨专业的初学者来说还是太抽象了,不够直观,这个视频可以由浅入深很快的说清楚什么是寄存器,它又是如何集成到单片机中的。
STM32单片机课程自学知识点整理 - 指南版_第15张图片

相关知识也可以参考:CSDN博客:STM32学习——什么是寄存器(存储器映射和寄存器映射)

6、地址、AHB和APB

为什么需要总线?一句话概括:在后期在改进CPU设计的过程中,如果需要添加外设,为了避免改动CPU内核架构,发明了总线。具体的讲解看这里:STM32/CPU总线的由来和地址映射概念。

后来设计者发现如果每添加一个外设都要修改CPU内核,这样不具有很好的扩展性,为了使得外设的改变(增加、删除、修改)不影响CPU内核架构,衍化出了总线的概念,CPU内核可以通过总线访问各种各样外设,新的外设只需要挂接到总线上,就可被CPU内核访问控制。有了总线,CPU可以用统一的访问方式访问任何外设,实现了CPU内核和外设分开设计和维护。
STM32单片机课程自学知识点整理 - 指南版_第16张图片

STM32单片机课程自学知识点整理 - 指南版_第17张图片

参考文章:STM32中AHB总线、APB2总线、APB1总线这些是什么?

参考文章:STM32/CPU总线的由来和地址映射概念
STM32单片机课程自学知识点整理 - 指南版_第18张图片

参考文章:STM32 对外设基地址,总线外设基地址和寄存器基地址的理解。

STM32单片机课程自学知识点整理 - 指南版_第19张图片

先储备一个英文单词:

peripheral
英[pəˈrɪfərəl] 美[pəˈrɪfərəl]
n. 外围设备; 周边设备;
adj. 周边的; 外围的; 次要的; 附带的; 与计算机相连的;



片上总线标准种类繁多,而由ARM公司推出的AMBA片上总线受到了广大IP开发商和SoC系统集成者的青睐,已成为一种流行的工业标准片上结构5。AMBA规范主要包括了AHB(AdvancedHigh performance Bus)系统总线和APB(Advanced Peripheral Bus)外围总线。二者分别适用于高速与相对低速设备的连接。


首先,说点不靠谱的,APB和AHB总线,我个人感觉这个类似于个人PC系统里的北桥和南桥总线。南桥总线上挂接的都是鼠标、键盘这些慢速的设备,北桥上挂接显卡等高速设备。南桥频率低,北桥频率高。另外,南桥最后也要接到北桥上。这些感觉都类似于APB和AHB。


AHB,是Advanced High performance Bus的缩写,译作高级高性能总线,这是一种“系统总线”。 AHB主要用于高性能模块(如CPU、DMA和DSP等)之间的连接。AHB 系统由主模块、从模块和基础结构(Infrastructure)3部分组成,整个AHB总线上的传输都由主模块发出,由从模块负责回应。

APB,是Advanced Peripheral Bus的缩写,这是一种外围总线。APB主要用于低带宽的周边外设之间的连接,例如UART、1284等,它的总线架构不像 AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。再往下,APB2负责AD,I/O,高级TIM,串口1;APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM。

这两者都是总线,符合AMBA规范。

参考来源:1. STM32—— AHB、APB详解,2. STM32之AHB与APB总线,3. STM32的总线AMBA、AHB、APB。
STM32单片机课程自学知识点整理 - 指南版_第20张图片

7. GPIO的开漏输出与推挽输出

  1. 什么是GPIO的推挽输出和开漏输出#哔哩哔哩动画#


STM32单片机课程自学知识点整理 - 指南版_第21张图片

  1. 单片机怎么输出高电平!推挽输出和开漏输出最本质的区别?#哔哩哔哩动画#
    STM32单片机课程自学知识点整理 - 指南版_第22张图片

8. DMA

【芯片通识】04. 芯片中的捷径–DMA功能#哔哩哔哩动画#
STM32单片机课程自学知识点整理 - 指南版_第23张图片

9. CAN、422、485总线

电子哥讲解,CAN 、422、485总线的特点和区别#哔哩哔哩动画#
STM32单片机课程自学知识点整理 - 指南版_第24张图片

二、使用步骤

1. 寄存器的设置顺序

  1. 设置GPIO端口时钟
  2. 配置输入输出模式
  3. 配置ODR寄存器(设置需要的输出值)

其他

图纸上的VCC、VDD、VEE和VBB有什么区别

维基百科:IC power-supply pin

StakeExchange: What is the difference between , , ,


总结

提示:这里对文章进行总结。


  1. CSDN博客:Cortex-M3 I-Code,D-Code,系统总线及其他总线接口 ↩︎

  2. 参考野火的学习资料,CSDN博主「没霖好叫咩」也贴出来了一部分内容:原文链接 ↩︎

  3. 详解STM32中的DMA原理:Link ↩︎

  4. 知乎文章:梳理STM32芯片的内部架构 ↩︎

  5. 参考来源:STM32—— AHB、APB详解 ↩︎

你可能感兴趣的:(单片机,stm32,嵌入式硬件)