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);
}
}
网友评论