2022-04-29 17:10:33
浏览数 (1)
说明(一定要看完上一节)
1,BOOT按键连接了GPIO1, 咱就用这个引脚做测试
配置GPIO1为输入模式
代码语言:javascript
复制#include <stdio.h>
#include "app.h"
#include "bsp.h"
#include "bsp_custom.h"
#include "pad_ec616.h"
#include "gpio_ec616.h"
#define GPIO_PIN_NUMBER (1) //GPIO编号
#define GPIO_PORT (GPIO_PIN_NUMBER/16) //在哪个端口上(P0 / P1 / P2)
#define GPIO_PIN (GPIO_PIN_NUMBER) //在端口上的编号
#define GPIO_PAD_INDEX (12) //引脚对应的PAD地址, 这个看手册哈
#define GPIO_PAD_ALT_FUNC (PAD_MuxAlt0) //使用其第几功能
void gpio_init(void)
{
/*配置GPIO的功能*/
pad_config_t padConfig;
PAD_GetDefaultConfig(&padConfig);
padConfig.mux = GPIO_PAD_ALT_FUNC;//设置使用其第几功能
PAD_SetPinConfig(GPIO_PAD_INDEX, &padConfig);//配置PAD
PAD_SetPinPullConfig(GPIO_PAD_INDEX, PAD_InternalPullUp);//设置内部上下拉
/*配置GPIO的输入输出初始化*/
gpio_pin_config_t config;
config.pinDirection = GPIO_DirectionInput;//输入模式
GPIO_PinConfig(GPIO_PORT, GPIO_PIN, &config);//配置
}
uint32_t value=0;
void main_entry(void)
{
BSP_CommonInit();//官方底层初始化函数,默认写上就可以
BSP_CustomInit();//配置串口打印
gpio_init();
while (1)
{
value = value 1;
if (value>1000000)//延时一会,避免疯狂打印
{
value=0;
printf("leven=%drn",GPIO_PinRead(GPIO_PORT,GPIO_PIN));//打印引脚电平
}
}
}
配置GPIO1为中断模式(下降沿触发)
代码语言:javascript
复制#include <stdio.h>
#include "app.h"
#include "bsp.h"
#include "bsp_custom.h"
#include "pad_ec616.h"
#include "gpio_ec616.h"
#define GPIO_PIN_NUMBER (1) //GPIO编号
#define GPIO_PORT (GPIO_PIN_NUMBER/16) //在哪个端口上(P0 / P1 / P2)
#define GPIO_PIN (GPIO_PIN_NUMBER) //在端口上的编号
#define GPIO_PAD_INDEX (12) //引脚对应的PAD地址, 这个看手册哈
#define GPIO_PAD_ALT_FUNC (PAD_MuxAlt0) //使用其第几功能
void gpio_init_interrupt(void)
{
/*配置GPIO的功能*/
pad_config_t padConfig;
PAD_GetDefaultConfig(&padConfig);
padConfig.mux = GPIO_PAD_ALT_FUNC;//设置使用其第几功能
PAD_SetPinConfig(GPIO_PAD_INDEX, &padConfig);//配置PAD
PAD_SetPinPullConfig(GPIO_PAD_INDEX, PAD_InternalPullUp);//设置内部上下拉
/*配置GPIO的输入输出初始化*/
gpio_pin_config_t config;
config.pinDirection = GPIO_DirectionInput;//输入模式
config.misc.interruptConfig = GPIO_InterruptFallingEdge;//设置为下降沿中断
GPIO_PinConfig(GPIO_PORT, GPIO_PIN, &config);//配置
}
uint8_t gpio_interrupt_flag =0;
void gpio_interrupt_fun()
{
uint16_t portIrqMask = GPIO_SaveAndSetIRQMask(GPIO_PORT);//禁止端口中断防止中断溢出
if (GPIO_GetInterruptFlags(GPIO_PORT) & (1 << GPIO_PIN))//引脚产生中断
{
gpio_interrupt_flag=1;
GPIO_ClearInterruptFlags(GPIO_PORT, 1 << GPIO_PIN);//清除引脚中断标志
}
GPIO_RestoreIRQMask(GPIO_PORT, portIrqMask);//恢复端口中断
}
void main_entry(void)
{
BSP_CommonInit();//官方底层初始化函数,默认写上就可以
BSP_CustomInit();//配置串口打印
gpio_init_interrupt();
//使能GPIO中断(所有的引脚共用一个中断函数)
XIC_SetVector(PXIC_Gpio_IRQn, gpio_interrupt_fun);//配置GPIO中断函数
XIC_EnableIRQ(PXIC_Gpio_IRQn);//使能
while (1)
{
if (gpio_interrupt_flag==1)//检测到中断
{
gpio_interrupt_flag=0;
printf("gpio_interrupt_flagrn");
}
}
}
每次按下按键就会打印下
程序说明
1,初始引脚的时候设置为下降沿中断
2,设置GPIO中断函数, 检测到中断,打印