STM32软件中断

        软件中断作用

        可以把比较重要或者紧急的代码放在软件中断服务函数里面,不需要等待外部硬件是否出现异常事件,直接通过软件产生中断。保护比较重要的代码不被打断

        软件中断不需要打开时钟的原因是不需要I/O口对应的配置中断线

        代码流程:

  1. 打开中断屏蔽器
  2. 配置优先级
  3. 中断服务函数
  4. 软件中断寄存器触发软件中断

	//中断屏蔽器
	EXTI->IMR|=(1<<1);

打开中断屏蔽器 

	//无沿检测器 
	EXTI->FTSR&=~(1<<1);//无下降沿
	EXTI->RTSR&=~(1<<1);//无上升沿

 

 

	NVIC_SetPriority(EXTI1_IRQn,9);//优先级 占先=2 次级=1
	NVIC_EnableIRQ(EXTI1_IRQn);//使能

配置优先级

//中断服务函数(不用声明)
void EXTI1_IRQHandler (void)
{
	if(EXTI->PR&(1<<1))//判断是否触发中断请求(标志位)
	{
		EXTI->PR|=(1<<1);//清除标志位
		Liu_Led();
	}
}

中断服务函数

EXTI->SWIER|=(1<<1);软件中断事件寄存器 (触发条件)

软件中断寄存器触发软件中断

写在哪个位置就从哪里触发软件中断

完整代码

/*
Function name:Soft_Exti_Config
Description:软件中断初始化
param:None
retval:None
Remarks:
PE1
*/
void Soft_Exti_Config(void)
{
	//中断屏蔽器
	EXTI->IMR|=(1<<1);
	//无沿检测器 
	EXTI->FTSR&=~(1<<1);//无下降沿
	EXTI->RTSR&=~(1<<1);//无上升沿
	//配置优先级
	NVIC_SetPriority(EXTI1_IRQn,9);//优先级 占先=2 次级=1
	NVIC_EnableIRQ(EXTI1_IRQn);//使能

}
//中断服务函数(不用声明)
void EXTI1_IRQHandler (void)
{
	if(EXTI->PR&(1<<1))//判断是否触发中断请求(标志位)
	{
		EXTI->PR|=(1<<1);//清除标志位
		Liu_Led();
	}
}

相关推荐

  1. stm32_中断讲解

    2024-04-26 23:14:01       15 阅读
  2. STM32 中断时间

    2024-04-26 23:14:01       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-26 23:14:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-26 23:14:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-26 23:14:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-26 23:14:01       18 阅读

热门阅读

  1. 贪吃蛇项目实践!(下)

    2024-04-26 23:14:01       19 阅读
  2. git 缓冲区查看与设置

    2024-04-26 23:14:01       13 阅读
  3. PostgreSQL恢复系列:pg_filedump恢复字典构造---惜分飞

    2024-04-26 23:14:01       23 阅读
  4. C++中的STL——stack类的基本使用

    2024-04-26 23:14:01       15 阅读
  5. web前端第三次笔记

    2024-04-26 23:14:01       16 阅读
  6. centos常用命令(持续更新)

    2024-04-26 23:14:01       19 阅读
  7. CSS - 定位详解

    2024-04-26 23:14:01       12 阅读
  8. 在 TypeScript 中declare module 关键字用法

    2024-04-26 23:14:01       12 阅读
  9. Git命令(附:CMD常用指令)

    2024-04-26 23:14:01       17 阅读