鸿博彩票游戏: [开发工具] 【华大测评】二、GPIO_INTC

申博太阳城AB亚洲馆时时彩计划软件
175|6
楼主
      第一个实验内容从了解HC32F460PETB的通用输入输出(GPIO)端口开始,本次实验内容为利用开发板上的四个独立按键(SW2、SW3、SW4、SW5)控制四个LED(D23、D26、D27、D30)的亮、灭,并且使用了按键所在端口的外部中断功能。

一、实验资源
1、HC32F460-EVB;
2、Keil V5.28;
3、ST-LINK调试器

二、资源简介
1、GPIO
      HC32F460PETB最多有83个GPIO引脚,其中的81个端口都具有5V电压容限,方便应用。每个端口都可配置为具有中断功能,具备多种工作模式,同一个端口最多支持64个可选的复用功能,还有一个比较特色的功能是同一个端口可以配置为同时支持两种功能。




      手册中“通用控制”章节部分下图中高亮文字描述存在文本错误,首先是没有“PFRSxy”寄存器,但是有个“PFSRxy”功能选择寄存器;再有就是相应的控制位在“PCRxy”通用控制寄存器。




2、INTC


      HC32F460中断控制器(INTC)看上去也是非常复杂,功能亦是非常强大,合理有效的利用中断可提升系统运行效率。本次实验中只是使用了其中的外部管脚中断。如:




外部管脚的中断源支持多种非触发方式,包括上升沿、下降沿、双边沿、低电平等,使用非常灵活。



      从配置中断到使能中断,直到最终中断响应、处理中断期间有很多的步骤,要做的事也比较多,要在大量的应用中去体会,《ARM Cortex?-M4F技术参考手册》这本书还是要好好琢磨的。好在这次实验中有官方的DEMO可以做参考,对提升理解能力非常有帮助。

三、代码实现
      根据原理图确定GPIO端口及中断配置:



功能实现的代码部分参考了官方DEMO,下面是部分片断:
  1. void Sw2_Init(void)//KEY0
  2. {
  3.     stc_exint_config_t stcExtiConfig;                //外部中断配置
  4.     stc_irq_regi_conf_t stcIrqRegiConf;                //中断请求
  5.     stc_port_init_t stcPortInit;                        //GPIO初始化

  6.     /* configuration structure initialization */
  7.     MEM_ZERO_STRUCT(stcExtiConfig);
  8.     MEM_ZERO_STRUCT(stcIrqRegiConf);
  9.     MEM_ZERO_STRUCT(stcPortInit);

  10.     /**************************************************************************/
  11.     /* External Int Ch.3                                                      */
  12.     /**************************************************************************/
  13.     stcExtiConfig.enExitCh = ExtiCh03;        //外部中断通道3

  14.     /* Filter setting */
  15.     stcExtiConfig.enFilterEn = Enable;        //启用过滤功能
  16.     stcExtiConfig.enFltClk = Pclk3Div8;
  17.     /* Both edge */
  18. //    stcExtiConfig.enExtiLvl = ExIntBothEdge;        //检测方式下降或上升边缘检测
  19.         stcExtiConfig.enExtiLvl = ExIntFallingEdge;        //下降沿
  20. //        stcExtiConfig.enExtiLvl = ExIntRisingEdge;        //上升沿
  21. //        stcExtiConfig.enExtiLvl = ExIntLowLevel;        //低电平
  22.     EXINT_Init(&stcExtiConfig);//外部中断初始化

  23.     /* Set PD03 as External Int Ch.3 input 将PD03设置为外部中断 Ch.3输入*/
  24.     MEM_ZERO_STRUCT(stcPortInit);
  25.     stcPortInit.enExInt = Enable;//使能外部中断
  26.     PORT_Init(SW2_PORT, SW2_PIN, &stcPortInit);//PD3中断

  27.     /* Select External Int Ch.3 */
  28.     stcIrqRegiConf.enIntSrc = INT_PORT_EIRQ3;//PD3

  29.     /* Register External Int to Vect.No.000 */
  30.     stcIrqRegiConf.enIRQn = Int000_IRQn;//定义中断号为000

  31.     /* Callback function */
  32.     stcIrqRegiConf.pfnCallback = &KEY_ExtInt_Callback;
  33.        
  34.     /* Registration IRQ */
  35.     enIrqRegistration(&stcIrqRegiConf);

  36.     /* Clear pending */
  37.     NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn);

  38.     /* Set priority */
  39.     NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIORITY_15);//中断优先级别15

  40.     /* Enable NVIC */
  41.     NVIC_EnableIRQ(stcIrqRegiConf.enIRQn);
  42. }
