12.12

MDK 直接操作寄存器

编程三步

1.配置时钟(所以外设使用前都需要使能相应时钟)

2.外设初始化(根据芯片手册)

3.编程

操作寄存器三步

1.通过芯片手册,找到要操作的外设寄存器。找到相应寄存器组的

基地址、偏移量、需操作位、以及要赋的值

2.宏定义 地址

#define GPIO_H 0x40021C00               //宏定义基地址

#define GPIO_H_MODE    *(unsigned int *)(GPIO_H+0x00)         //通过偏移量宏定义寄存器地址,操作宏名就可以操作寄存器。

3.寄存器赋值

赋值0:     宏名      &=~(1《操作位偏移量)

赋值1:     宏名      |=(1《操作位偏移量)

GPIO 寄存器操作

#define RCC_BASE 0x40023800

#define RCC_BASE_AHB1 *(unsigned int *)(0x40023800+0x30)

#define GPIO_H 0x40021C00

#define GPIO_H_MODE *(unsigned int *)(GPIO_H+0x00)

#define GPIO_H_typ *(unsigned int *)(GPIO_H+0x04)

#define GPIO_H_speed *(unsigned int *)(GPIO_H+0x08)

#define GPIO_H_PUP  *(unsigned int *)(GPIO_H+0x0C)

#define GPIO_H_ODR  *(unsigned int *)(GPIO_H+0x14)

void  init(void)

{

RCC_BASE_AHB1 |=1<<7;

GPIO_H_MODE |=1<<20;

GPIO_H_typ =0x00;

GPIO_H_speed =0x00;

GPIO_H_PUP |=1<<20;

}

void delay( int n)

{ int i,j;

for (i=1;i<=10000;i++)

for (j=1;j<=n;j++)

{ }

}

void SystemInit(void)

{

}

int main(void)

{

int i;

init();

while (1)

{

GPIO_H_ODR =0x00;

delay(100);

GPIO_H_ODR =0xffffffff;

delay(100);

}

}

你可能感兴趣的:(12.12)