101-SLM130(NB-IOT)C-SDK(OpenCPU)学习开发-GPIO输入检测,中断
2022/4/25 23:15:21
本文主要是介绍101-SLM130(NB-IOT)C-SDK(OpenCPU)学习开发-GPIO输入检测,中断,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnEC616_SLM130" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
<iframe frameborder="0" height="1500" name="ifd" scrolling="auto" src="https://mnifdv.cn/resource/cnblogs/LearnEC616_SLM130" width="100%"></iframe>
说明(一定要看完上一节)
1,BOOT按键连接了GPIO1, 咱就用这个引脚做测试
配置GPIO1为输入模式
#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%16) //在端口上的编号 #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=%d\r\n",GPIO_PinRead(GPIO_PORT,GPIO_PIN));//打印引脚电平 } } }
配置GPIO1为中断模式(下降沿触发)
#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%16) //在端口上的编号 #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_flag\r\n"); } } }
每次按下按键就会打印下
程序说明
1,初始引脚的时候设置为下降沿中断
2,设置GPIO中断函数, 检测到中断,打印
这篇关于101-SLM130(NB-IOT)C-SDK(OpenCPU)学习开发-GPIO输入检测,中断的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享