作业要求:
分别用汇编语言和C语言点亮三盏灯
一·、C语言方式:
头文件:
#ifndef __LED_H__
#define __LED_H__
//宏定义封装RCC组寄存器
#define RCC_AHB4_ENSETR (*(volatile unsigned int*)0x50000A28)
//结构体封装GPIO组寄存器
typedef struct
{
volatile unsigned int MODER;
volatile unsigned int OTYPER;
volatile unsigned int OSPEEDR;
volatile unsigned int PUPDR;
volatile unsigned int IDR;
volatile unsigned int ODR;
}gpoi_t;
#define GPIOE (*(gpoi_t*)0x50006000)
#define GPIOF (*(gpoi_t*)0x50007000)
//点亮LED1
void led1_init();
void led1_on();
void led1_off();
//点亮LED2
void led2_init();
void led2_on();
void led2_off();
//点亮LED3
void led3_init();
void led3_on();
void led3_off();
#endif
源文件:
#include "led.h"
//点亮LED1
void led1_init()
{
//1.通过RCC_AHB4_ENSETR:0x50000A28寄存器设置GPIOE控制器使能 0x50000A28[4] = 1
RCC_AHB4_ENSETR|=(0x1<<4);
//2.通过GPIOE_MODER:0x50006000寄存器设置PE10引脚为输出模式 0x50006000[21:20]= 01
GPIOE.MODER&=(~(0x3<<20));
GPIOE.MODER|=(0x1<<20);
//3.通过GPIOE_OTYPER:0x50006004寄存器设置PE10引脚为推挽输出模式 0x50006004[10]= 0
GPIOE.OTYPER&=(~(0x1<<10));
//4.通过GPIOE_OSPEEDR:0x50006008寄存器设置PE10引脚为低速输出0x50006008[21:20]=00
GPIOE.OSPEEDR&=(~(0x3<<20));
//5.通过GPIOE_PUPDR:0x5000600C寄存器设置PE10引脚为禁止上下拉0x5000600C[21:20]= 00
GPIOE.PUPDR