STM32F103C系列以STM32CubeMX继续搭建外部中断

外部中断到单片机的输入口是PA8

正文:

1、打开STM32CubeMX

2、点击“PA8”,选中“GPIO_EXTI8”,如下图

3、选择中断产生方式,我这里选择的是下降沿,如图

4、选择IO的方式,我选择的是既不上拉也不下拉

 5、选择优先级,如图

6、配置完成,生成代码,打开代码,编译一下,无错误无警告

7、修改代码-在“AppTask.h”文件中添加代码,由于我这个外部中断是用于模拟外部时间,所以我用指针的形式的写的虚拟时钟,如下

typedef struct
{
	unsigned char second;
	unsigned char minute;
	unsigned char hour;
	unsigned short day;
}vinTime;

extern vinTime VRtime;

8、在“AppTask.c”文件中申明指针变量,如下

#include "AppTask.h"

vinTime VRtime;

//任务注册表
static TaskCtrl_t	TaskCtrl[] = //执行优先级程度 从上到下依次逐渐,第一个优先级最高,所有的任务函数都不能打断其它的任务函数
{
	/*	【实时任务】	【上电立即运行】	【初始counter】			【任务周期ms】				【任务指针】*/  //时间调度最好是cycle_task的整数倍
	{   1,                  0,              0,                      100/cycle_task,           	taskTestTime},
	{	0,  				0, 				0/cycle_task,			500/cycle_task,				taskTest},
	{	0,					0,				0/cycle_task,			50/cycle_task,				SigLED},
};

9、在“stm32f1xx_it..c”文件中,找到外部中断位置补充以下代码,如下

/**
  * @brief This function handles EXTI line[9:5] interrupts.
  */
void EXTI9_5_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI9_5_IRQn 0 */
  
  /* USER CODE END EXTI9_5_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);
  /* USER CODE BEGIN EXTI9_5_IRQn 1 */
  VRtime.second++;
  if(VRtime.second >= 60)
  {
	  VRtime.second -= 60;
	  VRtime.minute++;
	  if(VRtime.minute >= 60)
	  {
		  VRtime.minute -= 60;
		  VRtime.hour++;
		  if(VRtime.hour >= 24)
		  {
			  VRtime.hour -= 24;
			  VRtime.day ++;
		  }
	  }
  }
  /* USER CODE END EXTI9_5_IRQn 1 */
}

 10、编译、下载、在线仿真“Debug”,并把外部中断引脚连在呼吸灯上,观察指针变量在增长

成功,结束

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逐梦之程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值