管脚配置
但在AG32 里,信号线和管脚是彻底分离的,可以把任意信号线绑定到任意引脚(除部分管脚 基础类:电源、时钟、地、RESET、BOOT0、ADC(DAC/CMP)、USB)。下面是信号线和管脚的介绍:
- 信号线:指MCU 里能操作的信号线,比如gpio1_1/uart0_tx/spi_cs 等等;
- 管脚:芯片裸露在外边的引脚(32PIN 的有32 个管脚,64PIN 的有64 个管脚…)
详细的管脚的定义,可以参考文档《AG32_pinout_100_64_48_32_2K.xlsx》,其中带IO的均为可配置的管脚。
在AG32中,管脚在ve文件中配置,格式为信号线<->管脚
,每个管脚的配置单独一行。如:
- 配置GPIO0_1 为PIN2,则定义:GPIO0_1 PIN_2
- 配置UART1_TX 为PIN3,则定义:UART1_UARTTXD PIN_3
- 配置SPI0 的clk 为PIN4,则定义:SPI0_SCK PIN_4
- 配置CAN0 的TX 为PIN5,则定义:CAN0_TX0 PIN_5
GPIO使用
GPIO简介
AG32中可用GPIO共80个,分为10组,每组8个。
其中各组分别为:GPIO0、GPIO1、GPIO2、…
组内各IO可表示为:GPIO_BIT0、GPIO_BIT1、GPIO_BIT2、…
使用时,用【组ID+组内id】来标识唯一的IO。
GPIO配置
管脚映射
在ve文件中对管脚映射进行配置,这里将GPIO4_1GPIO4_4分别映射到PIN_34PIN_31上,这四个管脚分别对应四个LED。
GPIO4_1 PIN_34 # LED1
GPIO4_2 PIN_33 # LED2
GPIO4_3 PIN_32 # LED3
GPIO4_4 PIN_31 # LED4
管脚配置
类似于STM32,首先定义相关的宏,这里的LED_GPIO_BITS
仅选择了LED4进行操作。
#define LED_GPIO GPIO4
#define LED_GPIO_MASK APB_MASK_GPIO4
#define LED_GPIO_BITS (1 << 4) // LED 4
GPIO初始化
接下来进行GPIO的初始化。首先开启相关的时钟并将LED设置为输出模型并默认设置高电平。
SYS_EnableAPBClock(LED_GPIO_MASK);
GPIO_SetOutput(LED_GPIO, LED_GPIO_BITS);
GPIO_SetHigh(LED_GPIO, LED_GPIO_BITS);
GPIO操作
示例代码如下,这里是对GPIO的电平进行了翻转操作,从而实现LED4闪烁的效果。
void TestGpio()
{
printf("Testing gpio\n");
int counter = 0;
while (1) {
UTIL_IdleUs(100e3);
GPIO_Toggle(LED_GPIO, LED_GPIO_BITS);
}
}
其它还有其它相关函数,具体可以参考SDK中的相关代码:
- GPIO_SetOutput/GPIO_SetInput —设置IO 为输入输出
- GPIO_SetHigh/GPIO_SetLow —置高置低
- GPIO_Toggle —高低切换
- GPIO_IntConfig —配置中断触发方式
- GPIO_EnableInt/GPIO_DisableInt/GPIO_ClearInt —中断控制
- GPIO_AF_ENABLE/GPIO_AF_DISABLE —切换GPIO 模式(如果有复用)