0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于stm32的GPIO寄存器学习解析

MCU开发加油站 2018-01-11 09:03 次阅读

GPIO即通用输入/输出 (General Purpose Input Output)

包括:

两个32位的配置寄存器 GPIOx->CRL,GPIOx->CRH

两个32位的数据寄存器 GPIOx->IDR,GPIOx->ODR

一个32位的 set/reset 寄存器 GPIOx->BSRR

一位16位的 reset 寄存器 GPIOx->BRR

一位32位的锁定寄存器 GPIOx->LCKR

端口的模式包括:

浮空输入(Input floating)—— 即没有上拉电阻和下拉电阻,电压呈不确定性,一般用来做ADC输入用,这样可以减少上下拉电阻对结果的影响

基于stm32的GPIO寄存器学习解析

上拉输入(Input pull-up)

下拉输入(Input-pull-down)

模拟输入(Analog

开漏输出(Output open-drain)—— 输出逻辑0,则N-MOS激活; 输出逻辑1,端口处于高阻(电阻非常大,但不是断路,此外,P-MOS从未激活)

推挽输出(Output push-pull)—— 输出逻辑0,则N-MOS激活;输出逻辑1,P-MOS激活

复用功能推挽输出(Alternate function push-pull)——片内外设功能(I2C的SCL,SDA)

复用功能开漏输出(Alternate function open-drain)——片内外设功能(USART的TX1,SPI的MOSI,MISO,SCK,SS)

复用开漏输出、复用推挽输出:可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)

注意:I / O端口寄存器被访问为32位字(半字或字节存取是不允许的)

其余具体的可以查看stm3210x 手册

GPIOx->CRL 低位(0-7)端口配置寄存器(x = A~ G,该寄存器偏移地址为:0x00):

GPIOx->CRH 高位(8-15)端口配置寄存器(x = A~ G,该寄存器偏移地址为:0x04):

GPIOx->IDR 端口数据输入寄存器(x = A~ G,该寄存器偏移地址为:0x08):只读,可以读取IO口输入的值

GPIOx->ODR 端口数据输出寄存器(x = A~ G,该寄存器偏移地址为:0x0C):可写可读,可以设置IO口输出的值

GPIOx->BSRR 低位端口配置寄存器(x = A~ G,该寄存器偏移地址为:0x10):0-15位——为1时,可以使ODRx相应的位置1,为0时,无变化 。15-31位——为1时,可以使ODRx相应的位清零,为0时,无变化(注:当set和reset都设置了,则set优先级高)

GPIOx->BSR 低位端口配置寄存器(x = A~ G,该寄存器偏移地址为:0x14): 0-15位——为1时,可以使ODRx相应的位清零,为0时,无变化

注:用BSRR和BRR去改变管脚状态的时候,没有被中断打断的风险,也就不需要关闭中断

GPIOx->LCKR 端口配置锁定寄存器(x = A~ G,该寄存器偏移地址为:0x18):用来锁定对应位的端口位配置,当端口被锁定时,不再有可能修改它的值,直到系统复位。每一个锁都冻结相应的4位控制寄存器(CRL,CRH)

例子:

/*根据高8位的输入电平来决定低8位的输出电平*/

GPIOA->CRL = 0x33333333; //GPIOA.0-GPIO0.7 output push-pull 50MHzGPIOA->CRH = 0x44444444; //GPIOA.8-GPIOA.15 input floating

while(1){if(GPIOA->IDR & 0xff00)GPIOA->ODR = (GPIOA->IDR >> 8) & 0xff;elseGPIOA->ODR = 0;}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5027

    浏览量

    117710
  • STM32
    +关注

    关注

    2239

    文章

    10670

    浏览量

    348712
  • GPIO
    +关注

    关注

    16

    文章

    1133

    浏览量

    50561

原文标题:stm32之GPIO寄存器学习

