STM32的BLX R0

本文记录了作者在调试STM32过程中遇到的问题,由于设置过多的断点导致程序卡住。通过减少断点数量,成功解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在调试STM32的时候BLX     R0

      Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR     R0, =SystemInit
                BLX     R0               
                LDR     R0, =__main
                BX      R0
                ENDP

一直都在卡着,还以为是单片机出了问题,原来是打的断点太多了。2017.10.30

STM32F407微控制器是一种基于ARM Cortex-M4内核的32位MCU,常用于嵌入式系统。要使用汇编语言编写一个简单的流水灯程序,首先你需要了解STM32系列的GPIO配置、定时器控制以及中断处理。以下是一个基本步骤的概述: 1. **设置GPIO**: - 使用`RCC_APB2PeriphClockCmd()`函数开启GPIOA的时钟。 - 设置GPIO口模式为推挽输出(`GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP`)。 ```assembly ; 假设GPIOA.0-7是LED LDR R1, =RCC_AHB1Periph_GPIOA ; RCC_APB2PeriphGPIOA地址 LDR R2, =RCC_AHB1PeriphClockCmd ; RCC_AHB1PeriphClockCmd函数地址 MOV.W R0, #GPIO_Pin_0+...+7 ; 需要接通的LED对应的GPIO Pin位 BLX R2 ; 开启时钟 ``` 2. **定时器设置**: - 初始化定时器,通常选择TIM2作为占空比定时器,用来改变LED的闪烁速度。 ```assembly LDR R1, =TIM2 ; TIM2定时器基地址 ; ... 初始化TIM2计数器、触发器、分频器等 ``` 3. **主循环和灯闪烁**: - 使用定时器的中断服务函数,每到设定的时间点改变一个LED的状态。 - 当某个LED亮起时,通过改变相应GPIO口的值实现点亮和熄灭。 ```assembly .LOOP: LDR R0, =GPIO_Pin_0+...+7 ; 随机选取一个LED CMP R0, #0x07 ; 如果未达到最大值,继续 BEQ .END_LOOP ; 否则跳出循环 ; 按照当前时间调整GPIO状态 BL SetLED ; 调用设置LED函数 .END_LOOP: WFE ; 等待下一个定时器中断 B .LOOP ; 继续主循环 ``` 注意:以上代码简化了实际应用中的细节,真正的汇编代码需要结合具体的寄存器操作和指令集,并且需要包含中断向量表设置、中断处理和服务函数的具体实现。如果你对汇编不太熟悉,建议使用C语言或者其他高级语言配合STM32CubeMX这样的工具生成驱动。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值