STM32F4学习笔记3——通用IO

发布者:Weasel最新更新时间:2021-12-07 来源: eefocus关键字:STM32F4  通用IO  寄存器 手机看文章 扫描二维码
随时随地手机看文章

STM32F4每个GPIO端口有四个32位配置寄存器(GPIOx_MOER,GPIOx_OTYPER,GPIOx_OSPEEDR和GPIOx_PUPDR),两个32位数据寄存器(GPIO_IDR和GPIO_ODR),一个32为置位/复位寄存器(GPIOx_BSRR),一个32为GPIO锁寄存器(GPIOx_LCKR),两个32为复用功能寄存器(GPIOx_AFRH和GPIOx_AFRL)。


主要特性如下

·每个端口支持16个IO引脚控制

·推挽或者开漏+带上拉电阻或者下拉电阻

·从数据输出寄存器(GPIOx_ODR)或者外设(复用功能引脚)输出数据

·每个IO支持速度选择

·输入状态:浮动,上拉/下拉,模拟

·输入数据到输入数据寄存器(GPIOx_IDR)或者外设(复用功能输入)

·置位和复位寄存器(GPIOx_BSRR)

·GPIO锁机制,用于冻结IO配置

·模拟输入

·复用功能输入输出选择寄存器

·每两个时钟周期的快速IO切换

·高灵活度的复用功能使得IO可以作为通用IO使用或者外设使用


根据数据手册中列出的每个 I/O 端口的特定硬件特征,GPIO 端口的每个位可以由软件分别配置成多种模式。

·输入浮空

·输入上拉

·输入下拉

·模拟输入

·具有上拉下拉功能的开漏输出

·具有上拉下拉功能的推挽输出

·具有上拉下拉功能的推挽复用功能

·具有上拉下拉功能的开漏复用功能


每个IO口可以自由编程,端口寄存器必须按32位字被访问。GPIOx_BSRR跟GPIOx_BRR允许对热河GPIO的读/写的独立访问;这样在读和写之间访问之间产生IRQ(中断请求)时不会发生危险。 关于引脚耐压5V可以参考数据手册的引脚说明。


复位期间跟刚复位后,复用功能未开启,IO端口被配置成浮空输入模式,复位后JTAG引脚被置于输入上拉或下拉模式。


PA15:JTDI置于上拉模式

PA14:JTCK/SWCLK置于下拉模式

PA13:JTMS/SWDAT置于上拉模式

PB4:JNTRST置于上拉模式

PB3:JTDO浮空状态


微控制器通过多路选择器将 IO 引脚与相应的片上外设相连接,这里要注意一点,每一次只能与一个片上外设相连接,防止多个外设使用这个引脚造成冲突。


每个引脚都有一个多路选择器,每个多路选择器有 16 路输入(AF0 到AF15) ,通过寄存器 GPIOx_AFRL(从 0 到 7)和 GPIOx_AFRH(从 8 到 15)进行配置。


·复位后 IO 引脚默认连接到系统复用功能 0(AF0)

·片上外设的复用功能映射从 AF1 到 AF13

·M4 的 FPU EVENTOUT 映射到 AF15

不能将EVENTOUT映射到一下引脚:PC13,PC14,PC15,PH0,PH1和PI8

置位和复位寄存器(GPIOx_BSRR)是一个 32 位寄存器,允许用户程序置位或者复位输出数据寄存器 GPIOx_ODR 的每个位。置位和复位寄存器GPIOx_BSRR 的位数是 GPIOx_ODR 的两倍。寄存器 GPIOx_BSRR 就是对寄存器 GPIOx_ODR 的位操作,GPIOx_BSRR 的高 16 位用于复位操作,低 16 位用置位操作,只有对寄存器 GPIOx_BSRR 相应的位置 1 才对寄存器 GPIOx_ODR 有效,置 0 是无效的。如果对于寄存器GPIOx_ODR 的同一位同时进行置位和复位操作,那么置位操作的优先级要高。当对 GPIOx_ODR 的个别位编程时,软件不需要禁止中断:在单次AHB1 写操作里,可以只更改一个或多个位。GPIO锁允许冻结IO配置。在一个端口位上执行了LOCK程序,下一次复位前将不能再更改端口位配置。


