1-3ARM_GD32点亮LED灯

简介:

最多可支持 112 个通用 I/O 引脚(GPIO),分别为 PA0 ~ PA15,PB0 ~ PB15,PC0 ~ PC15,PD0 ~ PD15,PE0 ~ PE15,PF0 ~ PF15 和 PG0 ~ PG15,各片上设备用其来实现逻辑输入/输出功能。每个 GPIO 端口有相关的控制和配置寄存器以满足特定应用的需求。外设 GPIO 引 脚上的外部中断在中断/事件控制器(EXIT)中有相关的控制和配置寄存器。 GPIO 端口和其他的备用功能(AFs)共用引脚,在特定的封装下获得最大的灵活性。GPIO 引脚 通过配置相关的寄存器可以用作备用功能输入/输出。每个 GPIO 引脚可以由软件配置为输出(推挽或开漏)、输入、外设备用功能或者模拟模式。每 个 GPIO 引脚都可以配置为上拉、下拉或浮空。除模拟模式外,所有的 GPIO 引脚都具备大电 流驱动能力。

原理图:

案例演示使用寄存器的方式点亮PA8引脚对应的led灯

GPIO寄存器的基地址如下所示:

  1. GPIOA 基地址:0x4001 0800
  2. GPIOB 基地址:0x4001 0C00
  3. GPIOC 基地址:0x4001 1000
  4. GPIOD 基地址:0x4001 1400
  5. GPIOE 基地址:0x4001 1800
  6. GPIOF 基地址:0x4001 1C00
  7. GPIOG 基地址:0x4001 2000
  8. AFIO 基地址:0x4001 0000

查看数据手册可知端口控制寄存器:偏移地址为0x40,PA8端口位于端口控制寄存器1的位置

模式为与配置位如下所示:

寄存器配置参考:

配置位:

模式位:

端口输出控制寄存器:

或运算:有真为真,全假为假
片上外设工作需要配置时钟源:通过寄存器打开时钟源

程序:

cpp 复制代码
#include <stdint.h>
// 基础地址,将16进制数转换为地址:基地址 + 偏移量
#define  GPIOA_CTL1 (*(uint32_t *)(0x40010800 + 0x04))
// 配置
#define  GPIOA_OCTL (*(uint32_t *)(0x40010800 + 0x0C))
// 外设总线控制,时钟使能控制寄存器
#define  RCU_APB2EN (*(uint32_t *)(0x40021000 + 0x18))

static void Delay(uint32_t count)
{
	while (count--);
}

int main(void)
{
	/*使能GPIO的时钟*/
	RCU_APB2EN |= 1 << 2;
	/*配置为推挽输出模式*/
	GPIOA_CTL1 = 0x44444442;
	/*配置为输出高电平*/

	while (1)
	{
		GPIOA_OCTL |= 1 << 8;  //00000000 00000000 00000001 00000000	
		Delay(1000000);
		GPIOA_OCTL &= ~(1 << 8); //11111111 11111111 11111110 11111111
		Delay(1000000);
	}
}
相关推荐
万法若空1 天前
ARMv7-a协处理器及指令详解
arm开发
莎士比亚的文学花园1 天前
stm32——平衡小车
stm32·单片机·嵌入式硬件
Hello_Embed1 天前
STM32CubeIDE 创建第1个工程
stm32·单片机·嵌入式·ai编程
小麦嵌入式1 天前
FPGA入门(一):手把手教你用 Vivado 创建工程并仿真
stm32·单片机·嵌入式硬件·mcu·fpga开发·硬件架构·硬件工程
czwxkn1 天前
PCB设计-器件:2.电感
嵌入式硬件
佳木逢钺1 天前
从零开始:基于STM32H750的硬件设计与软件开发完整流程详解
stm32·单片机·嵌入式硬件
Deitymoon1 天前
ESP8266——透传
单片机·网络协议·tcp/ip
zhangrelay1 天前
云课实践速通系列-基础篇汇总-必修-通识基础和专业基础-2026--工科--自动化、电气、机器人、测控等
linux·笔记·单片机·学习·ubuntu·机器人·自动化
Deitymoon1 天前
ESP8266——UDP传输
单片机·网络协议·udp
踏着七彩祥云的小丑1 天前
嵌入式——认识电子元器件——光电器件系列
单片机·嵌入式硬件