转:http://blog.csdn.net/gaojinshan/article/details/11479929

//位带操作,实现51类似的GPIO控制功能
//具体实现思想,参考<<CM3权威指南>>第五章(87页~92页).
//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, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
//IO口地址映射
#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
#define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
#define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
#define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
#define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C
#define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C    #define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808
#define GPIOB_IDR_Addr    (GPIOB_BASE+8) //0x40010C08
#define GPIOC_IDR_Addr    (GPIOC_BASE+8) //0x40011008
#define GPIOD_IDR_Addr    (GPIOD_BASE+8) //0x40011408
#define GPIOE_IDR_Addr    (GPIOE_BASE+8) //0x40011808
#define GPIOF_IDR_Addr    (GPIOF_BASE+8) //0x40011A08
#define GPIOG_IDR_Addr    (GPIOG_BASE+8) //0x40011E08 //IO口操作,只对单一的IO口!
//确保n的值小于16!
#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出
#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //输入 #define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //输出
#define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //输入 #define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //输出
#define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //输入 #define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //输出
#define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //输入 #define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //输出
#define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //输入#define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //输出
#define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //输入#define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  //输出
#define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //输入

STM32中的位带(bit-band)操作相关推荐

  1. STM32 进阶教程 8 - 位带操作

    前言 有过51单片机开发经历的朋友应该都对51的IO口或一些特殊寄存器可以直接按位操作的方式不陌生吧,那么在stm32中有没有类似的操作呢,答案是肯定的,本节将给大家介绍如何在STM32中实现位带操作 ...

  2. STM32的位带操作

    1. 什么是位带操作? 学习 51 单片机的时候就使用过位操作,通过关键字 sbit 对单片机IO口进行位定义.但STM32没有这样的关键字,于是便要通过访问位带别名区的方式来实现.即:将每一位膨胀成 ...

  3. 【STM32】位带原理分析和应用

    00. 目录 文章目录 00. 目录 01. 位带概述 02. 位带操作 03. 位带C语言实现 04. 应用示例一 05. 应用示例二 06. 附录 07. 声明 01. 位带概述 位带操作简单的说 ...

  4. STM32:位带操作分析

    STM32的位带操作分析 8051单片机可以直接对某一位IO进行读写操作,而Cortex-M3的位带操作是8051位寻址区的加强版.使用位带操作后,可以使用普通的加载/存储指令对单一的比特进行读写操作 ...

  5. 关于CM3/CM4位带操作的总结

    1.位带操作定义 STM32的存储器映射中的内存区域和外设区域有一段地址空间(都是最低1MB)是位带区域,跟这个区域相对应的有一段位带别名区域,位带别名区的大小是位带区的32倍,位带别名区的每一个地址 ...

  6. 对位带操作的理解和应用

    嵌入式_对位带操作的理解和应用 最近返回去研究stm32,看到STM32部分空间支持了位带操作,就是可以使用普通的加载/存储指令来对单一的比特进行读写.所以写篇日志记录以下对于位带操作的理解,本文参考 ...

  7. 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器基础板载资源的使用,包 ...

  8. STM32中位变量的实现

    由于STM32没有位处理,所以STM32不像51单片机一样支持BIT变量,下面教大家怎么在STM32中实现位变量 1.首先定义一个结构体 typedef struct {unsigned char b ...

  9. STM32(五)------GPIO位带操作

    GPIO位带操作 介绍 位带简介 外设位带区 SRAM位带区 位带区和位带别名区地址转换 GPIO 位带操作 代码解析 GPIO 寄存器映射 GPIO位操作 主函数 介绍 位带简介 位操作就是可以单独 ...

最新文章

  1. java concurrent包的学习(转)
  2. 【电影】美丽心灵的永恒阳光
  3. java:蓝桥杯练习 分解质因数
  4. linux中的bash shell的特性
  5. 分库分表全面了解分析
  6. MySQL高级-内存管理及优化
  7. 面经——Linux内核及驱动
  8. 57个深度学习专业术语
  9. matlab拉普拉斯算子边缘提取_【图像处理】OpenCV系列十 --- 边缘检测之Laplacian算子...
  10. cad编辑节点快捷键是什么_cad2018快捷键大全
  11. 安装软件提示计算机管理员权限,Win7安装软件需要管理员权限的解决方法
  12. 8.千峰教育os与窗口控制与内存修改与语言----自制随堂笔记
  13. 单例模式与反射的攻防之【 道高一尺,魔高一丈 】
  14. C++ 使用string的头文件和要求
  15. Html+Css面试题及答案
  16. 做完基线后centos /linux 系统修改密码报passwd: Module is unknown 未知模块 解决思路
  17. Ansible-大总结(六)
  18. QQ在线图标 离线 QQ开通在线QQ服务 QQ陌生人直接聊天
  19. MFC知识点和常用类控件的使用
  20. PR字幕模板 未来科幻电影PR文字特效HUD风格PR标题模板 V2

热门文章

  1. 7-158 验证“哥德巴赫猜想” (20 分)
  2. C语言中如何将小数或整数和字符串合二为一
  3. linux一键搭建ddns,LINUX下搭建DDNS
  4. java pcm16位_Java – 将16位带符号的pcm音频数据数组转换为双数组
  5. 在cmd中配置安装mysql数据库密码_windows安装mysql数据库并修改密码
  6. 白鹭引擎android打包,白鹭引擎能把动画打包成小程序吗
  7. java纪元时间_Java实现纪元秒和本地日期时间互换的方法【经典实例】
  8. python读取多个文件夹_如何从python中的文件夹中读取多个NetCDF文件
  9. C++中若类中没有默认构造函数,如何使用对象数组
  10. webpack的多文件打包问题