250|3

377

帖子

0

TA的资源

一粒金砂(高级)

【全能小网关|CH32V208】--3.按键中断 [复制链接]

      本篇讲述按键IO外部中断。

 

一.按键原理与准备

      由下原理图知用户按键下降沿低电平触发,我们这里用PA0作为按键检测IO口,并在杜邦线连接排针PA0与KEY引脚。

1_按键原理.jpg
图1:按键原理

 

二.代码准备

1.初始化配置PA0外部中断,下降沿触发。

void EXTI0_INT_INIT(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    EXTI_InitTypeDef EXTI_InitStructure = {0};
    NVIC_InitTypeDef NVIC_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    /* GPIOA ----> EXTI_Line0 */
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
    EXTI_InitStructure.EXTI_Line = EXTI_Line0;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);

    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

2.中断函数。这里简单就打印下日志

/*********************************************************************
 * @fn      EXTI0_IRQHandler
 *
 * [url=home.php?mod=space&uid=159083]@brief[/url] This function handles EXTI0 Handler.
 *
 * [url=home.php?mod=space&uid=784970]@return[/url] none
 */
void EXTI0_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line0)!=RESET)
  {
    printf("Run at EXTI\r\n");
    EXTI_ClearITPendingBit(EXTI_Line0);     /* Clear Flag */
  }
}

3.主函数

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    SystemCoreClockUpdate();
    Delay_Init();
    USART_Printf_Init(115200);
    printf("Uart Initr\n");
    printf("SystemClk:%d\r\n", SystemCoreClock);
    printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
    printf("EXTI0 Test\r\n");
    EXTI0_INT_INIT();
    printf("INT Init\n");

    while(1)
    {
        Delay_Ms(1000);
        //printf("Run at main\r\n");
    }
}

 

三.测验

      编译烧录,上电运行,查看日志有初始化,当按下用户按键S2,可以看到触发IO中断。

2_按键中断串口日志,jpg.png
图2:按键中断日志

      至此,实现按键IO外部中断功能。

 

最新回复

这要看你printf重定向的是不是阻塞输出,如果是阻塞的,或者外设有问题了,那就影响整个程序了。   详情 回复 发表于 2024-6-12 14:25

回复
举报

6491

帖子

9

TA的资源

版主

中断回调中打印日志,会不会拖慢中断的响应呢?

点评

这个还好的,不放心在中断里可以把打印放在清标志之后。中断里不宜放阻塞比较久的应用程需,也可置标志main函数处理。  详情 回复 发表于 2024-6-12 09:16

回复

377

帖子

0

TA的资源

一粒金砂(高级)

lugl4313820 发表于 2024-6-10 18:58 中断回调中打印日志,会不会拖慢中断的响应呢?

这个还好的,不放心在中断里可以把打印放在清标志之后。中断里不宜放阻塞比较久的应用程需,也可置标志main函数处理。

点评

这要看你printf重定向的是不是阻塞输出,如果是阻塞的,或者外设有问题了,那就影响整个程序了。  详情 回复 发表于 2024-6-12 14:25

回复

6491

帖子

9

TA的资源

版主

dirty 发表于 2024-6-12 09:16 这个还好的,不放心在中断里可以把打印放在清标志之后。中断里不宜放阻塞比较久的应用程需,也可置标志ma ...

这要看你printf重定向的是不是阻塞输出,如果是阻塞的,或者外设有问题了,那就影响整个程序了。


回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

推荐帖子
第1/15原创:事无巨细,GCC AVR

事无巨细,GCC AVR入门详解 乘着Cepark电子园正在搞AVR单片机开发板优惠活动,花160块钱买了他们提供的散件。近日终于收到 ...

申领EE_FPGA V1.0板啦!(已结束)

FPGA板块一直酝酿的 DIY FPGA板子终于结果了,感谢chenzhufly的坚持不懈!54967chenzhufly愿为论坛网友贡献6块FPGA空板,大家可 ...

德州仪器:OMAP 5平台:开启移动设备变革新时代

TI OMAP 5平台不仅全面提升了性能,还采用了能够带来新机遇和用户体验的新特性,从而使应用处理器能够满足更广泛的要求。简而言 ...

【众筹】大家愿意帮我完成一个430实验板吗?

本帖最后由 calom1992 于 2014-5-13 22:11 编辑 一、自我介绍论坛里的各位前辈、同学,你们好。我是西安理工大学的一名大二学 ...

浅析:射频功率计原理、分类、指标及应用

本帖最后由 len123 于 2020-3-4 15:12 编辑 浅析:射频功率计原理、分类、指标及应用 一、功率计概述 在直流和低频时, ...

c语言使用二叉树解析多项式并求值

主要实现解析多项式数据计算,如果有需求做基于单片机的简单计算器,那么是足够了。 482345 #include <stdio.h> #i ...

传说中的2019年模拟芯片十大厂商

这是我从一网站看到的2019年十大模拟芯片厂商。我除了第十名的瑞萨其它厂家的芯片都有用过。今年ADI和Maxim合并是不是能超过TI呢 ...

【二哈识图人工智能视觉传感器】3、与处理器进行串口通信

本来计划使用imx6ull开发板的i2c接口进行和二哈识图的通信实验,正好最近在使用米尔的stm32mp1 linux开发板串口通信,而二哈识图 ...

【CW32L052测评】学习笔记02(RTC实时时钟和LCD显示)

#4:RTC时钟显示 ## 4.1:硬件设计 RTC是单片机中是一个比较重要的功能,CW32L052R8T6也同样配备,先看下数据手册说明: !(ht ...

由CircuitPython和KMK驱动的树莓派pico键盘

732442 需要的材料 名称 数量 Micro 5Pin Male to USB 2.0 A Female With Scre ...

关闭
站长推荐上一条 1/10 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表