STM32/51单片机实训day3——点亮LED灯、闪烁LED灯(一)理论

内  容:编写代码实现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初始化

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值