STM32中的位带(bit-band)操作
转: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)操作相关推荐
- STM32 进阶教程 8 - 位带操作
前言 有过51单片机开发经历的朋友应该都对51的IO口或一些特殊寄存器可以直接按位操作的方式不陌生吧,那么在stm32中有没有类似的操作呢,答案是肯定的,本节将给大家介绍如何在STM32中实现位带操作 ...
- STM32的位带操作
1. 什么是位带操作? 学习 51 单片机的时候就使用过位操作,通过关键字 sbit 对单片机IO口进行位定义.但STM32没有这样的关键字,于是便要通过访问位带别名区的方式来实现.即:将每一位膨胀成 ...
- 【STM32】位带原理分析和应用
00. 目录 文章目录 00. 目录 01. 位带概述 02. 位带操作 03. 位带C语言实现 04. 应用示例一 05. 应用示例二 06. 附录 07. 声明 01. 位带概述 位带操作简单的说 ...
- STM32:位带操作分析
STM32的位带操作分析 8051单片机可以直接对某一位IO进行读写操作,而Cortex-M3的位带操作是8051位寻址区的加强版.使用位带操作后,可以使用普通的加载/存储指令对单一的比特进行读写操作 ...
- 关于CM3/CM4位带操作的总结
1.位带操作定义 STM32的存储器映射中的内存区域和外设区域有一段地址空间(都是最低1MB)是位带区域,跟这个区域相对应的有一段位带别名区域,位带别名区的大小是位带区的32倍,位带别名区的每一个地址 ...
- 对位带操作的理解和应用
嵌入式_对位带操作的理解和应用 最近返回去研究stm32,看到STM32部分空间支持了位带操作,就是可以使用普通的加载/存储指令来对单一的比特进行读写.所以写篇日志记录以下对于位带操作的理解,本文参考 ...
- 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器基础板载资源的使用,包 ...
- STM32中位变量的实现
由于STM32没有位处理,所以STM32不像51单片机一样支持BIT变量,下面教大家怎么在STM32中实现位变量 1.首先定义一个结构体 typedef struct {unsigned char b ...
- STM32(五)------GPIO位带操作
GPIO位带操作 介绍 位带简介 外设位带区 SRAM位带区 位带区和位带别名区地址转换 GPIO 位带操作 代码解析 GPIO 寄存器映射 GPIO位操作 主函数 介绍 位带简介 位操作就是可以单独 ...
最新文章
- java concurrent包的学习(转)
- 【电影】美丽心灵的永恒阳光
- java:蓝桥杯练习 分解质因数
- linux中的bash shell的特性
- 分库分表全面了解分析
- MySQL高级-内存管理及优化
- 面经——Linux内核及驱动
- 57个深度学习专业术语
- matlab拉普拉斯算子边缘提取_【图像处理】OpenCV系列十 --- 边缘检测之Laplacian算子...
- cad编辑节点快捷键是什么_cad2018快捷键大全
- 安装软件提示计算机管理员权限,Win7安装软件需要管理员权限的解决方法
- 8.千峰教育os与窗口控制与内存修改与语言----自制随堂笔记
- 单例模式与反射的攻防之【 道高一尺,魔高一丈 】
- C++ 使用string的头文件和要求
- Html+Css面试题及答案
- 做完基线后centos /linux 系统修改密码报passwd: Module is unknown 未知模块 解决思路
- Ansible-大总结(六)
- QQ在线图标 离线 QQ开通在线QQ服务 QQ陌生人直接聊天
- MFC知识点和常用类控件的使用
- PR字幕模板 未来科幻电影PR文字特效HUD风格PR标题模板 V2
热门文章
- 7-158 验证“哥德巴赫猜想” (20 分)
- C语言中如何将小数或整数和字符串合二为一
- linux一键搭建ddns,LINUX下搭建DDNS
- java pcm16位_Java – 将16位带符号的pcm音频数据数组转换为双数组
- 在cmd中配置安装mysql数据库密码_windows安装mysql数据库并修改密码
- 白鹭引擎android打包,白鹭引擎能把动画打包成小程序吗
- java纪元时间_Java实现纪元秒和本地日期时间互换的方法【经典实例】
- python读取多个文件夹_如何从python中的文件夹中读取多个NetCDF文件
- C++中若类中没有默认构造函数,如何使用对象数组
- webpack的多文件打包问题