工程文件链接 无需积分就可下载

这个工程是把四个按键中其中一个PA0配置成外部中断的形式触发

1.配置STM32CubeMx工程文件

(1).配置PA0为外部中断0(EXTI0)模式

(2).配置触发中断模式为下降沿检测

(3).使能外部中断

 (4).中断优先级分组,设置四位抢断优先级,零位响应优先级

(5).生成工程文件

2.配置keil文件

(1).在之前按键工程基础上进行添加,添加.c、.h文件

(2).在资源文件里面找到gpio.c并全部复制粘贴到我们工程文件里面bsp_exti.c

(3).

a.对复制过来的内容进行删减,只保留对PA0配置的部分,并在头文件部分引入
#include "exti\bsp_exti.h"

b.在bsp_exti.h文件里面引入#include "main.h"。并声明外部中断初始化函数

c.删除原来key.c里面void KEY_Init(void)对PA0的配置

 

(4).去资源工程该文件最下端找到外部中断服务函数并复制到我们工程文件的相同位置

(5).根据截屏路径找到外部中断回掉函数,可以看出,此处是弱定义,复制函数名称,在主函数中重新定义

(6).在主函数中声明​​​​​​​

#include "exti\bsp_exti.h"

(7).初始化外部中断;重新定义外部中断回掉函数,在步骤(5)的时候复制那个函数名就是此处要重新定义的函数

以下是main.c代码,工程文件放在文章开头,可以不用积分免费下载

