关闭

stm32位绑定

标签: stm32位绑定
113人阅读 评论(0) 收藏 举报
学习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    那我们为什么要用左移符号呢??原因在这:因为左移的处理速度要比乘的快很多、、我们尽量把乘除转化为加减和左右移写到这里


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1699次
    • 积分:66
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:7篇
    • 译文:0篇
    • 评论:0条