您的位置:首页 > 财经 > 金融 > 山东疾控最新疫情_搜索引擎优化排名seo_购买链接怎么买_seo专业培训机构

山东疾控最新疫情_搜索引擎优化排名seo_购买链接怎么买_seo专业培训机构

2024/12/23 9:20:34 来源:https://blog.csdn.net/jh1513/article/details/142388415  浏览:    关键词:山东疾控最新疫情_搜索引擎优化排名seo_购买链接怎么买_seo专业培训机构
山东疾控最新疫情_搜索引擎优化排名seo_购买链接怎么买_seo专业培训机构

目录

    • 问题
    • 背景知识
    • 参考
    • 需要改什么
    • 注意
      • 尽量不要在中断函数使用 循环函数做延时
      • 中断函数中延时方法
      • 调试

问题

我想实现按钮触发紧急停止类似功能,需要使用按键中断功能。

背景知识

  • GPIO 点亮 LED。
  • stm32cubemx hal学习记录:GPIO输入输出。
  • STM32—HAL库 笔记

参考

阅读下面的参考资料,一步一步跟着做。

  • SM32CubeMX应用笔记4 外部中断。
  • STM32CubeMX实战教程(三)——外部中断(中断及HAL_Delay函数避坑),同样的 CSDN 博文在这里。
  • cubemx按键配置中断 cubemx配置中断优先级。
  • STM32 中断函数与回调函数。
  • STM32开发,使用HAL库函数实现按键(中断和普通扫描)控制LED灯。

需要改什么

只需要在 stm32f4xx_it.c 中重写回调函数。

  • stm32f4xx_it.c 重写回调函数
/* USER CODE BEGIN 1 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{ // delay 10 ms, double check button pressed
//	uint32_t aa=3127*10;
//	while(aa--);if(GPIO_Pin==Btn_Pin){ // 你自己的代码flag = 1;}
}
/* USER CODE END 1 */

下面的代码是为了中断中使用 HAL_Delay 函数,需要进行的修改,同时中断函数中只改变了一个 flag。

  • main 函数定义 flag
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint8_t flag = 0;
/* USER CODE END 0 */
  • main 函数中 while 循环处理中断的工作内容,主要是为了使用 HAL_Delay
/* USER CODE BEGIN WHILE */while (1){HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0,GPIO_PIN_SET);HAL_Delay(50);HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0,GPIO_PIN_RESET);HAL_Delay(50);if (flag == 1){// BeepHAL_GPIO_WritePin(GPIOE,GPIO_PIN_3,GPIO_PIN_SET);HAL_Delay(1000);HAL_GPIO_WritePin(GPIOE,GPIO_PIN_3,GPIO_PIN_RESET);// LEDif(HAL_GPIO_ReadPin(GPIOE,Btn_Pin)==1){for(uint16_t i= 0; i<50;i++){HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,GPIO_PIN_SET);HAL_Delay(20);HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,GPIO_PIN_RESET);HAL_Delay(20);}}flag=0;}/* USER CODE END WHILE */
  • stm32f4xx_it.c 申明外部的 flag
/* USER CODE BEGIN EV */
extern uint8_t flag;
/* USER CODE END EV */

注意

尽量不要在中断函数使用 循环函数做延时

中断函数中循环延时代码可能被编译器优化。一定要使用,需要修改优化等级到 “O0”。

在这里插入图片描述

中断函数中延时方法

在中断函数中设置一个 flag,在 main 中判断这个标志,然后采取动作。main 中可以使用延时函数 HAL_Delay。

调试

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com