#include "main.h"
#include "led\bsp_led.h"
#include "key\bsp_key.h"
#include "exti\bsp_exti.h"//变量创建区
__IO uint32_t uwTick_Set_Point = 0;//控制Key_Proc的执行速度//*按键扫描专用变量
unsigned char ucKey_Val, unKey_Down, ucKey_Up, ucKey_Old;//子函数声明区
void SystemClock_Config(void);
void Key_Proc(void);
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);//主函数
int main(void)
{//内核和时钟的初始化HAL_Init();SystemClock_Config();//外设函数的初始化LED_Init();KEY_Init();GPIO_Init();while (1){  Key_Proc();}
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{LED_Disp(0x00);}
void Key_Proc(void)
{if((uwTick -  uwTick_Set_Point)<100)    return;//减速函数uwTick_Set_Point = uwTick;ucKey_Val = Key_Scan();unKey_Down = ucKey_Val & (ucKey_Old ^ ucKey_Val); ucKey_Up = ~ucKey_Val & (ucKey_Old ^ ucKey_Val);    ucKey_Old = ucKey_Val;if(unKey_Down == 2){LED_Disp(0x88);}if(unKey_Down == 1){LED_Disp(0xff);} }void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Configure the main internal regulator output voltage*/HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV3;RCC_OscInitStruct.PLL.PLLN = 20;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}/*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

蓝桥杯嵌入式——EXTI相关推荐

  1. 蓝桥杯嵌入式类比赛经验分享

    第八届蓝桥杯大赛(嵌入式组) 蓝桥杯的嵌入式组是Stm32rbt6单片机的编程比赛,我想对于学习电子信息工程专业的同学这不是一个陌生的名词,如果你是电信专业的大四同学却没有听说过msp430或者stm ...

  2. 【蓝桥杯嵌入式】比赛笔记(2)根据固件库快速配置各模块初始化

    [蓝桥杯嵌入式]比赛笔记(2)根据固件库快速配置各模块初始化 因为蓝桥杯比赛时间很短,并且如果自己去记忆各模块初始化的话,也难免有问题,所以这里给出一个通过固件库的快速初始化模块的方法. 比赛提供固件 ...

  3. 【蓝桥杯嵌入式】【STM32】7_RTC之实时时间显示和硬件闹钟设置

    文章目录 1.RTC的三个可用时钟源 2.RTC框图 3.写代码前需要知道的一些标志位 4.配置流程 5.源代码 6.关于设置闹钟这件事  6.1.配置流程  6.2.实验源代码   下载工程文件: ...

  4. 蓝桥杯嵌入式比赛LCD屏如何高亮显示某一个字符

    蓝桥杯嵌入式第九届赛题用到了高亮显示,主要由 void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii);函数来完成,这个函数不再是一下子操作一行了,而是一 ...

  5. 蓝桥杯嵌入式板-解决LCD使LED亮灭混乱的办法

    比赛板用的是stm32f103RB芯片,64管脚,LED与LCD同用了管脚PC8~PC15(对应LED1~LED8),所以板子上增用了一个锁存器--M74HC573.在控制LED的时候,只需在输出对应 ...

  6. 第九届蓝桥杯-嵌入式比赛体会与备赛经验

    原文地址:http://www.cnblogs.com/NickQ/p/8721317.html 说起蓝桥杯,相信很多电子类的学生,应该很熟悉了吧...上周日,我也去湖北工业大学参与了一下.说起这次经 ...

  7. 蓝桥杯嵌入式CT117E硬件开发平台经验分享11 | 第九届蓝桥杯国赛题

    基于 基于 CT117E 嵌入式竞赛板 嵌入式竞赛板 的 "电子秤"程序设计与调试 赛题硬件框图 由于赛题细节多,赛题PDF要求书放入了附件,链接后续加入.本文主要讲述本届题目的困 ...

  8. 国信长天蓝桥杯嵌入式类——stm32——使用keil4建立工程文件过程

    蓝桥杯嵌入式----使用keil4建立工程文件过程 目录 蓝桥杯嵌入式----使用keil4建立工程文件过程 一.完成文件建立 (一).先建立名为test工程文件夹,如图.并建立如下几个文件夹 (二) ...

  9. 第十三届蓝桥杯嵌入式备赛-STM32G431-基础模块调试①LED/LCD调试

    目录 0.前言 时钟设置 项目设置 1.功能要求 电路原理图 2.STM32Cubemx初始化 3.程序实现 LCD LED 编写LED灯亮灭的相关函数 LED关闭函数 LEDx开启函数 LEDx关闭 ...

最新文章

  1. java编写最大公约数_Java编写最大公约数和最小公倍数
  2. 【单片机】写电子钟时遇到的问题
  3. ASP.NET Web Pages – 帮助器简介
  4. 数据分析模块pandas
  5. wcf服务和寄主的关系
  6. house price model
  7. 【JEECG 官方】技术支持联系方式
  8. WebSocket详解(一):初步认识WebSocket技术
  9. F5补丁修复及几点命令
  10. aiohttp保存MySQL_python链家网高并发异步爬虫asyncio+aiohttp+aiomysql异步存入数据
  11. PCL之K维树--KD-tree
  12. 微软IE浏览器1月市场份额再创新低 跌至67.6%
  13. Python生成舒尔特的Excel表格
  14. 您在申诉时填写的收件人信息与运单号关联的收件人信息不一致,请确认
  15. 电线电缆行业MES解决方案
  16. 想下载B站视频却不知如何下手?一文教你爬B站!
  17. Frank-Wolf算法
  18. 类设计原则及设计模式(一篇就够)
  19. make menuconfig错误——make[2]: *** [scripts/kconfig/lexer.lex.c] 错误 127
  20. riboseq的下游分析ribodiff,在R里进行GO分析和KEGG分析

热门文章

  1. 视频教程-Android 项目实战-影讯-Android
  2. 众享比特荣登2020第六届中国最具投资价值公司百强榜
  3. 《Goodbye Lullaby》艾薇儿的新专辑好似一丝清风
  4. 如何运用matlab给球面染上颜色,matlab画球体颜色如何选择
  5. VisionMobile:2012年移动开发者经济报告(一)关键内容
  6. 智能电销机器人安装过程解析,智能电话机器人系统安装使用
  7. 这几个月最有价值的七个感悟
  8. 数学物理方程的Matlab实现
  9. Multisim仿真—稳压电路(一)
  10. word 使用正则匹配替换