学习目标:
掌握应用寄存器完成stm32的GPIO操作
1.RCC使能enable
2 模式选择modle
3 方向 dir
4读写 r/w
对于F407来说:
其RCC时钟基地址:
IO端口使能的时钟偏移地址:
于是使能RCC的外设GPIOH,可以写为:
unsigned int *pReg;
/*使能GPIOH*/
pReg = (unsigned int * )(0x400023800 + 0x30);
*pReg |=(1<<7);
下面设置GPIOH的端口9:
GPIOH的存储器映射:
高低电平输出控制:
/*设置GPIOH9为输出引脚*/
pReg = (unsigned int * )(0x40021C00 + 0x00);
*pReg |=(1<<18);
pReg = (unsigned int * )(0x40021C00 + 0x14);//输出电平控制寄存器
接下来上完整的main
main.c
void delay (int d)
{
while (d--);
}
int main()
{
unsigned int *pReg;
/*使能GPIOH*/
pReg = (unsigned int *)(0x40023800 + 0x30);
*pReg |=(1<<7);
/*设置GPIOH9为输出引脚*/
pReg = (unsigned int * )(0x40021C00 + 0x00);
*pReg |=(1<<18);
pReg = (unsigned int * )(0x40021C00 + 0x14);//输出电平控制寄存器
while(1)
{
*pReg |= (1<<9);
delay(100000);
*pReg &= ~(1<<9);
delay(100000);
}
return 0;
}
自己添加启动文件start.s
PRESERVE8
THUMB
; Vector Table Mapped to Address 0 at Reset
AREA RESET, DATA, READONLY
__Vectors DCD 0
DCD Reset_Handler ; Reset Handler
AREA |.text|, CODE, READONLY
; Reset handler
Reset_Handler PROC
IMPORT main
LDR SP, =(0x20000000+0x20000)
BL main
ENDP
END
LDR SP, =(0x20000000+0x20000)来自于:
整体工程:
下载到我的407,小灯闪烁,就是如此舒服。