11 ÄÚ²¿¼¯³Éµç·£¨I2C£©
11.1 I2C¼Ä´æÆ÷½á¹¹ 11.2 I2C¿âº¯Êý
12 ¶ÀÁ¢¿´ÃŹ·£¨IWDG£©
12.1 IWDG¼Ä´æÆ÷½á¹¹ 12.2 IWDG¿âº¯Êý
ÒëÎÄÓ¢ÎÄÔ°æΪUM0427 Oct. 2007 Rev 2, ÒëÎĽö¹©²Î¿¼£¬ÓëÓ¢ÎÄ°æ³åÍ»µÄ£¬ÒÔÓ¢ÎÄ°æΪ׼
NVIC
13 ǶÌ×ÏòÁ¿ÖжϿØÖÆÆ÷£¨NVIC£©
NVICÇý¶¯ÓжàÖÖÓÃ;£ºÀýÈçʹÄÜ»òÕßʧÄÜIRQÖжϣ¬Ê¹ÄÜ»òÕßʧÄܵ¥¶ÀµÄIRQͨµÀ£¬¸Ä±äIRQͨµÀµÄÓÅÏȼ¶µÈµÈ¡£
Section 13.1 NVIC¼Ä´æÆ÷½á¹¹ÃèÊöÁ˹̼þº¯Êý¿âËùʹÓõÄÊý¾Ý½á¹¹£¬Section 13.2 ¹Ì¼þ¿âº¯Êý½éÉÜÁ˺¯Êý¿âÀïµÄËùÓк¯Êý¡£
13.1 NVIC¼Ä´æÆ÷½á¹¹
NVIC¼Ä´æÆ÷½á¹¹£¬NVIC_TypeDeff£¬ÔÚÎļþ¡°stm32f10x_map.h¡±Öж¨ÒåÈçÏ£º
typedef struct {
vu32 Enable[2]; u32 RESERVED0[30]; vu32 Disable[2]; u32 RSERVED1[30]; vu32 Set[2];
u32 RESERVED2[30]; vu32 Clear[2]; u32 RESERVED3[30]; vu32 Active[2]; u32 RESERVED4[62]; vu32 Priority[11];
} NVIC_TypeDef;/* NVIC Structure */ typedef struct {
vu32 CPUID; vu32 IRQControlState; vu32 ExceptionTableOffset; vu32 AIRC; vu32 SysCtrl; vu32 ConfigCtrl; vu32 SystemPriority[3]; vu32 SysHandlerCtrl; vu32 ConfigFaultStatus; vu32 HardFaultStatus; vu32 DebugFaultStatus; vu32 MemoryManageFaultAddr; vu32 BusFaultAddr;
} SCB_TypeDef; /* System Control Block Structure */
ÒëÎÄÓ¢ÎÄÔ°æΪUM0427 Oct. 2007 Rev 2, ÒëÎĽö¹©²Î¿¼£¬ÓëÓ¢ÎÄ°æ³åÍ»µÄ£¬ÒÔÓ¢ÎÄ°æΪ׼
NVIC
Table 265.Àý¾ÙÁËNVICËùÓмĴæÆ÷
Table 265. NVIC¼Ä´æÆ÷ ¼Ä´æÆ÷ Enable Disable Set Clear Active Priority CPUID
IRQControlStatus ExceptionTableOffset AIRC SysCtrl ConfigCtrl SystemPriority SysHandlerCtrl ConfigFaultStatus HardFaultStatus DebugFaultStatus
MemorymanageFaultAddr BusFaultAddr
...
#define SCS_BASE ((u32)0xE000E000) #define NVIC_BASE (SCS_BASE + 0x0100) #define SCB_BASE (SCS_BASE + 0x0D00) ...
#ifndef DEBUG ...
#ifdef _NVIC
#define NVIC ((NVIC_TypeDef *) NVIC_BASE) #define SCB ((SCB_TypeDef *) SCB_BASE) #endif /*_NVIC */ ...
#else /* DEBUG */ ...
#ifdef _NVIC
EXT NVIC_TypeDef *NVIC; EXT SCB_TypeDef *SCB; #endif /*_NVIC */ ...
ÒëÎÄÓ¢ÎÄÔ°æΪUM0427 Oct. 2007 Rev 2, ÒëÎĽö¹©²Î¿¼£¬ÓëÓ¢ÎÄ°æ³åÍ»µÄ£¬ÒÔÓ¢ÎÄ°æΪ׼
ÃèÊö
ÖжÏÉèÖÃʹÄܼĴæÆ÷ ÖжÏÇå³ýʹÄܼĴæÆ÷ ÖжÏÉèÖôý´¦Àí¼Ä´æÆ÷ ÖжÏÇå³ý´ý´¦Àí¼Ä´æÆ÷ Öжϻλ¼Ä´æÆ÷ ÖжÏÓÅÏȼ¶¼Ä´æÆ÷ CPU ID »ù¼Ä´æÆ÷
ÖжϿØÖÆ״̬¼Ä´æÆ÷ ÏòÁ¿±íÒÆλ¼Ä´æÆ÷ Ó¦ÓÿØÖÆ/ÖØÖüĴæÆ÷ ϵͳ¿ØÖƼĴæÆ÷ ÉèÖÿØÖƼĴæÆ÷
ϵͳ´¦ÀíÓÅÏȼ¶¼Ä´æÆ÷
ϵͳ´¦Àí¿ØÖƺÍ״̬¼Ä´æÆ÷ ÉèÖôíÎó״̬¼Ä´æÆ÷ Ó²¼þ´íÎó״̬¼Ä´æÆ÷ ³ý´í´íÎó¼Ä´æÆ÷
´æ´¢Æ÷¹ÜÀí´íÎóµØÖ·¼Ä´æÆ÷ ×ÜÏß´íÎóµØÖ·¼Ä´æÆ÷
NVICÍâÉèÉùÃ÷ÓÚÎļþ¡°stm32f10x_map.h¡±£º
NVIC
#endif
ʹÓÃDebugģʽʱ£¬³õʼ»¯Ö¸ÕëNVIC, SCBÓÚÎļþ¡°stm32f10x_lib.c¡±£º
#ifdef _NVIC
NVIC = (NVIC_TypeDef *) NVIC_BASE; SCB = (SCB_TypeDef *) SCB_BASE; #endif /*_NVIC */
ΪÁË·ÃÎÊNVIC¼Ä´æÆ÷£¬, _NVIC±ØÐëÔÚÎļþ¡°stm32f10x_conf.h¡±Öж¨ÒåÈçÏ£º
#define _NVIC
13.2 NVIC¿âº¯Êý
Table 266. Àý¾ÙÁËNVICµÄ¿âº¯Êý Table 266. NVIC¿âº¯Êý º¯ÊýÃû NVIC_DeInit NVIC_SCBDeInit
NVIC_PriorityGroupConfig NVIC_Init NVIC_StructInit NVIC_SETPRIMASK NVIC_RESETPRIMASK NVIC_SETFAULTMASK NVIC_RESETFAULTMASK NVIC_BASEPRICONFIG NVIC_GetBASEPRI
NVIC_GetCurrentPendingIRQChannel NVIC_GetIRQChannelPendingBitStatus NVIC_SetIRQChannelPendingBit NVIC_ClearIRQChannelPendingBit NVIC_GetCurrentActiveHandler NVIC_GetIRQChannelActiveBitStatus NVIC_GetCPUID NVIC_SetVectorTable NVIC_GenerateSystemReset NVIC_GenerateCoreReset NVIC_SystemLPConfig NVIC_SystemHandlerConfig NVIC_SystemHandlerPriorityConfig
ÃèÊö
½«ÍâÉèNVIC¼Ä´æÆ÷ÖØÉèΪȱʡֵ ½«ÍâÉèSCB¼Ä´æÆ÷ÖØÉèΪȱʡֵ ÉèÖÃÓÅÏȼ¶·Ö×飺ÏÈÕ¼ÓÅÏȼ¶ºÍ´ÓÓÅÏȼ¶
¸ù¾ÝNVIC_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèNVIC¼Ä´æÆ÷ °ÑNVIC_InitStructÖеÄÿһ¸ö²ÎÊý°´È±Ê¡ÖµÌîÈë ʹÄÜPRIMASKÓÅÏȼ¶£ºÌáÉýÖ´ÐÐÓÅÏȼ¶ÖÁ0 ʧÄÜPRIMASKÓÅÏȼ¶
ʹÄÜFAULTMASKÓÅÏȼ¶£ºÌáÉýÖ´ÐÐÓÅÏȼ¶ÖÁ-1 ʧÄÜFAULTMASKÓÅÏȼ¶
¸Ä±äÖ´ÐÐÓÅÏȼ¶´ÓN£¨×îµÍ¿ÉÉèÖÃÓÅÏȼ¶£©ÌáÉýÖÁ1 ·µ»ØBASEPRIÆÁ±ÎÖµ ·µ»Øµ±Ç°´ý´¦ÀíIRQ±êʶ·û
¼ì²éÖ¸¶¨µÄIRQͨµÀ´ý´¦ÀíλÉèÖÃÓë·ñ ÉèÖÃÖ¸¶¨µÄIRQͨµÀ´ý´¦Àíλ Çå³ýÖ¸¶¨µÄIRQͨµÀ´ý´¦Àíλ
·µ»Øµ±Ç°»î¶¯µÄHandler£¨IRQͨµÀºÍϵͳHandler£©µÄ±êʶ·û ¼ì²éÖ¸¶¨µÄIRQͨµÀ»î¶¯Î»ÉèÖÃÓë·ñ
·µ»ØIDºÅÂ룬Cortex-M3Äں˵İ汾ºÅºÍʵÏÖϸ½Ú ÉèÖÃÏòÁ¿±íµÄλÖúÍÆ«ÒÆ ²úÉúÒ»¸öϵͳ¸´Î»
²úÉúÒ»¸öÄںˣ¨ÄÚºË+NVIC£©¸´Î» Ñ¡Ôñϵͳ½øÈëµÍ¹¦ºÄģʽµÄÌõ¼þ ʹÄÜ»òÕßʧÄÜÖ¸¶¨µÄϵͳHandler ÉèÖÃÖ¸¶¨µÄϵͳHandlerÓÅÏȼ¶
NVIC_GetSystemHandlerPendingBitStatus ¼ì²éÖ¸¶¨µÄϵͳHandler´ý´¦ÀíλÉèÖÃÓë·ñ
ÒëÎÄÓ¢ÎÄÔ°æΪUM0427 Oct. 2007 Rev 2, ÒëÎĽö¹©²Î¿¼£¬ÓëÓ¢ÎÄ°æ³åÍ»µÄ£¬ÒÔÓ¢ÎÄ°æΪ׼