文章出处:【微信号:mcugeek,微信公众号:MCU开发加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32单片机的GPIO寄存器有哪些

    STM32寄存器多如牛毛,要一个一个的弄清楚谈何容易呀,所以我们在学习的时候要抓住重点,挑重要的进行学习和记忆,因为STM32一个一个去配
    发表于 01-05 07:52

    CSD寄存器解析

    CSD寄存器解析,SD卡寄存器解说,值得学习
    发表于 01-06 14:25 0次下载

    STM32 GPIO寄存器ODR BSRR BRR

    STM32 GPIO寄存器ODR BSRR BRR详细介绍
    发表于 07-29 10:27 2次下载

    STM32 BSRR BRR ODR寄存器详情解析

    BSRR 和 BRR 都是 STM32 系列 MCU 中 GPIO寄存器。 BSRR 称为端口位设置/清楚寄存器,BRR称为端口位**寄存器
    发表于 11-13 09:54 1.1w次阅读

    STM32使用BSRR和BRR寄存器快速操作GPIO端口

    STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通过这两个寄存器可以直接对对应的GPIOx
    发表于 11-26 11:50 1次下载

    STM32单片机GPIO寄存器的功能解析

    对于GPIO端口,每个端口有16个引脚,每个引脚的模式由寄存器的四个位控制,每四位又分为两位控制引脚配置(CNFy[1:0]),两位控制引脚的模式及最高速度(MODEy[1:0]),其中y表示
    发表于 12-04 14:54 1.2w次阅读
    <b class='flag-5'>STM32</b>单片机<b class='flag-5'>GPIO</b><b class='flag-5'>寄存器</b>的功能<b class='flag-5'>解析</b>

    STM32F4寄存器与IO输入输出学习

    IO设置函数包括两个函数:GPIO_Set和GPIO_AF_Set. GPIO_AF_Set,每次只能设置一个IO口的复用功能。STM32F4的每组通用I/O端口包括4个32位配置
    发表于 11-29 14:21 10次下载
    <b class='flag-5'>STM32</b>F4<b class='flag-5'>寄存器</b>与IO输入输出<b class='flag-5'>学习</b>

    STM32F4深入学习GPIO

    本文章根据stm32f4xx中文参考手册整理,可供学习其他arm内核单片机/stm32系列单片机参考如果对其中的内容有疑问,可以参考RCC、定时器、中断相关部分的解析以下内容使用SPL
    发表于 12-01 11:21 9次下载
    <b class='flag-5'>STM32</b>F4深入<b class='flag-5'>学习</b>【<b class='flag-5'>GPIO</b>】

    GPIO寄存器

    ,一般高16位保留BSRR寄存器32位分为低16位BSRRL和高16位BSRRH,BSRRL配置一组IO口的16个IO口的状态(1),BSRRH配置复位状态(0)。每组GPIO端口的寄存器包括:4个32位配置
    发表于 12-08 17:06 5次下载
    <b class='flag-5'>GPIO</b><b class='flag-5'>寄存器</b>

    STM32寄存器点灯

    配置寄存器使STM32最小系统板上的LED灯点亮根据原理图,要使D2点亮,需要将PC13拉低,分为以下步骤:使能GPIO的时钟配置GPIO13为输出模式配置
    发表于 12-08 17:21 3次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>寄存器</b>点灯

    STM32学习笔记(2)——寄存器

    STM32 第二天寄存器寄存器功能:寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的
    发表于 12-08 17:36 18次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b>笔记(2)——<b class='flag-5'>寄存器</b>

    stm32是如何将寄存器值通过标准库写入寄存器的?

    GPIO_Init函数3.总结0. 前言在平时的学习和工作中,可能很少有人会实际去操作寄存器,但是去了解库函数是如何去操作寄存器是很有必要的。不仅可以加深对
    发表于 12-16 16:58 18次下载
    <b class='flag-5'>stm32</b>是如何将<b class='flag-5'>寄存器</b>值通过标准库写入<b class='flag-5'>寄存器</b>的?

    STM32-GPIO_寄存器版(1)

    本文基于STM32F407ZGT6,适用于M3/M4大部分内核的STM32芯片。——————————————————————————————STM32每个通用 I/O 端口包括 10个32位
    发表于 12-28 19:26 0次下载
    <b class='flag-5'>STM32-GPIO</b>_<b class='flag-5'>寄存器</b>版(1)

    STM32F103寄存器配置相关学习 —— GPIO

    1. GPIO相关寄存器1.1 配置寄存器(CRL、CRH)1.2 数据寄存器(IDR、ODR)1.3 位设置/清除寄存器(BSRR)1.4
    发表于 01-17 09:33 2次下载
    <b class='flag-5'>STM32</b>F103<b class='flag-5'>寄存器</b>配置相关<b class='flag-5'>学习</b> —— <b class='flag-5'>GPIO</b>

    STM32GPIO的相关配置寄存器、库函数、位操作

    STM32的每组GPIO口包括7个寄存器。也就是说,每个寄存器可以控制一组GPIO的16个GPIO
    发表于 02-10 10:24 5次下载
    【<b class='flag-5'>STM32</b>】<b class='flag-5'>GPIO</b>的相关配置<b class='flag-5'>寄存器</b>、库函数、位操作