时间:2024.10.23
一、学习内容
1.异常类型
1.1中断简介
STM32中断非常强大,每个外设都可以产生中断,因此中断是一个公共的部分。
在本章讨论中,如无特别说明,异常就是中断,中断就是异常。
1.2中断类型
系统异常,体现在内核水平(Cortex-M3)
外部中断,体现在外设水平
有关系统异常和中断的清单查阅参考手册第9章的向量表部分
STM32参考手册-9中断和事件-表55
TIPS:
1.在这个向量表中,灰色部分是内核型中断(系统异常)10个,白色的表示是外设型中断(外部中断)60个
2.优先级数字越小,优先级越高
2.NVIC简介
2.1NVIC简介
嵌套向量中断控制器。属于内核外设,管理着包括内核和片上所有外设的中断相关的功能。
2.2两个重要的文件
core-cm3.h和misc.h
2.3NVIC详细功能介绍在哪里找到
文件:STM32F10xxx Cortex-M3编程手册-英文版
参考手册-9中断与事件里只有简略的介绍
2.4NVIC寄存器结构体
打开工程-USER-main.c下方的core_cm3.h
/** @addtogroup CMSIS_CM3_NVIC CMSIS CM3 NVIC
memory mapped structure for Nested Vectored Interrupt Controller (NVIC)
@{
*/
typedef struct
{
__IO uint32_t ISER[8]; /*!< Offset: 0x000 Interrupt Set Enable Register */
uint32_t RESERVED0[24];
__IO uint32_t ICER[8]; /*!< Offset: 0x080 Interrupt Clear Enable Register */
uint32_t RSERVED1[24];
__IO uint32_t ISPR[8]; /*!< Offset: 0x100 Interrupt Set Pending Register */
uint32_t RESERVED2[24];
__IO uint32_t ICPR[8]; /*!< Offset: 0x180 Interrupt Clear Pending Register */
uint32_t RESERVED3[24];
__IO uint32_t IABR[8]; /*!< Offset: 0x200 Interrupt Active bit Register */
uint32_t RESERVED4[56];
__IO uint8_t IP[240]; /*!< Offset: 0x300 Interrupt Priority Register (8Bit wide) */
uint32_t RESERVED5[644];
__O uint32_t STIR; /*!< Offset: 0xE00 Software Trigger Interrupt Register */
} NVIC_Type;
/*@}*/ /* end of group CMSIS_CM3_NVIC */
书P131代码清单16-1 NVIC结构体定义,来自固件库头文件:core_cm3.h
2.5NVIC固件库函数
打开工程-FWLIB-misc.c-misc.h-找到对应的NVIC固件库函数
/** @defgroup MISC_Exported_Functions
* @{
*/
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);
void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);
3.优先级的定义
中断优先级数字越小,优先级越高
3.1优先级设定
NVIC->IPRx
3.2优先级分组
主优先级=抢占优先级
标签:NVIC,优先级,16,中断,概览,STM32,Offset,Interrupt,uint32 From: https://blog.csdn.net/2201_75297369/article/details/143177585