在系统重置时,向量表被映地址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。
程序结束标记。