CW32 通用输入输出端口

GPIO的意思是通用输入输出端口,可通过软件配置成输入或者输出端。即可以通过GPIO口输出高低电平或者通过GPIO口读入引脚状态是高电平还是低电平。大部分引脚除了当GPIO使用外,还可以复用为外设功能引脚。如UART外设与其他硬件进行数据交互。
CW32L083的每组GPIO都有20个寄存器,除了基础的配置寄存器、数据寄存器、位置位/清零寄存器、位清零寄存器、锁定寄存器、复用功能寄存器外,还配置了位翻转寄存器,中断数字滤波寄存器等,让操作更加快捷。同时提供完善的固件库函数,方便工程师快速开发测试,增强可移植性。
GPIO端口可配置成8种工作模式
4种输入模式
1.浮空输入
2.输入上拉
3.输入下拉
4.模拟输入
4种输出模式
1.开漏输出
2.推挽式输出
3.开漏复用功能
4.推挽式复用功能

初始化GPIO可使用void GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)函数,此函数在cw32l083_gpio.c中有详细的配置,其中的第一个参数GPIO_TypeDef是一个结构体类型,在cw32l083.h中有详细定义,包含着每组GPIO的20个寄存器。
第二个参数GPIO_InitTypeDef也是一个结构体,在cw32l083_gpio.h中可查看其定义。
下面举一个简单的例子配置一个IO口翻转,可实现闪灯实验。
例程中使用PC02和PC03引脚进行IO口翻转实验,官方CW32L083VCT6的评估板上这两个引脚外接LED灯,可以看到LED周期闪烁的效果。
其中CW_GPIOC,GPIO_PIN_0以及GPIO_MODE_OUTPUT_PP都是定义在头文件中的宏定义,如下面第一行为CW_GPIOC端口地址映射。
上面的例子是使用库函数配置的,也可以用寄存器操作,具体步骤如下。
下面以CW32L083为例通过配置GPIO引脚来驱动SPI2外设,查阅CW32L083的用户手册可以得知, SPI2可以通过PA00,PA01,PA02,PA03复用实现,这个就是上文提到的GPIO口的复用功能。
另外我们的GPIO支持外部中断,具体的配置如下,如果有不清楚的小伙伴可以查看下节CW32中断控制器,会有详细讲解。
上面的例程即可实现外部输入中断,PA01在接收到上升沿或者下降沿的信号的时候会进入到中断函数中去执行相关的程序,具体的例程可以参考官方CW32L083的gpio_int_filter例子。
下面介绍的是CW32L083的GPIO所相关的函数及其功能。
1.void GPIO_SWD2GPIO(void);
将PA13/PA14 SWD设置成GPIO
2.void GPIO_GPIO2SWD(void);
将PA13/PA14设置成SWD
3.void GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pins);
锁定指定引脚配置项,可同时设置多个引脚
4.void GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pins);
GPIO去初始化,可同时设置多个引脚或单个引脚
5.void GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
GPIO 初始化,可同时设置多个引脚或单个引脚
6.void GPIO_ConfigFilter(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pins, uint32_t FltClk);
配置端口滤波
7.void GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pins, GPIO_PinState PinState);
设置指定引脚电平,可同时设置多个引脚
8.void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t Value);
设置指定引脚端口的输出值
9.void GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pins);
翻转指定引脚电平,可同时设置多个引脚
10.GPIO_PinState GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
获取一个引脚的电平
以上是CW32通用输入输出端口的介绍。