STM32F103系列点灯程序

it2025-11-19  23

STM32F103系列点灯程序

点灯流程1.找到LED灯对应寄存器引脚的基地址1.1在原理图上找到LED灯的位置1.2找到LED灯对应的引脚1.3打开数据手册找到对应的基地址 2.设置PE5、PB5寄存器模式为推挽输出模式2.1配置PE5、PB5为推挽输出模式2.2 配置PE5、PB5输出低电平实现LED灯亮 3 打开GPIO端口E和B对应的时钟3.1 找到时钟对应得基地址3.2 打开GPIO对口B和端口E对应得时钟 程序烧写结果现象程序代码烧写现象

点灯流程

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开启

程序烧写结果现象

程序代码

烧写

现象

最新回复(0)