本文介绍N32G030K8L7(以下简称N32)的GPIO的初始化及其使用。使用库编程初始化GPIO,需要将如下.c文件添加到工程中。(在工程的FWLIB文件夹中)
接着我们打开该文件 n32g030_gpio.c ,可以看下到它包含了 n32g030_gpio.h 这个头文件,通常,同名的C文件会将一些可供外部调用函数或者变量在其同名的头文件中进行声明。所以我们打开其头文件看看,不出意料的话,可供外部调用的GPIO初始化及GPIO输出输入控制的函数都会在此声明。
打开 n32g030_gpio.h,可以看到有很多可供外部调用的函数,而且根据其函数就可以把函数功能猜个大概。
我们需要使用GPIO,除了要先打开对应GPIO的时钟外,
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE); //使能对应GPIO的时钟
首当其冲的自然是进行GPIO的配置了。所以我们需调用函数
GPIO_InitPeripheral(GPIO_Module* GPIOx, GPIO_InitType* GPIO_InitStruct);
我们可以跳转过去看看该函数是如何使用的。
可以看到,第一个参数是GPIO的端口,可以选择GPIOA,GPIOB,GPIOC,GPIOD,GPIOF,但是实际上并不是所有芯片上都有这五个端口,需要根据自己手上的芯片及使用情况进行选择;第二个参数为GPIO的参数配置结构体(GPIO_InitType),我们跳转过去看看:
该结构体包括了,引脚号,引脚模式,是否上拉,引脚电平反转速度,引脚驱动能力和复用功能的配置。
看一下引脚驱动能力的配置,该参数配置的是寄存器GPIOx_DS,具体的参数选择则根据工程的需要进行相应的配置。
下面作者给出一段简单的GPIO的初始化模块:
void GPIO_INIT(void)
{
//定义GPIO初始化结构体变量,用于初始化函数的传入参数
GPIO_InitType GPIO_InitStructure;
//使能GPIOA的时钟
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
//将默认参数值写入GPIO初始化结构体中
GPIO_InitStruct(&GPIO_InitStructure);
//根据工程需要进行GPIO初始化结构体的配置
GPIO_InitStructure.Pin = GPIO_PIN_3|GPIO_PIN_4;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUTPUT_PP;
//调用初始化函数进行初始化
GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
}
GPIO的初始化完成后就可以使用GPIO了。可以进行GPIO的电平控制,读取端口电平之类的操作。具体的接口函数可以在n32g030_gpio.h 中查询。比如
GPIO端口置1函数:void GPIO_SetBits(GPIO_Module* GPIOx, uint16_t Pin);
GPIO端口清零函数:void GPIO_ResetBits(GPIO_Module* GPIOx, uint16_t Pin);
GPIO端口电平翻转函数:void GPIO_TogglePin(GPIO_Module* GPIOx, uint16_t Pin);
GPIO端口电平获取函数:uint8_t GPIO_ReadInputDataBit(GPIO_Module* GPIOx, uint16_t Pin);
函数有很多,可以根据工程需求进行调用。更多函数在n32g030_gpio.c,n32g030_gpio.h。
GPIO的初始化非常简单,本文就介绍到此了。
GPIO会用,点灯点灯,马上开始点灯!
#include "n32g030.h"
//LED接在PC13
void Delay(uint32_t count)
{
for (; count > 0; count--)
;
}
void GPIO_INIT(void)
{
//定义GPIO初始化结构体变量,用于初始化函数的传入参数
GPIO_InitType GPIO_InitStructure;
//使能GPIOC的时钟
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOC, ENABLE);
//将默认参数值写入GPIO初始化结构体中
GPIO_InitStruct(&GPIO_InitStructure);
//根据工程需要进行GPIO初始化结构体的配置
GPIO_InitStructure.Pin = GPIO_PIN_13;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUTPUT_PP;
//调用初始化函数进行初始化
GPIO_InitPeripheral(GPIOC, &GPIO_InitStructure);
}
int main(void)
{
GPIO_INIT();
while(1)
{
GPIO_SetBits(GPIOC,GPIO_PIN_13);
Delay(0x28FFFF);
GPIO_ResetBits(GPIOC,GPIO_PIN_13);
Delay(0x28FFFF);
}
}
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_50935794/article/details/132345282
|