




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
STM32 IO口的位操作实现该部分代码实现对STM32各个IO口的位操作,包括读入和输出。当然在这些函数调用之前,必须先进行IO口时钟的使能和IO口功能定义。此部分仅仅对IO口进行输入输出读取和控制。代码如下:#define BITBAND(addr,bitnum) (addr&0xF0000000)+0x2000000+(addr&0xFFFFF)5)+(bitnum2)#define MEM_ADDR(addr) *(volatileunsignedlong*)(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) /0x40011A0855#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(位段/位带)和别名区使用入门一、 什么是位段和别名区 是这样的,记得MCS51吗? MCS51就是有位操作,以一位(BIT)为数据对象的操作,MCS51可以简单的将P1口的第2位独立操作: P1.2=0;P1.2=1 ;这样就把P1口的第三个脚(BIT2)置0置1。而现在STM32的位段、位带别名区就为了实现这样的功能。 它的对象可以是SRAM、I/O和外设空间。要实现对这些地方的某一位的操作。它是这样做的:在寻址空间(32位对应的地址空间为 4GB )的另一地方,取个别名区空间,从这个地址开始处,每一个字(32BIT)对应SRAM或I/O的一位。 这样,1MB SRAM 就可以有 32MB 的对应别名区空间,就是1位膨胀到32位(1 BIT 变为1个字节)。我们对这个别名区空间内的某一字操作(置0或置1),就等于它映射的 SRAM 或 I/O 相应的某地址的某一位的操作。二、使用位段的好处 简单来说,可以把代码缩小, 速度更快,效率更高,更安全。 一般操作要6条指令,而使用位带别名区只要4条指令。一般操作是 读改写的方式, 而位带别名区是 写 操作。防止中断对 读改写 的方式的影响。三、应用说明 支持了位带操作(bit_band),有两个区中实现了位带。其中一个是SRAM 区的最低1MB 范围,第二个则是片内外设区的最低1MB 范围。这两个区中的地址除了可以像普通的RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个 32 位的字。 每个比特膨胀成一个32 位的字,就是把 1M 扩展为 32M 。 于是,位于 RAM 地址 0X200000000 的一个字节扩展为8个32 位的字,扩展后每位相对应的的地址是:0X220000000,0X220000004,0X220000008,0X22000000C,0X220000010,0X220000014, 0X220000018,0X22000001C 支持位带操作的两个内存区的范围是:0x2000 00000x200F FFFF(SRAM 区中的最低1MB)0x4000 00000x400F FFFF(片上外设区中的最低1MB) 对 SRAM 位带区的某个比特,记该比特所在字节的地址为A,位序号为 n (0=n=7),则它在别名区的地址为:AliasAddr 0x22000000 + (A0x20000000)*8+n)*4 =0x22000000 + (A0x20000000)*32 + n*4对于片上外设位带区的某个比特,记该比特所在字节的地址为A,位序号为 n (0=n=7),则该比特在别名区的地址为:AliasAddr 0x42000000 + (A0x40000000)*8+n)*4 = 0x42000000 + (A0x40000000)*32 + n*4上式中,“*4”表示一个字为 4 个字节,“*8”表示一个字节中有 8 个比特。 把“位带地址位序号”转换别名地址宏为:#define BITBAND(addr, bitnum) (addr & 0xF0000000)+0x2000000 + (addr &0xFF FFF)5) + (bitnumbsrr.bit.BR4 =1;/ 1:清除对应的ODRy位为0 STM32_Gpioc_Regs-bsrr.bit.BS7 =1;/ 1:设置对应的ODRy位为1如果使用位带别名区操作:STM32_BB_Gpioc_Regs-BSRR.BR4 =1;/ 1:清除对应的ODRy位为0STM32_BB_Gpioc_Regs-BSRR.BS7 =1;/ 1:设置对应的ODRy位为1代码比STM32库高效十倍 !对内存变量的位操作:SRAM 变量:long CRCValue;把“位带地址位序号”转换别名地址宏:#define BITBAND(addr, bitnum) (addr & 0xF0000000)+0x2000000+(addr &0xFFFFF)5)+(bitnum2)把该地址转换成一个指针:#define MEM_ADDR(addr) *(volatile unsigned long *)(addr)对32位变量 的BIT1 置 1 :MEM_ADDR(BITBAND( (u32)&CRCValue,1) = 0x1;对任意一位( 第23位 ) 判断:if(MEM_ADDR(BITBAND( (u32)&CRCValue,23)=1)四、Cortex-M3中关于位段的定义 Cortex-M3 存储器映像包括两个位段(bit-band)区。这两个位段区将别名存储器区中的每个字映射到位段存储器区的一个位,在别名存储区写入一个字具有对位段区的目标位执行读-改-写操 作的相同效果。 所有STM32F10x外设寄存器都被映射到一个位段(bit-band)区。这个特性在各个函数中对单个比特进行置1/置0操作时被大量使用,用以减小和优化代码尺寸。映射公式映射公式给出别名区中的每个字是如何对应位带区的相应位的,公式如下:bit_word_offset = (byte_offset x 32) + (bit_n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年宿州市中医医院招聘卫生专业技术人员36人模拟试卷及答案详解(典优)
- 呼啸山庄读书心得体会7篇
- 2025年城市污水处理厂智能化升级改造项目实施方案与效果评估报告
- 2025年新零售技术无人超市市场前景与挑战分析报告
- 2025年新能源汽车产业链上下游协同制造技术布局报告
- 2025年工业厂房装配式建筑设计与施工协调报告
- 2025年甘肃酒泉玉门市招聘村级后备干部模拟试卷及答案详解1套
- 2025年甘肃省嘉峪关开放大学招聘公益性岗位人员模拟试卷(含答案详解)
- 宾客关系主任(GRO)教学设计中职专业课-前厅服务与管理-旅游类-旅游大类
- 2025年甘肃省白银有色集团股份有限公司技能操作人员社会招聘552人笔试历年参考题库附带答案详解
- GB/T 21073-2007环氧涂层七丝预应力钢绞线
- GB/T 17980.37-2000农药田间药效试验准则(一)杀线虫剂防治胞囊线虫病
- 压力管道特性表
- 高级会计师评审个人业绩报告(精选9篇)
- 血管活性药物(ICU)课件
- “手电筒”模型-高考数学解题方法
- 储能型虚拟电厂的建设与思考分析报告
- 楼地面装饰构造(史上最全面)
- 海关AEO管理体系高级认证企业名录
- TTAF 068-2020 移动智能终端及应用软件用户个人信息保护实施指南 第8部分:隐私政策
- DB32∕T 4065-2021 建筑幕墙工程技术标准
评论
0/150
提交评论