GPIO引脚翻转技巧

所谓翻转,就是1变0,0变1。

即第一次执行时,若引脚为高电平,则下一次再执行时,则让其变为低电平。

对于GPIO引脚来说,实现电平翻转,有很多方法。

其中两种比较好的方法如下:

(1)采用位带操作方法。

在stm32中,关于位带操作,有以下一些内容需要清晰:

1.支持位带操作的两个内存区的范围是:

0x2000_0000‐0x200F_FFFF(SRAM 区中的最低 1MB)

0x4000_0000‐0x400F_FFFF(片上外设区中的最低 1MB)

2.对于SRAM 位带区的某个比特,记它所在字节地址为 A,位序号为n(0<=n<=7),则该比特

在别名区的地址为:

AliasAddr = 0x2200 0000 + ((A-0x2000 0000)*8 + n)*4

= 0x2200 0000 + (A-0x2000 0000)*32 + n*4

对于片上外设位带区的某个比特,记它所在字节的地址为 A,位序号为 n(0<=n<=7),则该比特

在别名区的地址为:

AliasAddr = 0x4200 0000 + ((A-0x4000 0000)*8 + n)*4

= 0x4200 0000 + ((A-0x4000 0000)*32 + n*4

综上所述,要想实现对某个位进行位映射,可采用如下方法:

//得到位映射地址

//(0x2000 0000<= addr <=0x200F FFFF || 0x4000 0000<= addr <=0x400F FFFF)

#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+((addr &0xFFFFF)<<5)+(bitnum<<2))

//取地址内容

#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))

//取位映射地址内容

#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))

//假设想对GPIOB的PB5引脚进行位映射

#define GPIOB_ODR_Addr (GPIOB_BASE+0x0C)

//PB5即GPIOB第5引脚对应位映射地址的内容

#define PB5 BIT_ADDR(GPIOB_ODR_Addr,5)

(2)采用与1异或的方法:

0^1=0;1^1=0;从而实现了电平翻转。

(3)采用1取反

u8 nVal = 1<<5;  //PB5

while(1)

{

GPIOB->BSRR &= ~nVal;  //&1不改变原数

delay_ms(1000);

}

时间: 2024-10-17 03:27:44

GPIO引脚翻转技巧的相关文章

香蕉派和树莓派的不同点及GPIO引脚定义

今天淘宝买的香蕉派PVC外壳到了,把外壳装好,这个PVC外壳还是挺结实的,还带了个小风扇.香蕉派并不是一个简单的"克隆"树莓派的产品,香蕉派比树莓派有很多硬件及性能上的区别,最大的不同点在以下几个方面. 1. 所使用的芯片完全不同. 树莓派使用的是Broadcom ARM11内核, 香蕉派使用的是全智(Allwinner) ARM Cortex-A7 双核以CPU.  不同的ARM 架构造成了主要的不同点.  Banana Pi将在ARM V7架构上有更多的特性功能 ,并且能兼容ARM

Linux 内核层和 用户层 配置 GPIO 引脚

Linux BSP 开发的基础就是和GPIO打交道, 下面总结下这几天对某家开发板的GPIO控制的知识. 公司的开发板用的是 DTB  模式 ,首先,进入 dts,dtsi文件查看关于GPIO 的模块. soc { . . . gpio0: [email protected]****addr { compatible = "**********"; reg = <0 0x****addr 0 0x50>; interrupts = <SPI 4 IRQ_TYPE_LE

【STM】GPIO引脚配置方式

配置方式: 普通 GPIO 输入:根据需要配置该引脚为浮空输入.带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块 普通 GPIO 输出:根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块 普通模拟输入:配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块 内置外设的输入:根据需要配置该引脚为浮空输入. 带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块 内置外设的输出:根据需要配置该引脚为复用推挽输出或复用开漏输出,同

TMS320F28335项目开发记录8_28335之GPIO引脚

GPIO(General-Purpose Input/Output)--通用输入/输出口: DSP28335 GPIO模块分为三类IO口:PORTA(0-31),PORTB(32-63),PORTC(64-87) 对GPIO模块的设置主要通过三类寄存器来完成,分别是:控制寄存器.数据寄存器.中断寄存器. 1.控制寄存器 GPxCTRL;    // GPIO x Control Register (GPIO0 to 31) //设置采样窗周期T=2*GPXCTRL*Tsysclk: GPxQSE

TI CC2541的GPIO引脚设置.

P1SEL寄存器, 0xF4, 功能选择用的, 0表示GPIO口, 1表示外设. 寄存器0x90, 是制度的, 表示P1的8个引脚的状态. Port1的方向, 0表示输入, 1是输出.

树莓派GPIO引脚标识图

原文地址:https://www.cnblogs.com/Chorder/p/9114470.html

linux通用GPIO驱动

Linux开发平台实现了通用GPIO的驱动,用户通过,SHell或者系统调用能控制GPIO的输出和读取其输入值.其属性文件均在/sys/class/gpio/目录下,该目录下有export和unexport两个属性文件,其余都是连接文件,如gpiochipN等. export文件导出某个GPIO,unexport将导出的GPIO从/sysfs中删除.向export文件写入要操作的GPIO序号N可以导出对应的GPIO设备目录,例如: #echo 68>/sys/class/gpio/export

【DSP】TMS320F28335的GPIO

--> 关于TMS320F28335的GPIO的基础操作 TI的c2000系列DSP大多数的外设信号与通用输入/输出 (GPIO) 信号复用. 这使得用户能够在外设信号或者功能不使用时将一个引脚用作 GPIO. 复位时,GPIO 引脚被配置为输入. 针对 GPIO 模式或者外设信号模式,用户能够独立设定每一个引脚. 对于特定的输入,用户也可以选择输入限定周期的数量. 这是为了过滤掉有害的噪音毛刺脉冲. GPIO 信号也可被用于使器件脱离特定低功耗模式. 二.GPIO基础操作 1.GPIO初始化

linux内核关于uart2配置为RTS引脚时,串口无法使用的问题

前言: 在linux中,当gpio被配置为串口或者其他作用功能时,是无法再文件系统中再将该gpio进行导出(echo xx > /sys/class/gpio/export)的,内核不允许,因为你的该引脚已经作为其他功能使用. 在对linux内核进行配置时,make menuconfig 配置串口uart2为带有RTS引脚的情况.然后make编译内核,结果运行到板子上,在文件系统下确实能够导出该串口对应的gpio引脚的,这肯定是不正确的,经过测试,确实发现,此时的串口确实无法工作,像是失去了串口