所有端口都有外部中断能力,在使用外部中断先端口必须配置成输入模式。


模拟输入配置时,输出换从其被禁止,禁止施密特触发器输入,弱上拉下拉被电阻禁止,读输入寄存器时数值为0。


外设的GPIO设置模式在F1参考手册上有,但是在F4上这个说明没有了具体大家在使用的时候可以参考f1,也可以参考官方外设例子。


STM32F4的GPIO库

初始化配置函数

void GPIO_DeInit(GPIO_TypeDef*GPIOx)初始化GPIO寄存器到默认值

void GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)GPIO初始化

void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)将GPIO_InitStruct组员设置到默认值

void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)GPIO寄存器锁


GPIO的读和写

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)读某一引脚的输入数据寄存器IDR

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)读某一端口的输入数据寄存器IDR

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)读某一端口的输出数据寄存器ODR

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)读某一引脚的输出数据寄存器ODR

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)GPIO置高

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)GPIO置低

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,BitAction BitVal)根据BitVal写ODR寄存器

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)设置输出寄存器ODR数值

void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)通过GPIO->ODR^=GPIO_Pin;实现GPIO翻转


GPIO复用功能配置函数

void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)使用前要先使能GPIO时钟与外设时钟

关键字:STM32F4  通用IO  寄存器 引用地址:STM32F4学习笔记3——通用IO

上一篇:STM32F4学习笔记13——ADC part1
下一篇:STM32学习笔记13——DAC

推荐阅读最新更新时间:2024-11-09 12:13

