【ARM】Day4 点亮LED灯

1. 思维导图

2. 自己编写代码实现三盏灯点亮

复制代码
.text 
.global _start
_start: 
	/**********LED1,LED2,LED3点灯:PE10,PF10,PE8**************/
RCC_INIT:
	@使能GPIOE组/GPIOF组控制器,通过RXCC_MP_AHB4ENSETR设置第[5:4]位写1,地址:0x50000A28[5:4]=1
	ldr r0,=0x50000A28  	@通过RCC使能GPIO E组 F组
	ldr r1,[r0]
	orr r1,r1,#(0x1<<4) 	@ E组
	orr r1,r1,#(0x1<<5) 	@ F组
	str r1,[r0]


LED1_INTI:
	@设置PE10引脚为输出模式,通过GPIOE_MODER寄存器设置第[21:20]位写01, 地址:0x50006000[21:20]=01
	ldr r0,=0x50006000    	@设置GPIO为输出模式0x50006000[21:20] = 01
	ldr r1,[r0]
	orr r1,r1,#(1<<20)  @置1
	bic r1,r1,#(1<<21) 	@清0
	str r1,[r0]

	@设置PE10引脚为推挽输出类型,通过GPIOE_OTYPER寄存器设置第[10]位写0, 地址:0x50006000[10]=0
	ldr r0,=0x50006004 		@推挽输出 0x50006004[10] = 0
	ldr r1,[r0]
	bic r1,r1,#(1<<10)
	str r1,[r0]
	
	@设置PE10引脚为低速输出,通过GPIOE_OSPEEDE寄存器设置第[21:20]位写00, 地址:0x50006000[21:20]=00
	ldr r0,=0x50006008 		@设置输出速率 0x50006008[21:20] = 00
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	str r1,[r0]
	
	@设置PE10引脚为禁止上下拉电阻,通过GPIOE_PUPDR寄存器设置第[21:20]位写00, 地址:0x50006000[21:20]=00
	ldr r0,=0x5000600c 		@设置输出禁止上拉和下拉 0x5000600c[21:20] = 00
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	str r1,[r0]

LED2_INTI:
	@设置PF10引脚为输出模式,通过GPIOF_MODER寄存器设置第[21:20]位写01, 地址:0x50007000[21:20]=01
	ldr r0,=0x50007000    	@设置GPIO为输出模式0x50007000[21:20] = 01
	ldr r1,[r0]
	orr r1,r1,#(1<<20) 
	bic r1,r1,#(1<<21) 
	str r1,[r0]

	@设置PF10引脚为推挽输出类型,通过GPIOF_OTYPER寄存器设置第[10]位写0, 地址:0x50007000[10]=0
	ldr r0,=0x50007004 		@推挽输出 0x50007004[10] = 0
	ldr r1,[r0]
	bic r1,r1,#(1<<10)
	str r1,[r0]

	@设置PF10引脚为低速输出,通过GPIOF_OSPEEDE寄存器设置第[21:20]位写00, 地址:0x50007000[21:20]=00
	ldr r0,=0x50007008 		@设置输出速率 0x50007008[21:20] = 00
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	str r1,[r0]

	@设置PF10引脚为禁止上下拉电阻,通过GPIOF_PUPDR寄存器设置第[21:20]位写00, 地址:0x50007000[21:20]=00
	ldr r0,=0x5000700c 		@设置输出禁止上拉和下拉 0x5000700c[21:20] = 00
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	str r1,[r0]

