STM32GPIO——快速IO的使用

发布者:WhisperingSoul最新更新时间:2021-05-25 来源: eefocus关键字:STM32  GPIO  快速IO 手机看文章 扫描二维码
随时随地手机看文章

STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置'1'或置'0'。


GPIOx_BSRR的高16位中每一位对应端口x的每个位,对高16位中的某位置'1'则端口x的对应位被清'0';寄存器中的位置'0',则对它对应的位不起作用。


GPIOx_BSRR的低16位中每一位也对应端口x的每个位,对低16位中的某位置'1'则它对应的端口位被置'1';寄存器中的位置'0',则对它对应的端口不起作用。


简单地说GPIOx_BSRR的高16位称作清除寄存器,而GPIOx_BSRR的低16位称作设置寄存器。另一个寄存器GPIOx_BRR只有低16位有效,与GPIOx_BSRR的高16位具有相同功能。


举个例子说明如何使用这两个寄存器和所体现的优势。例如GPIOE的16个IO都被设置成输出,而每次操作仅需要改变低8位的数据而保持高8位不变,假设新的8位数据在变量Newdata中,


这个要求可以通过操作这两个寄存器实现,STM32的固件库中有两个函数GPIO_SetBits()和GPIO_ResetBits()使用了这两个寄存器操作端口。


上述要求可以这样实现:


GPIO_SetBits(GPIOE, Newdata & 0xff);

GPIO_ResetBits(GPIOE, (~Newdata & 0xff));


也可以直接操作这两个寄存器:


GPIOE->BSRR = Newdata & 0xff;

GPIOE->BRR = ~Newdata & 0xff;


当然还可以一次完成对8位的操作:


GPIOE->BSRR = (Newdata & 0xff) | (~Newdata & 0xff)<<16;


从最后这个操作可以看出使用BSRR寄存器,可以实现8个端口位的同时修改操作。


如果不是用BRR和BSRR寄存器,则上述要求就需要这样实现:


GPIOE->ODR = GPIOE->ODR & 0xff00 | Newdata;


使用BRR和BSRR寄存器可以方便地快速地实现对端口某些特定位的操作,而不影响其它位的状态。


比如希望快速地对GPIOE的位7进行翻转,则可以:


GPIOE->BSRR = 0x80; // 置'1'

GPIOE->BRR = 0x80; // 置'0'


如果使用常规'读-改-写'的方法:


GPIOE->ODR = GPIOE->ODR | 0x80; // 置'1'

GPIOE->ODR = GPIOE->ODR & 0xFF7F; // 置'0'


有人问是否BSRR的高16位是多余的,请看下面这个例子:


假如你想在一个操作中对GPIOE的位7置'1',位6置'0',则使用BSRR非常方便:

GPIOE->BSRR = 0x400080;


如果没有BSRR的高16位,则要分2次操作,结果造成位7和位6的变化不同步!

GPIOE->BSRR = 0x80;

GPIOE->BRR = 0x40;


关键字:STM32  GPIO  快速IO 引用地址:STM32GPIO——快速IO的使用

上一篇:STM32的中断理解笔记
下一篇:STM32中断与嵌套NVIC快速入门

推荐阅读最新更新时间:2024-11-18 16:58

