pcb板点灯实验


.text 
.global _start
_start: 
	/**********LED1点灯PE10**************/
@ LED1初始化函数
LED1_INIT:
	@ 1、通过RCC_AHB4_ENSETR寄存器,设置GPIOE组控制器使能 0x50000A28[4]=1
	ldr r0,=0x50000A28
	ldr r1,[r0] @将r0寄存器地址中的值,读到r1寄存器中
	orr r1,r1,#(0x1<<4)
	@将r1寄存器中的第四位 置1
	str r1,[r0]
	@将r1寄存器地址中的值,写到r0寄存器中

	@ 2、通过GPIOE_MODER寄存器,设置PE10引脚为输出模式 0x50006000[21:20]=01
	ldr r0,=0x50006000
	ldr r1,[r0]
	and r1,r1,#(~(0x3<<20))
	@将r1第21位置0
	@为啥这个不行and r1,r1,#((0x1<<21))
	orr r1,r1,#(0x1<<20)
	@将r1第20位置1
	str r1,[r0]
	@将r1寄存器地址中的值写到r0寄存器中
	@ 3、通过GPIOE_OTYPER寄存器,设置PE10引脚为推挽输出模式 0x50006004[10]=0
	ldr r0,=0x50006004
	ldr r1,[r0]
	and r1,r1,#(~(0x1<<10))
	str r1,[r0]
	@ 4、通过GPIOE_OSPEEDR寄存器,设置PE10引脚为低速输出 0x50006008[21:20]=00
	ldr r0,=0x50006008
	ldr r1,[r0]
	and r1,r1,#(~(0x3<<20))
	str r1,[r0]
	@ 5、通过GPIOE_PUPDR寄存器,设置PE10引脚禁止上下拉电阻 0x5000600C[21:20]=00
	ldr r0,=0x5000600C
	ldr r1,[r0]
	and r1,r1,#(~(0x3<<20))
	str r1,[r0]

loop:
	bl LED1_ON
	bl delay_1s
	bl LED1_OFF
	bl delay_1s
	b loop


@ LED1点亮函数
LED1_ON:
	@通过GPIOE_ODR寄存器设置PE10引脚输出高电平 0x50006014[10]=1
	ldr r0,=0x50006014
	ldr r1,[r0]
	orr r1,r1,#(0x1<<10)
	str r1,[r0]
	mov pc,lr

@ LED1熄灭函数
LED1_OFF:
	@通过GPIOE_ODR寄存器设置PE10引脚输出低电平 0x50006014[10]=0
	ldr r0,=0x50006014
	ldr r1,[r0]
	and r1,r1,#(~(0x1<<10))
	str r1,[r0]
	mov pc,lr


@ 大概1s的延时函数
delay_1s:
	mov r3, #0x10000000
	mm:
	cmp r3, #0
	subne r3, r3, #1
	bne mm
	mov pc, lr

.end

实验结果:

pcb板点灯实验_第1张图片

 

你可能感兴趣的:(单片机,stm32,嵌入式硬件)