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例程-流水灯+位绑定

  • 2015年12月25日 20:32
  • 3.14MB
  • 下载

STM32串口绑定printf格式输出

  • 2015年04月05日 18:26
  • 92KB
  • 下载

STM32 学习四 位绑定

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

stm32 位绑定 优化设计

#include "stm32f10x.h" #define GPIOA_ODR_A GPIOA_BASE+0X0C #define GPIOA_IDR_A GPIOA_BASE+0X08 #d...
  • dxuehui
  • dxuehui
  • 2016年11月01日 22:09
  • 267

STM32学习二:理解位绑定

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

STM32F10x GPIO配置 之 位绑定

/************************************************************************************************** ...

STM32位带操作

参考: http://blog.chinaunix.net/uid-7655997-id-2600622.html Cortex-M3 支持了位操作后,可以使用普通的加载/存储指令来对单一的比特进行...

STM32位段和别名区基础知识

对STM32中位带的理解

stm32位带操作

最近学习IIC协议,试着自己写iic的STM32驱动程序,由于一直用的stm32库开发,写起驱动程序来并不容易,就看看别人的驱动程序是怎么写的,因此看到了正点原子采用位带操作,个人觉得比调用库函数方便...

stm32位操作函数(未完待续)

stm32位操作函数 昨天看到了普中科技的数码管操作函数,对stm32的位操作函数,自己也不太懂,就查了一下,现在整理学习笔记如下: 主要学习到了stm32操作函数的两个位操作函数,现在我们用寄存器和...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:stm32位绑定
举报原因:
原因补充:

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