目錄
GPIO功能概述
CH32V2x 微控制器的GPIO 口可以配置成多種輸入或輸出模式,內置可關閉的上拉或下拉電阻,可以配置成推挽或開漏功能。GPIO 口還可以復用成其他功能。端口的每個引腳都可以配置成以下的多種模式之一:
1 浮空輸入 2 上拉輸入 3 下拉輸入 4 模擬輸入 5 開漏輸出 6 推挽輸出 7 復用功能的輸入和輸出
內部結構圖如下:
可以看出,IO 口內部可分為輸入驅動模塊1和輸出驅動模塊2。其中輸入驅動有弱上下拉電阻可選,可連接到 AD 等模擬輸入的外設;如果輸入到數字外設,就需要經過一個 TTL 施密特觸發器,再連接到 GPIO 輸入寄存器或其他復用外設。而輸出驅動有一對 MOS 管,可通過配置上下的 MOS 管是否使能來將 IO 口配置成開漏或推挽輸出;輸出驅動內部也可以配置成由 GPIO 控制輸出還是由復用的其他外設控制輸出。
GPIO寄存器
為了實現上述對端口的靈活配置,處理器設置了一系列寄存器來實現上述功能:
(1)配置輸入相關的寄存器
端口輸入寄存器(GPIOx_INDR)
GPIO 配置寄存器低位(GPIOx_CFGLR)
GPIO 配置寄存器高位(GPIOx_CFGHR)
(2)配置輸出相關的寄存器
端口輸出寄存器(GPIOx_OUTDR)
GPIO 配置寄存器低位(GPIOx_CFGLR)
GPIO 配置寄存器高位(GPIOx_CFGHR)
(3)復位和鎖定寄存器
端口復位寄存器(GPIOx_BCR)
配置鎖定寄存器(GPIOx_LCKR)
(4)AFIO 寄存器
事件控制寄存器(AFIO_ECR)
重映射寄存器 (AFIO_PCFR1) 和(AFIO_PCFR2)
外部中斷配置寄存器 (AFIO_EXTICR1、AFIO_EXTICR2、AFIO_EXTICR3、AFIO_EXTICR4)
GPIO實現LED閃爍燈
以PA0接LED燈為例,實現LED燈的間隔500ms閃爍功能,代碼實現如下:
LED所在GPIO端口的初始化:
void GPIO_Toggle_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
Main功能實現
int main(void)
{
u8 i = 0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
printf("GPIO Toggle TEST\r\n");
GPIO_Toggle_INIT();
while(1)
{Delay_Ms(500);GPIO_WriteBit(GPIOA, GPIO_Pin_0, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));
}
}