ARM体系结构和接口技术(五)封装RCC和GPIO库

一、RCC

(一)思路

1. 找到时钟基地址

在这里插入图片描述
找到RCC基地址
GPIOA~K均属于AHB4总线,
UART7~8,UART4~5,属于APB1总线
在这里插入图片描述

2. 找到总线的地址偏移

(1)AHB4总线

偏移地址为0xA28,因此AHB4设置寄存器地址为0x50000A28
在这里插入图片描述

#define RCC_MAP_AHB4ENSETR (*((volatile unsigned int *)0x50000A28));
(2)定义不同GPIO组的使能宏函数

在这里插入图片描述
写0没影响,写1使能时钟

#define __HAL_RCC_GPIOA_CLOCK_ENABLE() RCC_MAP_AHB4ENSETR=0x1<<0;
(3)APB1总线

偏移地址为0xA00,因此APB1总线设置时钟使能寄存器地址为0x50000A00
在这里插入图片描述

(4)定义使能宏函数

在这里插入图片描述

#define __HAL_RCC_UART4_CLOCK_ENABLE() RCC_MAP_APB1ENSETR=0x1<<16;

二、GPIO

(一)定义gpio_t类型结构体

用于设置GPIOx口的特殊功能寄存器的偏移地址是一块连续的空间,且各个寄存器大小均为四个字节,因此可以将其定义为一个结构体。

1. GPIOx_MODER寄存器

在这里插入图片描述

2. GPIOx_OTYPER寄存器

在这里插入图片描述

3. GPIOx_OSPEEDR寄存器

在这里插入图片描述

4. GPIOx_PUPDR寄存器

在这里插入图片描述

5. GPIOx_IDR寄存器

在这里插入图片描述

6. GPIOx_ODR寄存器

在这里插入图片描述

7. GPIOx_BSRR寄存器

在这里插入图片描述

//注意,顺序不能颠倒
typedef struct
{
    unsigned int moder;
    unsigned int typer;
    unsigned int speedr;
    unsigned int pupdr;
    unsigned int idr;
    unsigned int odr;
    unsigned int bsrr;
}gpio_t;
  • 注:结构体尽量传地址,因为指针只占4个字节,但是结构体很大的话,传结构体需要占用较大空间

(二)找到 GPIOx 的特殊功能控制寄存器的基地址

在这里插入图片描述

//其他GPIO组的定义类似
#define GPIOA ((gpio_t *)0x50002000)

(三)定义引脚

使用一个16bit的数据,每一位代表一个引脚

//GPIO引脚的定义
#define PIN_0 0x0001
#define PIN_1 0x0002
#define PIN_2 0x0004
#define PIN_3 0x0008
#define PIN_4 0x0010
#define PIN_5 0x0020
#define PIN_6 0x0040
#define PIN_7 0x0080
#define PIN_8 0x0100
#define PIN_9 0x0200
#define PIN_10 0x0400
#define PIN_11 0x0800
#define PIN_12 0x1000
#define PIN_13 0x2000
#define PIN_14 0x4000
#define PIN_15 0x8000

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 14:18:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 14:18:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 14:18:02       58 阅读
  4. Python语言-面向对象

    2024-07-19 14:18:02       69 阅读

热门阅读

  1. 70、Flink 的 DataStream Connector 之 JDBC 连接器详解

    2024-07-19 14:18:02       20 阅读
  2. MySQL简介

    2024-07-19 14:18:02       20 阅读
  3. iOS 左滑返回事件的控制

    2024-07-19 14:18:02       18 阅读
  4. 八段锦1.1.9-冥想1.2.9

    2024-07-19 14:18:02       22 阅读
  5. 邦芒贴士:和领导相处必须牢记的五个教训

    2024-07-19 14:18:02       19 阅读
  6. Binary Search

    2024-07-19 14:18:02       19 阅读
  7. C 语言实例 - 矩阵转换

    2024-07-19 14:18:02       21 阅读
  8. 升级TrinityCore 服务器硬件

    2024-07-19 14:18:02       20 阅读