初始化GPIO的常用格式
初始化GPIO的常用格式: 1.引用结构体 2.使能GPIO 3.设置引脚的引脚、模式、速度 4.初始化指定的GPIO 5.推挽输出要设置GPIO的高低电平 GPIO_InitTypeDef GPIO_InitStructure;//引用两个结构体 //GPIO是挂载在APB2总线的外设,使用使用RCC_APB2PeriphClockCmd()来实现。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA| RCC_APB2Periph_GPIOD, ENABLE); //使能 PA,PD 端口时钟 //设置引脚、模式、速度 GPIO_InitStructure.GPIO_Pin =
[单片机]
stm32 各头文件或C文件功能
stm32f10x_con.h 配置文件:加载哪个外设、使能assert 对参数进行检查,如果使能了assert 需要在main文件中添加 _assert_faild 函数。 使能assert会增大编译出执行文件的大小,调试完后可以将assert 屏蔽。 stm32f10x.h头文件中包含了stm32f10x_conf.h 。 stm32f10x.h 1、对所有的外设的地址进行映射,映射到存储区,即定义某外设结构体变量,因为结构体是连续存储的只要将外设的基地址强制转换为结构体类型的指针,那么该外设的寄存器就可以通过指针进行访问,以GPIO为例: 定义外设的结构体,结构体变量都
[单片机]
STM32_(部分全部)重映像
STM32的引脚可设置为可设置为:普通IO功能、复用功能、重映射功能。普通IO功能、复用功能用得比较多,这里就不叙述了。重映射功能,用的场合相对而言要少点。因为实在用定时器时在用到重映象,所以以F103的TIM3输出PWM波为例。 这是TIM3的复用功能映象表,可以看到没有重映象时TIM3的四个通道所对应的引脚为PA6、PA7、PB0、PB1;使用部分重映象时为PB4、PB5、PB0、PB1,因为只改变了部分引脚,所以叫部分重映象;使用完全重映象时为PC6、PC7、PC8、PC9,这全部的引脚都改了,所以叫完全重映象。 我这里要把TIM3_CH1、TIM3_CH1重映象到PC6、PC7。就要用到函数 GPIO_Pin
[单片机]
STM32_(部分全部)重映像
stm32学习之七
USART串口学习: 本篇主要是stm32板子与PC机器的连接,由于是初学,花了很长的时间思考的实验,才成功的配置成功串口的通信,煞费脑筋,所以自成一篇博客。 其实在买板子的时候,应该想到有能实现通信功能的连接线,但是主要是笔记本电脑,为了稳妥起见,不敢夸张的实验。 步骤: 1、有一个USB转(串口线)com(不专业的说法,但是清晰的可以看到板子上面有com1,就这样称呼)连接线,然后就有一根连接开发板的com线,这样可以实现PC机器和stm32的连接。如果电脑上显示驱动没有安装成功,那么这个时候就要想到驱动的安装问题了。可以网上找,或者......你知道的。 2、打开设备管理器,可以看到电脑上
[单片机]
<font color='red'>stm32</font>学习之七
基于STM32开发板和思岚A1M8激光雷达制作地图扫描仪
前言 一个朋友在做服务 机器人 项目,用到思岚的激光雷达,于是便把淘汰的A1M8雷达送我一个,本着拿到啥就玩啥的态度,必须整一波。其实激光雷达还是搭配 ROS 才能发挥最大的作用,奈何资源有限,实力不足,只能依靠 STM32 开发板做一个及其简陋的地图扫描。 思岚A1M8激光雷达 这款激光雷达属于低成本的360度激光扫描测距雷达,外置 电机 ,使用皮带带动雷达转台转动,实现360度的测距扫描,电机的转速由 MCU 发送PWM控制。 外部系统通过 TTL 电平的 UART 串口 信号 与 RPLIDAR 测距核心进行通讯。通过本文档定义的通讯协议,外部系统可以实时获取 RPLIDAR 的扫描数据、设备 信息 、设备健康状态。并且
[单片机]
基于<font color='red'>STM32</font>开发板和思岚A1M8激光雷达制作地图扫描仪
STM32F4 学习 day4 正点原子 第12讲 STM32 GPIO口工作原理
以上为GPIO的讲解顺序 在 开发指南第六章有简要的介绍 GPIO口 官方的参考 STM32F4中文参考手册 STM32 F407 的芯片资料 STM32f407 有7组 IO口 1.输入浮空 如果一个IO口 被配制成了浮空输入模式,那么它的 输出驱动器这部分的电路是不工作的。电平从IO口输入后先经过可以配置的上拉下拉 ,然后经过 TTL施密特触发器就会被打开,那么就可以通过输入数据寄存器读取IO口的电平。 2 输入上拉 如果被配置为输入上拉后,如上图所示的上拉电阻会被接到Vdd,输入的电平会被拉倒VDD, 之后经过TTL触发器后到输入数据寄存器,之后被CPU读取 3输入下拉 输入电平被拉低 4 模拟输入
[单片机]
STM32F4 学习 day4 正点原子 第12讲 <font color='red'>STM32</font> <font color='red'>GPIO</font>口工作原理
STM32中断,及FreeRTOS中断优先级配置
很多朋友对中断的一些知识还是不了解,今天就写点关于Cortex-M3处理器中断相关,以及FreeRTOS中断优先级配置的内容。 1写在前面 写本文之前,先写点相关的扩展内容。 STM32属于ARM中Cortex-M系列处理器,比如:STM32F1数据Cortex-M3,STM32F7数据Cortex-M7。 可以参看我之前分享文章: 从Cortex-M到Cortex-A认识ARM处理器 ,了解一下关于ARM处理器的种类。 本文主要结合Cortex-M3下面STM32F1系列处理器为例来讲述中断控制相关内容。而Cortex-M其它系列,或者说STM32其它系列关于中断的内容类似。 Cortex
[单片机]
<font color='red'>STM32</font>中断,及FreeRTOS中断优先级配置
GD32F303固件库开发(5)----GPIO输出模式,速率测试、开漏和输出说明
概述 以STM32CUBEMX创建STM32F103工程,同时移植在GD32F303中,同时通过GD32303C_START开发板内进行验证。 需要样片的可以加Qun申请:615061293。 硬件准备 这里准备了2块开发板进行验证,分别是GD32303C_START开发板。 样品申请 https://www.wjx.top/vm/wFGhGPF.aspx# 开发板管脚配置 在GD32303C_START中的LED管脚配置如下所示。 不同速率对应的波形 以PC3为例,在推挽输出无上下拉情况下,输出速率主要有4种,一般的低端MCU只有3种,没有Very High。 下面是ST的配置图。 在固件库中,定义如下所示。
[单片机]
GD32F303固件库开发(5)----<font color='red'>GPIO</font>输出模式,速率测试、开漏和输出说明
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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