LED3_INTI:
	@设置PE8引脚为输出模式,通过GPIOE_MODER寄存器设置第[17:16]位写01, 地址:0x50006000[17:16]=01
	ldr r0,=0x50006000    	@设置GPIO为输出模式0x50006000[17:16] = 01
	ldr r1,[r0]
	orr r1,r1,#(1<<16) 
	bic r1,r1,#(1<<17) 
	str r1,[r0]

	@设置PE8引脚为推挽输出类型,通过GPIOE_OTYPER寄存器设置第[8]位写0, 地址:0x50006000[8]=0
	ldr r0,=0x50006004 		@推挽输出 0x50006004[8] = 0
	ldr r1,[r0]
	bic r1,r1,#(1<<8)
	str r1,[r0]

	@设置PE8引脚为低速输出,通过GPIOE_OSPEEDE寄存器设置第[17:16]位写00, 地址:0x50006000[17:16]=00
	ldr r0,=0x50006008 		@设置输出速率 0x50006008[17:16] = 00
	ldr r1,[r0]
	bic r1,r1,#(0x3<<16)
	str r1,[r0]

	@设置PE8引脚为禁止上下拉电阻,通过GPIOE_PUPDR寄存器设置第[17:16]位写00, 地址:0x50006000[17:16]=00
	ldr r0,=0x5000600c 		@设置输出禁止上拉和下拉 0x5000600c[17:16] = 00
	ldr r1,[r0]
	bic r1,r1,#(0x3<<16)
	str r1,[r0]

loop:
	bl LED1_ON
	bl LED2_ON
	bl LED3_ON
	bl delay_1s
	bl LED1_OFF
	bl LED2_OFF
	bl LED3_OFF
	bl delay_1s
	b loop



LED1_ON:
	ldr r0,=0x50006014 		@设置输出高电平 0x50006014[10] = 1
	ldr r1,[r0]
	orr r1,r1,#(1<<10)
	str r1,[r0]
	mov pc,lr

LED1_OFF:
	ldr r0,=0x50006014 		@设置输出低电平 0x50006014[10] = 0
	ldr r1,[r0]
	bic r1,r1,#(1<<10)
	str r1,[r0]
	mov pc,lr


LED2_ON:
	ldr r0,=0x50007014 		@设置输出高电平 0x50007014[10] = 1
	ldr r1,[r0]
	orr r1,r1,#(1<<10)
	str r1,[r0]
	mov pc,lr

LED2_OFF:
	ldr r0,=0x50007014 		@设置输出低电平 0x50007014[10] = 0
	ldr r1,[r0]
	bic r1,r1,#(1<<10)
	str r1,[r0]
	mov pc,lr

LED3_ON:
	ldr r0,=0x50006014 		@设置输出高电平 0x50006014[8] = 1
	ldr r1,[r0]
	orr r1,r1,#(1<<8)
	str r1,[r0]
	mov pc,lr


LED3_OFF:
	ldr r0,=0x50006014 		@设置输出低电平 0x50006014[8] = 0
	ldr r1,[r0]
	bic r1,r1,#(1<<8)
	str r1,[r0]
	mov pc,lr


@ 大概1s的延时函数
delay_1s:
	mov r3, #0x10000000
	mm:
	cmp r3, #0 			@ r3和0比较
	subne r3, r3, #1 	@ 不相等,r3=r3-1
	bne mm 				@ 不相等,就跳转到mm
	mov pc, lr  		@ 恢复现场

.end

3. 点灯流程

相关推荐
沉在嵌入式的鱼5 分钟前
使用nomachine远程连接ARM设备桌面
arm开发·rk3588·远程连接·nomachine
森焱森1 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
白鱼不小白1 小时前
stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
stm32·单片机·嵌入式硬件
S,D2 小时前
MCU引脚的漏电流、灌电流、拉电流区别是什么
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·硬件工程
芯岭技术5 小时前
PY32F002A单片机 低成本控制器解决方案,提供多种封装
单片机·嵌入式硬件
youmdt5 小时前
Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
单片机·嵌入式硬件
嘿·嘘6 小时前
第七章 STM32内部FLASH读写
stm32·单片机·嵌入式硬件
Meraki.Zhang6 小时前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c
几个几个n8 小时前
STM32-第二节-GPIO输入(按键,传感器)
单片机·嵌入式硬件
慕尘12 小时前
Clion配置51单片机开发环境
单片机