//________________________________________________________________ // #ifndef __STM32F2xx_H__ #define __STM32F2xx_H__ #define IO_REG32(_a_) ((volatile unsigned long*)(_a_)) #define IO_REG16(_a_) ((volatile unsigned short*)(_a_)) #define IO_REG8(_a_) ((volatile unsigned char*)(_a_)) typedef volatile unsigned long STM_REG; typedef volatile unsigned short STM_REG16; //________________________________________________________________ // // Табличка процесоров STM32F2xx // // Medium-Density High/XL-Density // xB xC xE xF xG // F205 64/128 96/256 128/512 128/768 128/1024 // F207 - 96/256 128/512 128/768 128/1024 // F215 - - 128/512 - 128/1024 // F217 - - 128/512 - 128/1024 // //________________________________________________________________ // // Условные идентификаторы микроконтроллеров STM32F2xx // #define STM32F205xB_ID 0x205B #define STM32F205xC_ID 0x205C #define STM32F205xE_ID 0x205E #define STM32F205xF_ID 0x205F #define STM32F205xG_ID 0x2051 #define STM32F207xC_ID 0x207C #define STM32F207xE_ID 0x207E #define STM32F207xF_ID 0x207F #define STM32F207xG_ID 0x2071 #define STM32F215xE_ID 0x215E #define STM32F215xG_ID 0x2151 #define STM32F217xE_ID 0x217E #define STM32F217xG_ID 0x2171 //________________________________________________________________ // // Peripheral blocks base addresses (not defined yet) // #define FSMC_BASE ((PSTM_FSMC) 0xA0000000) #define RNG_BASE ((PSTM_RNG) 0x50060800) #define HASH_BASE ((PSTM_HASH) 0x50060400) #define CRYP_BASE ((PSTM_HASH) 0x50060000) #define DCMI_BASE ((PSTM_HASH) 0x50050000) #define CRC_BASE ((PSTM_CRC) 0x40023000) #define DAC_BASE ((PSTM_DAC) 0x40007400) #define CAN2_BASE ((PSTM_CAN) 0x40006800) #define CAN1_BASE ((PSTM_CAN) 0x40006400) #define I2C3_BASE ((PSTM_I2C) 0x40005C00) #define I2C2_BASE ((PSTM_I2C) 0x40005800) #define I2C1_BASE ((PSTM_I2C) 0x40005400) //________________________________________________________________ // // NVIC - Nested Vectored Interrupt Controller // #define NVIC_IECR0 IO_REG32(0xE000E100) // Interrupt Set Enable #define NVIC_IECR1 IO_REG32(0xE000E104) // #define NVIC_IECR2 IO_REG32(0xE000E108) // #define NVIC_IDCR0 IO_REG32(0xE000E180) // Interrupt Clear Enable #define NVIC_IDCR1 IO_REG32(0xE000E184) // #define NVIC_IDCR2 IO_REG32(0xE000E188) // #define NVIC_ISPR0 IO_REG32(0xE000E200) // Interrupt Set Pending #define NVIC_ISPR1 IO_REG32(0xE000E204) // #define NVIC_ISPR2 IO_REG32(0xE000E208) // #define NVIC_ICPR0 IO_REG32(0xE000E280) // Interrupt Clear Pending #define NVIC_ICPR1 IO_REG32(0xE000E284) // #define NVIC_ICPR2 IO_REG32(0xE000E288) // #define NVIC_IABR0 IO_REG32(0xE000E300) // Interrupt Active Bit #define NVIC_IABR1 IO_REG32(0xE000E304) // #define NVIC_IABR2 IO_REG32(0xE000E308) // // #define NVIC_IPR0 IO_REG32(0xE000E400) // Interrupt Priority #define NVIC_IPR1 IO_REG32(0xE000E404) // #define NVIC_IPR2 IO_REG32(0xE000E408) // #define NVIC_IPR3 IO_REG32(0xE000E40C) // #define NVIC_IPR4 IO_REG32(0xE000E410) // #define NVIC_IPR5 IO_REG32(0xE000E414) // #define NVIC_IPR6 IO_REG32(0xE000E418) // #define NVIC_IPR7 IO_REG32(0xE000E41C) // #define NVIC_IPR8 IO_REG32(0xE000E420) // #define NVIC_IPR9 IO_REG32(0xE000E424) // #define NVIC_IPR10 IO_REG32(0xE000E428) // #define NVIC_IPR11 IO_REG32(0xE000E42C) // #define NVIC_IPR12 IO_REG32(0xE000E430) // #define NVIC_IPR13 IO_REG32(0xE000E434) // #define NVIC_IPR14 IO_REG32(0xE000E438) // #define NVIC_IPR15 IO_REG32(0xE000E43C) // #define NVIC_IPR16 IO_REG32(0xE000E440) // #define NVIC_IPR17 IO_REG32(0xE000E444) // #define NVIC_IPR18 IO_REG32(0xE000E448) // #define NVIC_IPR19 IO_REG32(0xE000E44C) // #define NVIC_IPR20 IO_REG32(0xE000E450) // // #pragma pack(push, 4) // interrupt context typedef struct _STM_CONTEXT // { // unsigned long user_R0; // unsigned long user_R1; // unsigned long user_R2; // unsigned long user_R3; // unsigned long user_R12; // unsigned long user_LR; // unsigned long user_PC; // unsigned long user_PSR; // // } STM_CONTEXT, *PSTM_CONTEXT; // #pragma pack(pop) // // #pragma pack(push, 4) // typedef volatile struct _STM_NVIC // { // STM_REG sNVIC_ISER[3]; // Interrupt Set Enable STM_REG sReserved1[29]; // STM_REG sNVIC_ICER[3]; // Interrupt Clear Enable STM_REG sReserved2[29]; // STM_REG sNVIC_ISPR[3]; // Interrupt Set Pending STM_REG sReserved3[29]; // STM_REG sNVIC_ICPR[3]; // Interrupt Clear Pending STM_REG sReserved4[29]; // STM_REG sNVIC_IABR[3]; // Interrupt Active Bit STM_REG sReserved5[61]; // STM_REG sNVIC_IPR[21]; // Interrupt Priority STM_REG sReserved6[683]; // STM_REG sNVIC_STIR; // Software Trigger Interrupt } STM_NVIC, *PSTM_NVIC; #pragma pack(pop) #define NVIC_BASE ((PSTM_NVIC) 0xE000E100) //________________________________________________________________ // #define bNVIC_HIGHEST_PRIORITY (0<<3) // наивысший приоритет #define bNVIC_LOWEST_PRIORITY (31u<<3) // наинизший приоритет // //________________________________________________________________ // // Номера векторов аппаратных прерываний // #define IRQ_WWDT 0 // Windows Watchdog Timer #define IRQ_PVD 1 // Programmable Voltage Detector #define IRQ_TAMPER 2 // Tamper (EXTI) #define IRQ_RTC_WKUP 3 // RTC Wakeup (EXTI) #define IRQ_FLASH 4 // Flash Controller #define IRQ_RCC 5 // RCC global #define IRQ_EXTI0 6 // EXTI Line0 #define IRQ_EXTI1 7 // EXTI Line1 #define IRQ_EXTI2 8 // EXTI Line2 #define IRQ_EXTI3 9 // EXTI Line3 #define IRQ_EXTI4 10 // EXTI Line4 #define IRQ_DMA1_CH0 11 // DMA1 Stream0 #define IRQ_DMA1_CH1 12 // DMA1 Stream1 #define IRQ_DMA1_CH2 13 // DMA1 Stream2 #define IRQ_DMA1_CH3 14 // DMA1 Stream3 #define IRQ_DMA1_CH4 15 // DMA1 Stream4 #define IRQ_DMA1_CH5 16 // DMA1 Stream5 #define IRQ_DMA1_CH6 17 // DMA1 Stream6 #define IRQ_ADC123 18 // ADC 1 & 2 #define IRQ_CAN1_TX 19 // CAN1 TX #define IRQ_CAN1_RX0 20 // CAN1 RX0 #define IRQ_CAN1_RX1 21 // CAN1 RX1 #define IRQ_CAN1_SCE 22 // CAN1 SCE #define IRQ_EXTI59 23 // EXTI Line 5-9 // #define IRQ_TIM1_BRK 24 // TIM1 Break #define IRQ_TIM9 24 // TIM9 #define IRQ_TIM1_UP 25 // TIM1 Update #define IRQ_TIM10 25 // TIM16 #define IRQ_TIM1_TRG_COM 26 // TIM1 Trigger and Commutation #define IRQ_TIM17 26 // TIM17 #define IRQ_TIM11 26 // TIM11 // #define IRQ_TIM1 27 // TIM1 Capture Compare #define IRQ_TIM2 28 // TIM2 #define IRQ_TIM3 29 // TIM3 #define IRQ_TIM4 30 // TIM4 #define IRQ_I2C1_EV 31 // I2C1 event #define IRQ_I2C1_ER 32 // I2C1 error #define IRQ_I2C2_EV 33 // I2C2 event #define IRQ_I2C2_ER 34 // I2C2 error #define IRQ_SPI1 35 // SPI1 #define IRQ_SPI2 36 // SPI2 #define IRQ_UART1 37 // USART1 #define IRQ_UART2 38 // USART2 #define IRQ_UART3 39 // USART3 #define IRQ_EXTI1015 40 // EXTI Line 10-15 #define IRQ_RTC_ALARM 41 // Alarm RTC // #define IRQ_OTG_FS_WKUP 42 // USB On-The-Go FS Wakeup // #define IRQ_TIM8_BRK 43 // TIM8 Break #define IRQ_TIM12 43 // TIM12 #define IRQ_TIM8_UP 44 // TIM8 Update #define IRQ_TIM13 44 // TIM13 #define IRQ_TIM8_TRG_COM 45 // TIM8 Trigger and Commutation #define IRQ_TIM14 45 // TIM14 #define IRQ_TIM8 46 // TIM8 Capture Compare #define IRQ_DMA1_CH7 47 // DMA1 Stream7 // #define IRQ_FSMC 48 // FSMC #define IRQ_SDIO 49 // SDIO #define IRQ_TIM5 50 // TIM5 #define IRQ_SPI3 51 // SPI3 #define IRQ_UART4 52 // UART4 #define IRQ_UART5 53 // UART5 #define IRQ_TIM6 54 // TIM6 #define IRQ_DAC 54 // DAC #define IRQ_TIM7 55 // TIM7 // #define IRQ_DMA2_CH0 56 // DMA2 Stream0 #define IRQ_DMA2_CH1 57 // DMA2 Stream1 #define IRQ_DMA2_CH2 58 // DMA2 Stream2 #define IRQ_DMA2_CH3 59 // DMA2 Stream3 #define IRQ_DMA2_CH4 60 // DMA2 Stream4 // #define IRQ_EMAC 61 // Ethernet MAC #define IRQ_EMAC_WKUP 62 // Ethermat wakeup #define IRQ_CAN2_TX 63 // CAN2 TX #define IRQ_CAN2_RX0 64 // CAN2 RX0 #define IRQ_CAN2_RX1 65 // CAN2 RX1 #define IRQ_CAN2_SCE 66 // CAN2 SCE #define IRQ_OTG_FS 67 // USB On The Go FS // #define IRQ_DMA2_CH5 68 // DMA2 Stream5 #define IRQ_DMA2_CH6 69 // DMA2 Stream6 #define IRQ_DMA2_CH7 70 // DMA2 Stream7 #define IRQ_UART6 71 // UART6 #define IRQ_I2C3_EV 72 // I2C3 event #define IRQ_I2C3_ER 73 // I2C3 error #define IRQ_OTG_HS_EP1_OUT 74 // USB On The Go HS EP1 Out #define IRQ_OTG_HS_EP1_IN 75 // USB On The Go HS EP1 In #define IRQ_OTG_HS_WKUP 76 // USB On The Go HS Wakeup through EXTI #define IRQ_OTG_HS 77 // USB On The Go HS #define IRQ_DCMI 78 // DCMI #define IRQ_CRYP 79 // crypto #define IRQ_HASH_RNG 80 // Hash and Rng #define IRQ_MAX 81 // //________________________________________________________________ // // System Control Block, Cortex M3, по определению ARMv7 // данные регистры все относятся к NVIC // #define SC_ICTR IO_REG32(0xE000E004) // Interrupt Control Type Register (ro) #define SC_ACTLR IO_REG32(0xE000E008) // Auxiliary Control // #define SC_STCTRL IO_REG32(0xE000E010) // System Tick Control #define SC_STLOAD IO_REG32(0xE000E014) // System Tick Reload Value #define SC_STVAL IO_REG32(0xE000E018) // System Tick Current Value #define SC_STCALIB IO_REG32(0xE000E01C) // System Tick Calibration // #define SC_CPUID IO_REG32(0xE000ED00) // CPUID Base #define SC_ICSR IO_REG32(0xE000ED04) // Interrupt Control and State #define SC_VTOR IO_REG32(0xE000ED08) // Vector Table Offset #define SC_AIRCR IO_REG32(0xE000ED0C) // Application Interrupt and Reset Control #define SC_SCR IO_REG32(0xE000ED10) // System Control #define SC_CCR IO_REG32(0xE000ED14) // Configuration and Control #define SC_SHPR1 IO_REG32(0xE000ED18) // System Handler Priority #define SC_SHPR2 IO_REG32(0xE000ED1C) // #define SC_SHPR3 IO_REG32(0xE000ED20) // #define SC_SHCSR IO_REG32(0xE000ED24) // System Handler Control and State #define SC_CFSR IO_REG32(0xE000ED28) // Configurable Fault Status #define SC_MMSR IO_REG8 (0xE000ED28) // Memory Management Fault Status #define SC_BFSR IO_REG8 (0xE000ED29) // Bus Fault Status #define SC_UFSR IO_REG16(0xE000ED2A) // Usage Fault Status #define SC_HFSR IO_REG32(0xE000ED2C) // Hard Fault Status #define SC_MMFAR IO_REG32(0xE000ED34) // Memory Management Fault Address #define SC_BFAR IO_REG32(0xE000ED38) // Bus Fault Address #define SC_STIR IO_REG32(0xE000EF00) // Software Trigger Interrupt // #define MPU_TYPE IO_REG32(0xE000ED90) // MPU Type identificator #define MPU_CTRL IO_REG32(0xE000ED94) // MPU Control #define MPU_RNR IO_REG32(0xE000ED98) // MPU Region Number Register #define MPU_RBAR IO_REG32(0xE000ED9C) // MPU Region Base Address Register #define MPU_RASR IO_REG32(0xE000EDA0) // MPU Region Attribute and Size Register #define MPU_RBAR_A1 IO_REG32(0xE000EDA4) // Alias of RBAR #define MPU_RASR_A1 IO_REG32(0xE000EDA8) // Alias of RASR #define MPU_RBAR_A2 IO_REG32(0xE000EDAC) // Alias of RBAR #define MPU_RASR_A2 IO_REG32(0xE000EDB0) // Alias of RASR #define MPU_RBAR_A3 IO_REG32(0xE000EDB4) // Alias of RBAR #define MPU_RASR_A3 IO_REG32(0xE000EDB8) // Alias of RASR // // Memory Protection Unit // #define bMPU_IREGION_MASK 0xFFul // MPU_TYPE #define bMPU_IREGION_SHIFT 16 // #define bMPU_DREGION_MASK 0xFFul // #define bMPU_DREGION_SHIFT 8 // #define bMPU_SEPARATE (1<<0) // // #define bMPU_PRIVDEFENA (1<<2) // privileged default enable #define bMPU_HFMIENA (1<<1) // MPU enabled in fault mode #define bMPU_ENABLE (1<<0) // MPU enabled // #define bMPU_REGION_MAX 8 // #define bMPU_REGION_MASK 0x0Ful // #define bMPU_REGION_SHIFT 0 // #define bMPU_REGION_VALID (1<<4) // // #define bMPU_XN (1<<28) // #define bMPU_AP_SHIFT 24 // #define bMPU_AP_MASK 7 // #define bMPU_AP_SNN_UNN (0<