STM32入门系列-存储器与寄存器介绍
介绍两部分内容: 什么是存储器映射 什么是寄存器及寄存器映射 为了让大家对存储器与寄存器有一个更清楚的认识,并且为之后使用 C 语言来访问 STM32 寄存器内容打下基础。等明白了如何使用 C 语言封装底层寄存器,也就为后面学习库函数的开发做好了铺垫。 什么是存储器映射 程序存储器、数据存储器、寄存器和I/O端口排列在同一顺序的4GB地址空间内。这就是我们曾提到过的被控总线的连接部分,而编程时就是操作这一块地方。存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程称为存储器映射,如果再分配一个地址就叫重映射。 STM32F103ZET6 数据手册中存储器映射图如下所示。 从上图中可以看到
[单片机]
80C51单片机实现专用寄存器位寻址的设计方案
80C51单片机有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式。所谓位寻址,就是对内部RAM或可位寻址的特殊功能寄存器SFR内的某个位,直接加以置位为1或复位为0。 位寻址的范围,也就是哪些部份可以进行位寻址: 1、我们在第十二课学习51单片机的存储器结构时,我们已知道在单片机的内部数据存储器RAM的低128单元中有一个区域叫位寻址区。它的单元地址是20H-2FH。共有16个单元,一个单元是8位,所以位寻址区共有128位。这128位都单独有一个位地址,其位地址的名字就是00H-7FH。 这里就有一个比较麻烦的问题需要大家理解清楚了。我们在前面的学习中00H、01H。。。。7FH等等,所表示的都是一个字节(或者
[单片机]
80C51单片机实现专用<font color='red'>寄存器</font>位寻址的设计方案
STM32 GPIO 寄存器的配置
配置每组IO口的寄存器:(每一组一套寄存器) 1、两个32位的配置寄存器;GPIOx_CRL,GPIOx_CRH 2、两个32位的数据寄存器:GPIOx_IDR,GPIOx_ODR 3、一个32位置位/复位寄存器:GPIOx_BSRR 4、一个16位的复位寄存器GPIOx_BRR 5、一个32位的锁定寄存器GPIOx_LCKR 详解 : CRL和CRH控制IO口,是四个位控制一个口,所以要两个32位的来控制16个口 1、GPIOx_CRL:端口配置低寄存器: 每个口由四位控制,为MODE+CNF联合配置,具体模式在下图中。(输入要与输入对应,输出也要与输出对应) 具体对应输入输出配置表(对上图的详解): 2、GPIOx_
[单片机]
STM32 GPIO <font color='red'>寄存器</font>的配置
STM32F4知识:Flash如何设置成读保护
1,目的 在实际的产品发布中,如果不对储存在单片机Flash中的程序做一些保护的话,就有可能被一些不法公司,通过仿真器(J-Link,ST-Link等)把Flash中的程序读取回来,得到bin文件或hex文件,然后去山寨产品。所以我们需要对程序进行保护,一种比较简单可靠的方法就是把Flash设置成读保护。 2,开发环境 1,适用芯片:STM32F4全部芯片 2,固件库:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0 3,IDE:MDK517 3,程序源码
[单片机]
<font color='red'>STM32F4</font>知识:Flash如何设置成读保护
STM32入门——寄存器
GPIO学习: 引脚的分类:1.电源引脚 2.晶振引脚 3.复位引脚 4.下载引脚 5.BOOT引脚 6.GPIO引脚 GPIO的结构:1.保护二极管 --引脚两端连接上两个二极管,设置好高低电压,这样超过这个电压之后二极管导通就会保护里面的电路。这能处于两端电压设置的中间值。2.上下拉电阻--上下拉电阻在输入方向门口,用于稳定电压 3.P-MOS和N-MOS管 --- 这是输出模式的门口,推挽输出和开漏输出,推挽输出3.3V ,靠命令传来的电压,激活开关,使他们链接对应的高低电压传出去。 开漏输出能输出5V电压,开漏输出就是控制开关开或者关,上边要接上一个上拉电阻,关掉就是低电压,开开就是高电压。 4.输出寄存器---输出寄存器
[单片机]
毕业设计| STM32F407智能汽车
STM32小车功能介绍 小车的硬件部分使用了以STM32F407VET6最小开发板为核心板,内部结合:温湿度模块、烟雾浓度模块、RFID模块、GSM模块、GPS定位模块、语音识别模块、超声波模块、蓝牙模块、OLED模块、舵机模块、电机驱动模块、电机模块、蜂鸣器模块、电压数码管显示模块和电源模块,外结合四个麦克纳姆轮,构成一个完整可靠的硬件系统。 软件控制系统包括了智能显示系统、语音智能控制系统、无线控制系统、车灯智能控制系统、安全报警系统、智能避撞系统、智能温控系统和一键报警系统,在一定程度上提高汽车的安全性、控制性和防盗性。 Image 各个功能分解 语音智能控制系统: 通过语音识别模块识别驾驶员的语音来控
[单片机]
毕业设计| <font color='red'>STM32F4</font>07智能汽车
如何在STM32F407单片机上使用通用的BootLoader经验分析
因为在使用RT-Thread RTOS的时候发现官方提出了一种通用的BootLoader方案,支持F1和F4系列的芯片,正好手头有板子便试着用了下,顺便给大家分享一下经验总结吧。 硬件资源 正点原子stm32f407zgt6探索者开发板,片上Flash(ROM)大小为1024KB,RAM大小为192KB,板载一个SPI Flash W25Q128。 BootLoader配置 根据官方文档:https://www.rt-thread.org/document/site/application-note/system/rtboot/an0028-rtboot/,(因为微信无法插入外部链接,请复制至外部浏览器打开)BootLoa
[单片机]
如何在<font color='red'>STM32F4</font>07单片机上使用<font color='red'>通用</font>的BootLoader经验分析
STM32 CAN接收/发送错误寄存器如何清零?
CAN总线是一种常用的串行总线,其具有高可靠性、高速率、容错能力强等特点,广泛应用于汽车电子、制造业自动化、工程控制等领域。在CAN总线的标准中,每一个节点都有一个CAN控制器,CAN控制器通过内部寄存器和接口与CAN总线连接。其中,在CAN传输过程中,如果出现错误,会在CAN控制器内部错误寄存器中记录错误信息。因此,在使用STM32进行CAN接收/发送时,及时清零错误寄存器是非常重要的。 一、STM32的CAN错误寄存器 STM32是一款常用的单片机,内置了CAN控制器,其错误寄存器分为两种类型: 1.接收错误寄存器:即CAN接收错误寄存器,用于记录CAN接收过程中出现的错误信息; 2.发送错误寄存器:即CAN发送错误寄存器,用
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved