码迷,mamicode.com
首页 > 其他好文 > 详细

STM32F4——GPIO基本应用及复用

时间:2015-07-27 15:00:59      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:stm32   gpio   io复用   

IO基本应用

一、IO基本结构:

    针对STM32F4077IO,分别为GPIOA~GPIOG,每组IO16IO口,则有112IO口。其中IO口的基本结构如下:

技术分享

 

二、工作方式:

    STM32F4工作模式有8种,其中4中输入模式,4种输出模式,分别为:输入浮空、输入上拉、输入下拉、模拟模式、开漏输出、开漏复用输出、推挽输出、推挽复用输出。


    1、输入模式:

        在输入浮空模式下,电路既不上拉也不下拉,通过施密特触发器送到输入数据寄存器在送入到CPU。输入上拉和下拉模式分别是在电路中经过上拉和下拉后通过施密特触发器送入的CPU,模拟模式下,施密特触发器关闭后信号直接通过模拟通道至片上外设。

    2、输出模式:

        开漏输出模式下,CPU发送输入直接或间接的控制输出数据寄存器,通过输出控制电路,当信号为1时,NMOS管是关闭的,所以IO电平就是受上下拉电路的控制,当信号为0时,NMOS管导通输出就是下拉低电平;推挽输出模式下,信号为1时,P-MOS管导通,N-MOS管截止,输出就是上拉高电平,当信号为0时,P-MOS管截止,N-MOS管导通,输出就是下拉低电平;对于开漏复用和推挽复用模式与开漏和推挽的不同之处就是在于信号的开源不同,开漏复用和推挽复用的信号来源是片上的外设模块。


三、相关寄存器

    每一个通用的IO端口都包括432位的配置寄存器(GPIOx_MODERGPIOx_OTYPER、PIOx_OSPEEDR和GPIOx_PUPDR),232位的数据寄存器(GPIOx_IDRGPIOx_ODR),132位置位/复位寄存器(GPIOx_BSRR),132位锁定寄存器(GPIOx_LCKR)和232位复用功能选择寄存器(GPIOx_AFRL)。下面对其进行介绍。

    1、工作模式配置:1、端口模式(GPIOx_MODER):用来配置端口的模式为输入、输出、复用和模拟模式。2、端口类型(GPIOx_OTYPER):用来配置寄存器的模式为输出推挽还是输出开漏。3、端口速度(PIOx_OSPEEDR):用来配置端口的信息传输速率。4、端口上下拉(GPIOx_PUPDR):用来配置端口的无上下拉、上拉、下拉和保留模式。

    2、电平配置:1、输入数据(GPIOx_IDR):用到其低16位,分别对应该组IO口的一个电平状态。2、输出数据(GPIOx_ODR):与输入数据寄存器相似的功能。3、置位和复位(GPIOx_BSRR):与前两个不同的是置位和复位寄存器用到了32位,低16为设置为1时,用于置1相应位,高16位设置为1时,用于置0相应位,而低16位和高16位设置为0时不影响原值。

    3、复用功能配置:下面做相应说明。


IO复用

一、复用背景:

    由于考虑到IO口的有限,为了节省IO资源,同时为了更好的协调IO之间的工作,所以有必要在适当的时候给IO口赋予不同的功能,一个IO口在不同的时候可以承担不同的工作,这就是IO的复用功能。

二、复用原理:

    每一个IO口都会接有一个选择器,这个选择器经过相应寄存器(GPIOx_AFRHGPIOx_AFRL)的配置之后就可以做不同的功能的应用,这个寄存器就是GPIOx_AFRHGPIOx_AFRL

三、寄存器配置:

    每一组IO口都有一个AFRL和一个AFRH寄存器,他们都是32位的寄存器,其中每4位配置一个IO口的功能,则对应的GPIOx_AFRL就用来配置第0-7IO口,GPIOx_AFRH就用来配置第8-15IO口。每4位配置一个IO口,则4位数据的相关取值就会有对应的相应功能。如此一来就做好了相关配置。


综述:

    这些相关的配置过程会用到相应的函数和相应变量,熟练使用相关的函数,同时对函数的功能了解后才会应用的更加得心应手,同时也可以写自己的一些相关函数来进行操作,当然也可以直接操作相关的寄存器。



版权声明:本文为博主原创文章,未经博主允许不得转载。

STM32F4——GPIO基本应用及复用

标签:stm32   gpio   io复用   

原文地址:http://blog.csdn.net/rcj183419/article/details/47084175

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!