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

【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个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

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