stm32位绑定

转载 2017年01月02日 21:01:11
学习stm32位绑定
刚开始确实有些不明白位绑定的一些内容及其操作的步骤,搞不明白在写些什么,看了一些书籍,视频,自己写了一写,感觉有些了解了吧。
写下一篇方便自己查看。

SARM区:0x2000_0000‐0x200F_FFFF  这个SRAM绑定的地址就是从0x2200 0000开始的   

片上外设区:0x4000_0000‐0x400F_FFFF  这个区绑定的地址就是从0x4200 0000开始的、、

#include"stm32f10x.h"
#define GIPOA_IDR ( GPIOA_BASE + 0X08)
#define GIPOA_ODR ( GPIOA_BASE + 0X0C)
#define GIPOB_IDR ( GPIOB_BASE + 0X08)
#define GIPOB_ODR ( GPIOB_BASE + 0X0C)
#define GIPOC_IDR ( GPIOC_BASE + 0X08)
#define GIPOC_ODR ( GPIOC_BASE + 0X0C)
#define GIPOD_IDR ( GPIOD_BASE + 0X08)
#define GIPOD_ODR ( GPIOD_BASE + 0X0C)       
#define BitBound(Addr,BitNum) (*((volatile unsigned long*)((Addr&0xF0000000)+0X2000000+((Addr&0xFFFFF)<<5)+(BitNum<<2))))
#define PAOut(n)        BitBound(GIPOA_ODR,n)
#define PAIn(n)         BitBound(GIPOA_IDR,n)
#define PBOut(n)        BitBound(GIPOB_ODR,n)
#define PBIn(n)         BitBound(GIPOB_IDR,n)
#define PCOut(n)        BitBound(GIPOC_ODR,n)
#define PCIn(n)         BitBound(GIPOC_IDR,n)
#define PDOut(n)        BitBound(GIPOD_ODR,n)
#define PDIn(n)         BitBound(GIPOD_IDR,n)
 int main(void)
{
	 GPIOA->CRL=0X33333333;
   GPIOA->CRH=0X44444444;
	 while(1)
        {
                        if( PAIn(8) == 0)                               
                                        PAOut(0) = 0;                    
                        else
                                        PAOut(0) = 1;
                        if( PAIn(9) == 0)
                                        PAOut(1) = 0;
                        else
                                        PAOut(1) = 1;
                        if( PAIn(10) == 0)
                                        PAOut(2) = 0;
                        else
                                        PAOut(2) = 1;
        }
}

Addr&0xf0000000   因为我们不知道到底是SRAM还是片上外设区,所以我们这里取其最高位  因为最高位有可能为4 也有可能为2

Addr&0xfffff   可以看到位绑定的范围0x2000_0000‐0x200F_FFFF  0x4000_0000‐0x400F_FFFF  所以我们这里把高三位屏蔽掉,就相当于 A - 0x20000000的效果了、、为什么我这里要用《5 和《2 呢?对比一下、、我们可以知道《5相当于*32  《2相当于*4    那我们为什么要用左移符号呢??原因在这:因为左移的处理速度要比乘的快很多、、我们尽量把乘除转化为加减和左右移写到这里


STM32学习二:理解位绑定

一篇关于STM32位绑定、寄存器操作的理解
  • wingcky
  • wingcky
  • 2017年02月14日 14:19
  • 1757

STM32中的位带(bit-band)操作

支持了位带操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。在 CM3 中, 有两个区中实现了位带。其中一个是 SRAM 区的最低 1MB 范围,第二个则是片内外设区的 最低 1MB范围。这...
  • gaojinshan
  • gaojinshan
  • 2013年09月09日 15:33
  • 27073

STM32学习三:下载标准外设库(Standard Peripherals Library )

要想进行STM32编程,一是直接操作寄存器,这在上节有介绍,另一个办法是使用官方提供的标准外设库(Standard Peripherals Library )。 其实这也没什么好说的,按说既然是官方...
  • wingcky
  • wingcky
  • 2017年03月02日 10:35
  • 1243

STM32位用法绑定

//位绑定区域: //SRAM: 0X2000 0000 ~ 0X200F FFFF 1M A的范围 // AliasAddr = 0x2200 0000 + ((A-0X2000 0...
  • dxuehui
  • dxuehui
  • 2016年10月31日 23:47
  • 372

STM32 学习四 位绑定

一、概念 把对寄存器某一位的操作,映射到某个内存地址(只有最低位有效)。 好处: 代码效率更高,速度更快,更改的时候不需要多读一次寄存器。 可以用作位绑定的内存区域: 片内内存区域、SRAM区 :0x...
  • xundh
  • xundh
  • 2015年01月09日 23:33
  • 3060

android之MTP框架和流程分析

Android之 MTP框架和流程分析   概要 本文的目的是介绍Android系统中MTP的一些相关知识。主要的内容包括: 第1部分 MTP简介             对Mtp协议进...
  • luckywang1103
  • luckywang1103
  • 2014年08月01日 17:31
  • 7984

dicom图像中冠状位,矢状位和横断位的计算

{//*~get info from file~*// // (0028,0030) 像素间距 float[] pixel_space = new float[2]; string[] pix...
  • u012466316
  • u012466316
  • 2014年07月25日 15:06
  • 1534

STM32F10x GPIO配置 之 位绑定

/************************************************************************************************** ...
  • dragon12345666
  • dragon12345666
  • 2014年04月14日 17:10
  • 2209

STM32位带应用

作者:saodeisinei 转自:http://blog.chinaunix.net/uid-26435987-id-3262641.html Cortex-M3 支持了位操作后,可以使用普通的...
  • whw8007
  • whw8007
  • 2013年04月26日 09:28
  • 504

stm32 以太网 LWIP TFTP IAP 远程升级

一.综述 本文是基于STM32F107的LWIP协议栈通过TFTP的文件传输协议进行IAP程序升级。本例采用的PHY层芯片是DP83848,相当于物理层,STM32F107自带的MAC层相当于数据链...
  • u012246376
  • u012246376
  • 2016年11月19日 10:27
  • 4764
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:stm32位绑定
举报原因:
原因补充:

(最多只允许输入30个字)