内 容:编写代码实现LED灯的点亮功能
学 时:2学时
知识点:分析原理图、LED灯控制原理
重点:GPIO参数配置、LED原理图分析
难点:编写 GPIO参数配置函数、LED点亮函数
时间:2022年12月21日 9:00~11:50
目录
1. 软件需求分析是至关重要的一步
2. STM32芯片架构简图
3. ICode总线
4. 驱动单元
DCode总线
系统总线
DMA总线
5. 被动单元
内部的闪存存储器
内部的SRAM
FSMC
6. GPIO和AFIO的概念
7. STM32 GPIO工作模式
8种工作模式:
led灯的点亮用推挽式输出而不是开漏输出的原因?
8. GPIO配置
9. 步骤流程
1. 软件需求分析是至关重要的一步
2. STM32芯片架构简图
芯片,这里指内核,或者叫CPU,和外设之间通过各种总线连接,其中驱动单元有4个,被动单元也有4个。为了方便理解,我们可以把驱动单元理解成是CPU部分,被动单元都理解成外设。
3. ICode总线
ICode中的I表示Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在 FLASH中,内核要读取这些指令来执行程序就必须通过ICode总线,它几乎每时每刻都需要被使用,它是专门用来取指的。
4. 驱动单元
DCode总线
DCode中的 D表示Data,即数据,那说明这条总线是用来取数的。我们在写程序的时候,数据有常量和变量两种,常量就是固定不变的,用C语言中的const关键字修饰,是放到内部的FLASH当中的,变量是可变的。不管是全局变量还是局部变量都放在内部的SRAM。因为数据可以被Dcode总线和DMA总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
系统总线
系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根总线来完成的。
DMA总线
DMA总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在SRAM,可以在内部的FLASH。因为数据可以被DCode总线和DMA总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
5. 被动单元
内部的闪存存储器
内部的闪存存储器即FLASH,我们编写好的程序就放在这个地方。内核通过ICode总线来取里面的指令。
内部的SRAM
内部的SRAM,即我们通常说的RAM,程序的变量,堆栈等的开销都是基于内部的SRAM。内核通过DCode总线来访问它。
FSMC
FSMC的英文全称是flexible static memory controller,叫灵活的静态的存储器控制器,是STM32F10xx中一个很有特色的外设,通过FSMC,我们可以扩展内存,如外部的SRAM,NANDFLASH和NORFLASH。但有一点我们要注意的是,FSMC只能扩展静态的内存,即名称里的S:static,不能是动态的内存,比如SDRAM就不能扩展。
6. GPIO和AFIO的概念
GPIO(General Purpose Input Output,通用输入输出接口)是MCU与外部电路和设备连接的基本外设。也就是常说的端口或引脚。
AFIO(Alternate Function IO,复用功能IO)是指某些GPIO除了通用功能外还可以设置为一些外设专用的功能。
STM32F103有80个GPIO端口,其中的一些还可以把复用功能重新映射到其他引脚,已实现优化管脚数目和配置目的。
最多16个引脚为一组。
7. STM32 GPIO工作模式
STM32 GPIO端口的每个位可以根据不同的功能,由软件配置成八种模式。
8种工作模式:
输入浮空:用于不确定高低电平的输入。
输入上拉:用于默认为上拉至高电平的输入。
输入下拉:用于默认为下拉至低电平的输入。
模拟输入:用于模拟量的输入。
开漏输出:用于实现电平转换和线与功能的输出。
推挽式输出:用于较大功率驱动的输出。
推挽式复用功能:复用功能情况下的推挽输出。
开漏复用功能:复用功能情况下的开漏输出。
led灯的点亮用推挽式输出而不是开漏输出的原因?
开漏输出只能输出逻辑电平‘0’和高阻态,不能输出高电平;用推挽电路能得到高低电平的快速切换。
8. GPIO配置
GPIO的配置,调用固件库的GPIO_init()函数。
函数的原型:GPIO_init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct );
参考GPIOx
9. 步骤流程
(1)结构体struct——>创建一个结构体变量
(2)使用外设要开启时钟频率——>第一次传参
(3)配置
pin引脚
speed(输出模式下设置)
mode(工作模式:输入/输出;复用/非复用)
(4)init初始化