I/O端口位的基本结构
底层寄存器编程实现跑马灯
查看板卡对应端口
每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。每个寄存器的不同位对应不同端口,例如:下面对GPIOE14、GPIOE12、GPIOE10的模式进行设置
(1)对应查手册
(2)可以得出:
GPIOE_MODER|=0x11110000; //引脚工作模式为输出
GPIOE_OTYPER|=0x00000000; //引脚输出模式推挽
GPIOE_OSPEEDER|=0x22220000; //引脚工作时钟速度
GPIOE_PUPDR|=0x11110000; //上拉模式
寄存器编码汇总如下
define 部分映射地址,查看表格
完整代码如下:
typedef unsigned int uint32_t;
typedef unsigned int uint16_t;
typedef uint16_t u16;
typedef uint16_t vu16;
void Delay(vu16 count);
/********************总线定************************/
#define APB2PERIPH_BASE (0x40010000)
#define AHB1PERIPH_BASE (0x40020000)
/********************RCC定义************************/
#define GPIOE_MODER (*(uint32_t *)0x40021000)
#define GPIOE_OTYPER (*(uint32_t *)0x40021004)
#define GPIOE_OSPEEDER (*(uint32_t *)0x40021008)
#define GPIOE_PUPDR (*(uint32_t *)0x4002100c)
#define GPIOE_BSRR (*(uint32_t *)0x40021018)
#define RCC_AHB1ENR (*(uint32_t *)0x40023830)
void