基于STM32F407的LED灯和蜂鸣器的实现(寄存器版本)

目录

一、问题的引入

二、STM32F4xxGPIO内部结构 

三、 STM32F4xxGPIO引脚简介 

四、STM32F4xxGPIO寄存器说明 

五、STM32F4xxGPIO时钟使能 

         1、练习: 点亮四个灯 

2、练习:实现流水灯 

3、练习:蜂鸣器的使用


一、问题的引入

学习STM32单片机前,要先了解单片机的最小系统组成

单片机的最小系统由以下四部分组成:
        芯片+晶振电路+复位电路+供电电路
    一个完整的系统则是:
        最小系统+其它的外设
    芯片: 
        整个系统的核心,相当于人类的大脑,会提供引脚与外部电路相连 
        芯片四周那些银白色的引脚是从芯片内部引申出来的。它负责芯片内部的控制单元与外部硬件的连接。
        那么一个引脚其实本质上就是一根"电线"。
    引脚拥有输入功能/输出功能,比如:
        1.引脚可以输出/输入一个电平信号(1/0)
            那么电平信号是针对于CPU来说的,因为CPU只能识别二进制0/1(数字信号)
        2.也可以称引脚可以输入/输出一个高低电压 
            因为对于外部电路来说,外部电路的工作是采用模拟电压信号(即多少V电压)
        为什么一个引脚对CPU和外部的电路的输入/输出是不一样的信号?它是怎么做到的?
            这是因为引脚在芯片内部还需要通过"控制单元"才能够进入CPU
        控制单元:
            不同硬件对应不同的控制单元:
                GPIO --->GPIO控制器 
                USART --->USART控制器 
                ......


二、STM32F4xxGPIO内部结构 


    参考<STM32F4xx中文参考手册.pdf>,英语基础比较好的同学也可以去看<STM32F4xx英文参考手册.pdf>。这两个手册可以到官网去下载,但是一般是全英文的。想要下载中文版的可以进入意法半导体STM32/STM8技术社区www.stmcu.org.cn ,里面有着STM32/STM8相关型号的芯片的各种资料。


    通过图得知,每个GPIO可以独立配置成不同的功能
    GPIO配置的功能如下:
    (1)输入功能 
        CPU可以通过该GPIO获取外部电路输入的一个电平状态 
        输入又分成以下几种模式:
        a.浮空输入:不接上拉电阻也不接下拉电阻 
            在这种情况下,IO引脚的电平状态完全由外部输入决定  3.3V-->1  0V-->0
        b.带上拉的输入:通过上拉电阻,接了VDD 
            此时,如果外部的引脚没有任何的输入的时候,CPU也能获取一个高电平(1)
            只有在外部输入一个低电平的时候,才能读取到一个低电平
        c.带下拉的输入:通过下拉电阻,接入了VSS 
            此时,如果外部的引脚没有任何的输入的时候,CPU也能获取一个低电平(0)
            只有在外部输入一个高电平的时候,才能读取到一个高电平 
        d.模拟输入 
            该引脚被配置为模拟输入,能够获取到的就是模拟信号
            通过ADC转换获取数字量 
    (2)输出功能 
        CPU可以通过该GPIO向外部电路输出一个电平 
        a.输出推挽(PP)
            CPU可以向外部电路输出高电平也可以输出低电平
        b.输出开漏(OD)
            CPU输出不了高电平,没有P-MOS管 
            CPU正常输出低电平 
    (3)复用功能(AF)
        复用功能是指GPIO用作其它的外设功能线 
        比如: 
            IIC、SPI、USART.....
        每个GPIO口理论上都可以配置成16种复用功能 
        具体哪个引脚可以复用成什么功能,由原理图以及手册决定

三、 STM32F4xxGPIO引脚简介 


    GPIO是什么 ?  通用功能输入输出
    GPIO就是从芯片内部引出的一根功能复用的线
    功能复用:GPIO引脚可以由CPU去配置成不同的功能
    比如: 
        输入功能、输出功能、复用功能、模拟功能等等
    STM32F407 共有144个引脚
    分成9组,记为GPIOA、GPIOB、.....GPIOI 
    简写模式:PA、PB.....
    每个组有16个引脚,编号从0~15 
    比如GPIOA组的引脚就有: 
        PA0~PA15 
    而这些GPIO引脚的功能,都有独立的寄存器组来配置,如果我们要使用这个GPIO,那么就必须先去配置它的寄存器组
    那么如果我们要去配置这些寄存器,就必须知道寄存器的地址。
    每组GPIO地址分布如下:
        可以通过<STM32F4xx中文参考手册>第2章可以查看
                    边界地址           外设        总线                   
            0x4002 2000 - 0x4002 23FF GPIOI                                                                
            0x4002 1C00 - 0x4002 1FFF GPIOH
            0x4002 1800 - 0x4002 1BFF GPIOG
            0x4002 1400 - 0x4002 17FF GPIOF
            0x4002 1000 - 0x4002 13FF GPIOE        AHB1
            0x4002 0C00 - 0x4002 0FFF GPIOD
            0x4002 0800 - 0x4002 0BFF GPIOC
            0x4002 0400 - 0x4002 07FF GPIOB
            0x4002 0000 - 0x4002 03FF GPIOA
    
    上述的表有几个名

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值