STM32F103系列点灯程序
点灯流程
1.找到LED灯对应寄存器引脚的基地址
1.1在原理图上找到LED灯的位置
1.2找到LED灯对应的引脚
LED1对应的引脚是PE5(也就是GPIO的端口E)
LED0对应的引脚是PB5(也就是GPIO的端口B)
1.3打开数据手册找到对应的基地址
可看到GPIO端口E的基地址为:0x4001 1800 - 0x4001 1BFF
可看到GPIO端口B的基地址为:0X4001 0C00 - 0x4001 0FFF
2.设置PE5、PB5寄存器模式为推挽输出模式
2.1配置PE5、PB5为推挽输出模式
我们配置的寄存器模式为推挽输出模式,输出模式的最大速度为50MHz。
代码实现:
上面得到了PE5的基地址为:0x40011800
偏移地址为:0x00
得GPIOE_CRL寄存器地址为:0x40011800
*(unsigned int *)0x40011800 &=~(0x0f<<20); //设置为推挽输出模式
*(unsigned int *)0x40011800 |=(0x3<<20); //输出模式的最大速度为50MHz
我们配置的寄存器模式为推挽输出模式,输出模式的最大速度为50MHz。
代码实现:
上面得到了PB5的基地址为:0X40010C00
偏移地址为:0x00
得GPIOE_CRL寄存器地址为:0X40010C00
*(unsigned int *)0X40010C00 &=~(0x0f<<20); //设置为推挽输出模式
*(unsigned int *)0X40010C00 |=(0x3<<20); //输出模式的最大速度为50MHz
2.2 配置PE5、PB5输出低电平实现LED灯亮
将GPIOx_ODR寄存器bit5位置0,
代码实现:
上面得到了PE5的基地址为:0x40011800
偏移地址为:0x0C
得GPIOE_ODR寄存器地址为:0x4001180C
配置PE5输出低电平
*(unsigned int *)0x4001180C &= ~(0x01 <<5);
配置PB5输出低电平
代码实现:
上面得到了PB5的基地址为:0X40010C00
偏移地址为:0x0C
得GPIOE_CRL寄存器地址为:0X40010C0C
*(unsigned int *)0x40010C00 &= ~(0x01 <<5);
3 打开GPIO端口E和B对应的时钟
其对应得时钟为APB2
3.1 找到时钟对应得基地址
其基地址为:0x40021000
3.2 打开GPIO对口B和端口E对应得时钟
代码实现:
复位和时钟控制器得基地址为:0x40021000、
偏移值为:0x18
得到APB2外设寄存器地址为:0x40021018
使能IO端口B和IO端口E:
*(unsigned int *)0x40021018 |=(1<<3); //使能IO端口B开启
*(unsigned int *)0x40021018 |=(1<<6); //使能IO端口E开启