stm32关闭中断
我只试了⼀下
NVIC_SETFAULTMASK(); //关闭总中断
NVIC_RESETFAULTMASK();//开放总中断
可以开、关中断
但是汇编
好玩的网友
asm("CPSID I"); //关中断
asm("CPSIE I"); //开中断吴希泽
编译过不了
我使⽤的是KEIL 3.50
今天答案的时候到这⾥的,发现还有⾃⼰的回复,还有⾃⼰的⼀个问题,下⾯把答案给附上:项⽬中包含
F10x_StdPeriph_Lib_V3.1.2\Libraries\CMSIS\Core\CM3\core_cm3.h
STM32F10x_StdPeriph_Lib_V3.1.2\Libraries\CMSIS\Core\CM3\core_cm3.c
新义安十杰
⾥⾯已经有了,⾃⼰去吧
在库 V3.3.0中的Libraries\CMSIS\Core\CM3\core_cm3.h 中到
#elif (defined (__ICCARM__)) /*------------------ ICC Compiler -------------------*/
/* IAR icc specific functions */
#define __enable_irq __enable_ /*!< global Interrupt enable */
#define __disable_irq __disable_interrupt /*!< global Interrupt disable */
static __INLINE void __enable_fault_irq() { __ASM ("cpsie f"); }
static __INLINE void __disable_fault_irq() { __ASM ("cpsid f"); }
#define __NOP __no_operation /*!< no operation intrinsic in IAR Compiler */
static __INLINE void __WFI() { __ASM ("wfi"); }
static __INLINE void __WFE() { __ASM ("wfe"); }
static __INLINE void __SEV() { __ASM ("sev"); }
static __INLINE void __CLREX() { __ASM ("clrex"); }
蓝正龙个人资料⽤的是IAR 6.10.已包含了core_cm3.h.
但是⽤__enable_irq或是__enable_interrupt均提⽰未定义.
⽤__enable_fault_irq() 则正常.
KEIL uversion 4 中可以使⽤
在库 V3.4.0中的Libraries\CMSIS\Core\CM3\core_cm3.h 中到
#elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/ /* GNU gcc specific functions */
static __INLINE void __enable_irq() { __ASM volatile ("cpsie i"); }
中国av女演员static __INLINE void __disable_irq() { __ASM volatile ("cpsid i"); }
static __INLINE void __enable_fault_irq() { __ASM volatile ("cpsie f"); } static __INLINE void __disable_fault_irq() { __ASM volatile ("cpsid f"); } static __INLINE void __NOP() { __ASM volatile ("nop"); }
static __INLINE void __WFI() { __ASM volatile ("wfi"); }
static __INLINE void __WFE() { __ASM volatile ("wfe"); }
static __INLINE void __SEV() { __ASM volatile ("sev"); }
static __INLINE void __ISB() { __ASM volatile ("isb"); }
劲舞团迈克舞步static __INLINE void __DSB() { __ASM volatile ("dsb"); }
static __INLINE void __DMB() { __ASM volatile ("dmb"); }
static __INLINE void __CLREX() { __ASM volatile ("clrex"); }
编译通过的》》》
__enable_irq()
__disable_irq() 使⽤这两个就好
__enable_irq()
__disable_irq() 使⽤这两个就好
正解~~~~~~~
原⽂链接: