云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > stm32中断和事件

stm32中断和事件

  • 62 次阅读
  • 3 次下载
  • 2025/6/25 12:02:03

STM32中断和事件

写“1”清除

写“0” 屏蔽中断

读到“1”有请求

写“1” 开放中断

读到“0”无请求

写“0” 禁止 写“0” 禁止下降沿触发 写“1” 允许上升 写“1” 允许下降沿触发

EXTI_IMR EXTI_PR

EXTI_SWIER EXTI_RTSR EXTI_FTSR

SWIER写“1”PR挂起

写“0” 屏蔽事件 写“1” 开放事件

EXTI_EMR

库函数:

void EXTI_DeInit(void) {

EXTI->IMR = 0x00000000;//屏蔽所有中断 EXTI->EMR = 0x00000000;//屏蔽所有事件

EXTI->RTSR = 0x00000000; //禁止所有上升沿触发 EXTI->FTSR = 0x00000000; //禁止所有下降沿触发 EXTI->PR = 0x000FFFFF;//挂起位全部清空 }

void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct) {

该函数接收一个结构体,按照下面的结构体配置EXTI寄存器 typedef struct {

uint32_t EXTI_Line; /*!< Specifies the EXTI lines to be enabled or disabled.

This parameter can be any combination of @ref EXTI_Lines */

EXTIMode_TypeDef EXTI_Mode; /*!< Specifies the mode for the EXTI lines.

This parameter can be a value of @ref EXTIMode_TypeDef */

EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines. This parameter can be a value of @ref EXTIMode_TypeDef */

FunctionalState EXTI_LineCmd; /*!< Specifies the new state of the selected EXTI lines.

This parameter can be set either to ENABLE or DISABLE */

}EXTI_InitTypeDef;

uint32_t tmp = 0;

tmp = (uint32_t)EXTI_BASE;

if (EXTI_InitStruct->EXTI_LineCmd != DISABLE) {

/* Clear EXTI line configuration 屏蔽中断和事件*/ EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line; EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line;

tmp += EXTI_InitStruct->EXTI_Mode;

*(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line; //开放中断或事件

/* Clear Rising Falling edge configuration 禁止上升沿触发和下降沿触发*/ EXTI->RTSR &= ~EXTI_InitStruct->EXTI_Line; EXTI->FTSR &= ~EXTI_InitStruct->EXTI_Line;

/* Select the trigger for the selected external interrupts */

if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling) //允许上升沿触发和下降沿触发 {

/* Rising Falling edge */

EXTI->RTSR |= EXTI_InitStruct->EXTI_Line; EXTI->FTSR |= EXTI_InitStruct->EXTI_Line; }

else

//允许上升沿触发或下降沿触发 {

tmp = (uint32_t)EXTI_BASE;

tmp += EXTI_InitStruct->EXTI_Trigger;

*(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line; } } else

//需要配置的线路取反再与Mode或运算,及相应线路的中断屏蔽位或事件屏蔽位写“0”,屏蔽事件或中断 {

tmp += EXTI_InitStruct->EXTI_Mode;

/* Disable the selected external lines */

*(__IO uint32_t *) tmp &= ~EXTI_InitStruct->EXTI_Line; } }

void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line) //软件中断事件寄存器EXTI_SWIER对应线路写“1”,产生一个软件触发 {

EXTI->SWIER |= EXTI_Line; }

FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line) //读取挂起寄存器PR对应线路的值 {

FlagStatus bitstatus = RESET;

if ((EXTI->PR & EXTI_Line) != (uint32_t)RESET) {

bitstatus = SET; } else {

bitstatus = RESET; }

return bitstatus; }

void EXTI_ClearFlag(uint32_t EXTI_Line)//挂起寄存器PR对应线路写“1”清除 {

EXTI->PR = EXTI_Line; }

ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)//如果对应线路开放该线路中断,则读取PR的值 {

ITStatus bitstatus = RESET; uint32_t enablestatus = 0;

enablestatus = EXTI->IMR & EXTI_Line;

if (((EXTI->PR & EXTI_Line) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET)) {

bitstatus = SET; } else {

bitstatus = RESET;

}

return bitstatus; }

void EXTI_ClearITPendingBit(uint32_t EXTI_Line) //挂起寄存器PR对应线路写“1”清除 {

EXTI->PR = EXTI_Line; }

从ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)函数和函数名来看,感觉IT是在中断函数中使用的,Flag是在中断和事件中使用的。

仅供学习交流使用 参考资料:

stm32中文参考手册; stm32中文固件库; stm32中文数据手册;

STM32F10x_StdPeriph_Lib_V3.5.0。

搜索更多关于: stm32中断和事件 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

STM32中断和事件 写“1”清除 写“0” 屏蔽中断 读到“1”有请求 写“1” 开放中断 读到“0”无请求 写“0” 禁止 写“0” 禁止下降沿触发 写“1” 允许上升 写“1” 允许下降沿触发 EXTI_IMR EXTI_PR EXTI_SWIER EXTI_RTSR EXTI_FTSR SWIER写“1”PR挂起 写“0” 屏蔽事件 写“1” 开放事件 EXTI_EMR 库函数: void EXTI_DeInit(void) { EXTI->IMR = 0x00000000;//屏蔽所有中断 EXTI->EMR = 0x0000

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com