STM32¹Ì¼þ¿âʹÓÃÊÖ²áµÄÖÐÎÄ·­Òë ÏÂÔر¾ÎÄ

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, ÒëÎĽö¹©²Î¿¼£¬ÓëÓ¢ÎÄ°æ³åÍ»µÄ£¬ÒÔÓ¢ÎÄ°æΪ׼