你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32G4 NUCLEO G431RB】4.按键中断

[复制链接]
jundao721 发布时间:2019-9-14 18:52
   本来不想写这个测试了,在单片机应用中算是比较常规了,后来发现这一版库函数定义还是蛮复杂的,反正比我想的复杂。尤其是中断这块还得需要熟悉。这个测试为了实现按键中断翻转LED灯。这些资源板卡上都有。原理图截图如图1所示:

   完成这个功能,就是初始化时钟,引脚定义,外部中断,写中断函数,基本就是这样。我研究了一下库函数,宏写的多,觉得读起来和移植都挺复杂的,就给改成原来熟悉的样子了,简化了一下。
     GPIO及中断初始化如下:
  
  1. GPIO_InitStruct.Pin = GPIO_PIN_13;
  2.     GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  3.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  4.         /* Configure Button pin as input with External interrupt */
  5.     GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;

  6.     HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  7.     (void)HAL_EXTI_GetHandle(&hpb_exti, EXTI_LINE_13);
  8.     (void)HAL_EXTI_RegisterCallback(&hpb_exti, HAL_EXTI_COMMON_CB_ID,0);

  9.     /* Enable and set Button EXTI Interrupt to the lowest priority */
  10.     HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0x00);
  11.     HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
复制代码

  调用外部中断Callback函数:
  1. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  2. {
  3.   if (GPIO_Pin ==GPIO_PIN_13)
  4.   {
  5. //    UserButtonStatus = 1;
  6.                 HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
  7.   }
  8. }
复制代码
  哦,对了,在初始化main函数中,初始化一下LED引脚的初始状态。
  1. GPIOA->BSRR = GPIO_PIN_5;
复制代码
  这个测试主要就是熟悉外部中断的练习。

  效果如图2所示:

图1

图1

图2

图2
收藏 评论0 发布时间:2019-9-14 18:52

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版