led灯打开后不停闪烁 led灯频闪

2025-01-1009:45:41常识分享0

在系统重置时,向量表被映地址0。

该区域被设定为重置、数据、只读。

定义数据寄存器,其值为20003000,代表栈顶。

同时定义了重置处理器。

下面是代码段。

重置处理器相关代码

导出重置处理器标记 [WEAK]。

将寄存器RCC_APB2ENR的地址加载到R1寄存器。

从R1寄存器读取值到R0。

设置GPIOE时钟使能位的值到R2,该位值为0x00000040。

将R2的值与R0进行逻辑或运算,结果存回R0。

将更新后的R0值存回R1寄存器。

配置PE5引脚为推挽输出模式。

加载GPIOE_CRL寄存器的地址到R1,该地址与GPIOE基地址相同,用于配置PE0至PE7引脚。

从R1读取值到R0。

清除PE5对应的配置位(位于20至23位)。

设置PE5为推挽输出模式(速度50MHz)对应的配置位。

将更新后的R0值存回R1寄存器。

进入主循环。

设置PE5引脚输出高电平。

加载GPIOE_ODR寄存器的地址到R1,该寄存器用于设置GPIOE端口的输出电平。

设置R2寄存器为PE5引脚对应的高电平值(通过位操作)。

将R2的值存入GPIOE_ODR寄存器。

调用延时函数,保持高电平一段时间。

接下来,设置PE5引脚输出低电平。

再次加载GPIOE_ODR寄存器的地址到R1。

将R2寄存器清零,表示低电平。

将清零后的R2值存入GPIOE_ODR寄存器。

再次调用延时函数,保持低电平一段时间。

循环回到主循环,实现闪烁效果。

延时函数实现如下。

设定外层循环次数和内层循环次数均为1000,可调整这些值来改变延时长短。

外层循环开始标记。

每次进入外层循环时,重置内层循环次数。

内层循环开始,每次循环减少计数器R6的值,直到R6为0。

如果R6不为0,则继续内层循环。

外层循环继续,每次减少计数器R5的值,直到R5为0。

如果R5不为0,则继续外层循环和内层循环的循环过程。

最终返回程序点LR,并执行无操作指令NOP。

程序结束标记。