学习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