复制代码


中断回调函数:
  1. void KEY_ExtInt_Callback(void)
  2. {
  3.         if (Set == EXINT_Irq**Get(ExtiCh03))//SW2
  4.         {
  5.                 LED0_TOGGLE();        //D23
  6.                 EXINT_Irq**Clr(ExtiCh03);
  7.         }
  8.        
  9.         if (Set == EXINT_Irq**Get(ExtiCh04))
  10.         {       
  11.                 LED1_TOGGLE();        //D26
  12.                 EXINT_Irq**Clr(ExtiCh04);
  13.         }
  14.        
  15.         if (Set == EXINT_Irq**Get(ExtiCh05))//SW4
  16.         {                       
  17.                 LED2_TOGGLE();        //D27
  18.                 EXINT_Irq**Clr(ExtiCh05);
  19.         }
  20.        
  21.         if (Set == EXINT_Irq**Get(ExtiCh06))//SW5
  22.         {
  23.                 LED3_TOGGLE();        //D30
  24.                 EXINT_Irq**Clr(ExtiCh06);
  25.         }
  26. }
复制代码


四、实验总结
      实验结果符合预期,对HC32F460的GPIO及INTC的使用配置有了初步的了解和认识。实验中应该体现出按键产生不同类型“边沿”触发中断的不同反应,可是代码中还没有实践,后面要进一步进行完善。
沙发
| 2020-6-26 10:27 | 只看该作者
谢谢分享,,,,,,,,,,,,
板凳
| 2020-7-1 22:14 | 只看该作者
请问你的代码块是怎么输入的?
地板
 楼主 | 2020-7-1 22:35 | 只看该作者
guojunhope 发表于 2020-7-1 22:14
请问你的代码块是怎么输入的?

键盘和鼠标啊
5
| 2020-7-2 07:46 | 只看该作者

可能我没表达清楚,我想问的是,怎样把代码输入到帖子中,才能有你现在这样的效果
6
 楼主 | 2020-7-2 10:28 | 只看该作者
guojunhope 发表于 2020-7-2 07:46
可能我没表达清楚,我想问的是,怎样把代码输入到帖子中,才能有你现在这样的效果 ...

发帖时,在编辑页面中点击如下图中符号即可将代码插入。
7
| 2020-7-2 11:21 | 只看该作者
lisingch 发表于 2020-7-2 10:28
发帖时,鸿博彩票游戏:在编辑页面中点击如下图中符号即可将代码插入。

多谢!
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

申博太阳城AB亚洲馆时时彩计划软件 永利游戏开户直营 返回顶部 返回列表
菲律宾申博现场娱乐游戏下载 东方彩票电子游戏直营网 大通彩票网址 香港博彩娱乐网站 鸿利娱乐棋牌现金开户
彩票55app下载直营网 138彩票平台直营网 tt彩票游戏直营网 华人彩票网站直营网 新凤凰彩票网址直营网
顶呱呱彩票集团直营网 足球彩票正规 万家彩票app下载 国民彩票开户 大唐彩票集团直营网
重庆时时彩投注计划 万家彩票官网直营网 老k游戏大厅官网登入 顶呱呱彩票正规直营网 天天彩票手机下载直营网