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);
	}
}
相关推荐
sinat_360704824 小时前
STM32 看门狗
stm32·单片机·嵌入式硬件
亿道电子Emdoor4 小时前
【ARM】MDK如何生成指定大小的bin文件,并指定空区域的填充数据
arm开发·stm32·单片机
mftang4 小时前
STM32 CAN过滤器配置和应用方法介绍
stm32·单片机·嵌入式硬件
楼台的春风6 小时前
【详细讲解在STM32的UART通信中使用DMA机制】
stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式·信息与通信
Chambor_mak6 小时前
stm32单片机个人学习笔记16(SPI通信协议)
stm32·单片机·学习
电子科技圈7 小时前
在低功耗MCU上实现人工智能和机器学习
人工智能·经验分享·科技·嵌入式硬件·mcu·物联网·机器学习
小白今天也很酷7 小时前
Python与MCU通信:串口数据采集及CSV/Excel存储方法
python·单片机·excel
海的预约8 小时前
51单片机-按键
单片机·嵌入式硬件·51单片机
【云轩】12 小时前
基于STM32与IFX007T的电机驱动全解析(无人机/机器人实战)
stm32·机器人·无人机
蓑衣客VS索尼克12 小时前
什么是逻辑分析仪?
arm开发·人工智能·fpga开发