首页 > TAG信息列表 > 位带
STM32位带操作,实现类似51的GPIO功能---摘选自正点原子
此段代码摘选自正点原子 //位带操作,实现类似51的GPIO功能 //IO口操作宏定义 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) #define BIT_ADDR(addr, bi[GPIO]推荐一种超简单的硬件位带bitband操作方法,让变量,寄存器控制,IO访问更便捷,无需用户计算位置
说明: M3,M4内核都支持硬件位带操作,M7内核不支持。 硬件位带操作优势 优势1: 比如我们在地址0x2000 0000定义了一个变量unit8_t a, 如果我们要将此变量的bit0清零,而其它bit不变。 a & = ~0x01 这个过程就需要读变量a,修改bit0,然后重新赋值给变量a,也就是读 - 修改 - 写经典三部GPIO位带操作点亮LED,且使用按键控制开关
1. 项目 类似与C51单片机的位操作使能引脚来点亮LED. 例如,sbit P0^0 = 0 LED1 = P0^0; 2. 代码 main.c #include "stm32f10x.h" //相当于51单片机中的 #include <reg51.h> #include "bsp_key.h" #include "bsp_led.h" #define GPIOB_ODR_Addrstm32f103位带操作公式
1、地址区域 外设位带地址 0x40000000~0x40100000 外设位带别名区地址 0x42000000~0x43ffffff sram位带区地址 0x20000000~0x20100000 sram位带别名区地址STM32的位带操作
1. 什么是位带操作? 学习 51 单片机的时候就使用过位操作,通过关键字 sbit 对单片机IO口进行位定义。但STM32没有这样的关键字,于是便要通过访问位带别名区来实现。即:**将每一位膨胀成一个32位字,因此SRAM的1MB位带区就膨胀为32MB的位带别名区,通过访问位带别名区来实现访问位带中stm32F103 入门篇 14-位带操作-GPIO输入输出
GPIO->ODR |= 0<<0; P0 = 0XFE; // 总线操作 sbit LED1 = P0^0; //位操作 LED1 = 0; 位带简介: 外设位带区 1 AliasAddr= =0x42000000+ (A-0x40000000)84 +n4 SRAM 位带区 1 AliasAddr= =0x22000000+ (A-0x20000000)84 +n4 “位带地址+位序号”转’换成别名区地址统一成一个宏。