ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。
STR -(Store Register)存储指令
格式:
str{条件} 源寄存器,<存储器地址>
将源寄存器中数据存到存储器地址中。
实例1:
str r1,[r2] ; 将r1中的值存到r2所指定的地址中
str r1,[r2,#4] ;将r1中的值存到r2+4所指定的地址中
str r1,[r2],#4 ;将r1中的值存到r2所指定的地址中, 同时r2=r2+4
LDR -(Load Register)存储指令
格式:
LDR{条件} 目的寄存器,<存储器地址>
当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。
实例1:
LDR R0,[R1] ;将存储器地址为R1的字数据读入寄存器R0。
LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R0。
LDR R0,[R1,#8] ;将存储器地址为R1+8的字数据读入寄存器R0。
LDR R0,[R1,R2]! ;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1。
LDR R0,[R1,#8]! ;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1。
LDR R0,[R1],R2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2写入R1。
LDR R0,[R1,R2,LSL#2]! ;将存储器地址为R1+R2×4的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。
LDRR0,[R1],R2,LSL#2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。”
关键字:stm32 汇编 STR LDR
引用地址:
stm32_汇编(STR和LDR)
推荐阅读最新更新时间:2024-11-12 08:33
STM32学习—系统中断
中断配置步骤 设置优先级分组可调用库函数 NVIC_PriorityGroupConfig(),在 misc.c可以查看。 要使用中断我们就需要先配置它,通常都需经过这几步: (1)使能外设某个中断 (2)设置中断优先级分组,初始化 NVIC_InitTypeDef 结构体 typedef struct { uint8_t NVIC_IRQChannel; //中断源 uint8_t NVIC_IRQChannelPreemptionPriority; //抢占优先级 uint8_t NVIC_IRQChannelSubPriority; //响应优先级 FunctionalState N
[单片机]
一种基于STM32利用始终定时实现延迟的方法
传统上我们常用delay函数进行延迟,然而这种方式有一个很大的弊端那就是需要占用相当长的时钟周期,此时原本该用于计算各类复杂算法的计算内核都要随着系统一起停下来,很不经济也容易造成问题处理不及时的后果。 事实上,我们只需要利用时钟中断的方式,利用一个全局变量作为标志为即可具体程序如下: u8 time3_tmp = 0;//时钟标志 u8 fun_flag;//服务函数标志 void Timer3_Config(void)//配置 { TIM_TimeBaseInitTypeDef TIM_TimeBaseStruture; ////////重定义结构体 TIM_DeInit(TIM3);
[单片机]
STM32之EXTI
STM32因为具有NVIC使其中断体系大大提升,NVIC使用来管理异常与中断的,并且NVIC模块中还包含SysTick。 这次我们来讲一下EXTI外部中断。 1.在用到时我们必须要设置中断向量表,我们要将中断向量表存储在一个固定的位置,究竟是RAM还是FLASH就得看你的需求了。 2.STM32中中断优先级分组总共有四种分组方式,我们只能用其中的一组。所以在设置完毕中断向量表的存储位置后我们就得选择合适我们的中断优先级分组。(这一部分可以我的STM32之NVIC一文) 3.然后你要使用哪个外部中断就对此中断设置抢占优先级,亚优先级,以及打开。 4.然后就是相应中断的模式,方式,等配置了 5.设置相应的引脚为输入
[单片机]
STM32的ADC基本配置
(1)模/数转换工作于单通道还是多通道模式 (2)工作于单次还是连续模式。 (3)外部触发转换还是软件使能转换。 (4)数据对齐方式,右对齐还是左对齐。 (5)A/D转换的通道数目。 (6)设置A/D通道的转换顺序及采样时间。其中转换时间为 T.conv=采样时间+12.5个周期 (7)⑥使能DMA启动传输 ⑦使能ADC ⑧校准ADC,ADC的校准用到以下代码: /*重置ADC1的校准寄存器关/ ADC_ ResetCal ibration( ADC1); /*获取ADC重置校准寄存器的状态*/ while(ADC_ GetResetCal ibrat ionStatus(ADC1)); ADC_ StartCal ibr
[单片机]
STM32的几个注意事项
1、每组 VDD、VSS 管脚间并一个 100nF 电容,距离管脚越近越好;VDD3 需要加并一个 4.7 F 电容。 2、VDDA、VSSA 之间并一个 10nF 电容 加 1 F 电容;VREF 间使用同样方式。 3、在上电和正常操作期间,VDD和VDDA之间最多允许有300mV的差别(3.3V出两路,一路供 VDD,另外一路过基准供 VDDA,只要电压差小于 300mV 就可以);VREF+ 最小值 2.4V,最大值 VDDA 4、关于复位:当VDD/VDDA低于指定的限位电压VPOR/VPDR时,系统保持为复位状态,无需外部复位电路。NRST 脚内部弱上拉(30~50k ),和 VDD(不是VDDA) 相连。建议的引脚保
[单片机]
一种基于STM32和LabVIEW的无线温湿度检测系统的设计
引言 日常生活中,温度和湿度是两个很重要的物理参数,它不但与人们的身体健康密切联系,而且与科学研究、园林技术、仓库管理、机房管理等方面都息息相关。随着电子科技的发展,人们对环境温湿度监控的要求也越来越高。传统的温湿度检测技术都是采用有线传输装置,不但布线麻烦,而且消耗大量的人力物力,在实际应用中有很大的局限性。 本文设计了一种无线温湿度检测系统方案,其主控制器采用STM32,无线收发模块芯片选用nRF24L01P,传感器选用功耗低、响应快、稳定性强的数字温湿度传感器AM2303。 1、系统设计框图 图1系统发送端结构框图 该系统是一个“多对一”系统[2],即由若干个无线发送模块和一个无线接收模块组成。系统发送端组成框图
[单片机]
STM32 CRC32与对应的软件CRC32
简单实现STM32 CRC32使用 使用前记得使能STM32 CRC时钟 //STM32硬件CRC32 byte数据计算,将数据移到最高位,低位补上FF u32 stm32_crc32_byte(u8 *pBuff, u32 len) { u32 i; u8 buff ; u32 *p32 = (u32 *)buff; CRC- CR = 1; //复位CRC寄存器 buff = buff = buff = buff = 0XFF; for(i = 0;i len;i ++) { buff = pBuff ; CRC- DR
[单片机]
在Mac OSX中开发STM32程序
在Mac OSX下编写STM32程序: 1、下载stm32的gcc软件包,参考下面URL: 2、安装moxa NPORT 5110在虚拟Windows中; 3、安装ST Flash Loader 软件; 需要注意的: 1、Mac OSX 需要10.5; 2、NPORT装完要关机重启;
[单片机]