|
| 1 | +// File: STM32F205_207_215_217_DBGMCU.ini |
| 2 | +// Version: 1.0.0 |
| 3 | +// Note: refer to STM32F205xx STM32F207xx STM32F215xx STM32F217xx Reference manual (RM0033) |
| 4 | +// refer to STM32F20x, STM32F21x datasheets |
| 5 | + |
| 6 | + |
| 7 | +/* variable to hold register values */ |
| 8 | +define unsigned long DbgMCU_CR; |
| 9 | +define unsigned long DbgMCU_APB1_Fz; |
| 10 | +define unsigned long DbgMCU_APB2_Fz; |
| 11 | + |
| 12 | + |
| 13 | + |
| 14 | +// <<< Use Configuration Wizard in Context Menu >>> |
| 15 | + |
| 16 | +// <h> Debug MCU configuration register (DBGMCU_CR) |
| 17 | +// <i> Reserved bits must be kept at reset value |
| 18 | +// <o.6..7> TRACE_MODE <i> Trace mode |
| 19 | +// <0=> Asynchronous |
| 20 | +// <1=> Synchronous: TRACEDATA Size 1 |
| 21 | +// <2=> Synchronous: TRACEDATA Size 2 |
| 22 | +// <3=> Synchronous: TRACEDATA Size 4 |
| 23 | +// <o.5> TRACE_IOEN <i> Trace I/O enable |
| 24 | +// <o.2> DBG_STANDBY <i> Debug standby mode |
| 25 | +// <o.1> DBG_STOP <i> Debug stop mode |
| 26 | +// <o.0> DBG_SLEEP <i> Debug sleep mode |
| 27 | +// </h> |
| 28 | +DbgMCU_CR = 0x00000007; |
| 29 | + |
| 30 | +// <h> Debug MCU APB1 freeze register (DBGMCU_APB1_FZ) |
| 31 | +// <i> Reserved bits must be kept at reset value |
| 32 | +// <o.26> DBG_CAN2_STOP <i> Debug CAN2 stopped when core is halted |
| 33 | +// <o.25> DBG_CAN1_STOP <i> Debug CAN2 stopped when core is halted |
| 34 | +// <o.23> DBG_I2C3_SMBUS_TIMEOUT <i> SMBUS timeout mode stopped when core is halted |
| 35 | +// <o.22> DBG_I2C2_SMBUS_TIMEOUT <i> SMBUS timeout mode stopped when core is halted |
| 36 | +// <o.21> DBG_I2C1_SMBUS_TIMEOUT <i> SMBUS timeout mode stopped when core is halted |
| 37 | +// <o.12> DBG_IWDG_STOP <i> Debug independent watchdog stopped when core is halted |
| 38 | +// <o.11> DBG_WWDG_STOP <i> Debug window watchdog stopped when core is halted |
| 39 | +// <o.10> DBG_RTC_STOP <i> RTC stopped when core is halted |
| 40 | +// <o.8> DBG_TIM14_STOP <i> TIM14 counter stopped when core is halted |
| 41 | +// <o.7> DBG_TIM13_STOP <i> TIM13 counter stopped when core is halted |
| 42 | +// <o.6> DBG_TIM12_STOP <i> TIM12 counter stopped when core is halted |
| 43 | +// <o.5> DBG_TIM7_STOP <i> TIM7 counter stopped when core is halted |
| 44 | +// <o.4> DBG_TIM6_STOP <i> TIM6 counter stopped when core is halted |
| 45 | +// <o.3> DBG_TIM5_STOP <i> TIM5 counter stopped when core is halted |
| 46 | +// <o.2> DBG_TIM4_STOP <i> TIM4 counter stopped when core is halted |
| 47 | +// <o.1> DBG_TIM3_STOP <i> TIM3 counter stopped when core is halted |
| 48 | +// <o.0> DBG_TIM2_STOP <i> TIM2 counter stopped when core is halted |
| 49 | +// </h> |
| 50 | +DbgMCU_APB1_Fz = 0x00000000; |
| 51 | + |
| 52 | +// <h> Debug MCU APB2 freeze register (DBGMCU_APB2_FZ) |
| 53 | +// <i> Reserved bits must be kept at reset value |
| 54 | +// <o.18> DBG_TIM11_STOP <i> TIM11 counter stopped when core is halted |
| 55 | +// <o.17> DBG_TIM10_STOP <i> TIM10 counter stopped when core is halted |
| 56 | +// <o.16> DBG_TIM9_STOP <i> TIM9 counter stopped when core is halted |
| 57 | +// <o.1> DBG_TIM8_STOP <i> TIM8 counter stopped when core is halted |
| 58 | +// <o.0> DBG_TIM1_STOP <i> TIM1 counter stopped when core is halted |
| 59 | +// </h> |
| 60 | +DbgMCU_APB2_Fz = 0x00000000; |
| 61 | + |
| 62 | +// <h> TPIU Pin Routing |
| 63 | +// <i> TRACECLK: Pin PE2 |
| 64 | +// <i> TRACED[0]: Pin PE3 |
| 65 | +// <i> TRACED[1]: Pin PE4 |
| 66 | +// <i> TRACED[2]: Pin PE5 |
| 67 | +// <i> TRACED[3]: Pin PE6 |
| 68 | +// </h> |
| 69 | + |
| 70 | +// <<< end of configuration section >>> |
| 71 | + |
| 72 | + |
| 73 | +/*---------------------------------------------------------------------------- |
| 74 | + Setup_TracePins() configure the used trace pins |
| 75 | + *----------------------------------------------------------------------------*/ |
| 76 | +FUNC void Setup_TracePins (unsigned char trace_mode) { |
| 77 | + |
| 78 | + if (trace_mode == 0) { /* asynchronous mode */ |
| 79 | + /* configure SWO (PB3) */ |
| 80 | + _WDWORD(0x40023830, ( _RDWORD(0x40023830) | 0x00000002) ); // RCC_AHB1ENR: IO port B clock enable |
| 81 | + _WDWORD(0x40020400, ((_RDWORD(0x40020400) & ~0x000000C0) | 0x00000080) ); // GPIOx_MODER: Set Mode (Alternate Function) |
| 82 | + _WDWORD(0x40020408, ((_RDWORD(0x40020408) ) | 0x000000C0) ); // GPIOx_OSPEEDR: Set Speed (Very High Speed) |
| 83 | + _WDWORD(0x4002040C, ((_RDWORD(0x4002040C) & ~0x000000C0) ) ); // GPIOx_PUPDR: Set I/O to no pull-up/pull-down |
| 84 | + _WDWORD(0x40020420, ((_RDWORD(0x40020420) & ~0x0000F000) ) ); // GPIOx_AFRL: Alternate Function to AF0 |
| 85 | + } |
| 86 | + else { /* synchronous mode */ |
| 87 | + /* configure TRACECLK (PE2) */ |
| 88 | + _WDWORD(0x40023830, ( _RDWORD(0x40023830) | 0x00000010) ); // RCC_AHB1ENR: IO port E clock enable |
| 89 | + _WDWORD(0x40021000, ((_RDWORD(0x40021000) & ~0x00000030) | 0x00000020) ); // GPIOx_MODER: Set Mode (Alternate Function) |
| 90 | + _WDWORD(0x40021008, ((_RDWORD(0x40021008) ) | 0x00000030) ); // GPIOx_OSPEEDR: Set Speed (Very High Speed) |
| 91 | + _WDWORD(0x4002100C, ((_RDWORD(0x4002100C) & ~0x00000030) ) ); // GPIOx_PUPDR: Set I/O to no pull-up/pull-down |
| 92 | + _WDWORD(0x40021020, ((_RDWORD(0x40021020) & ~0x00000F00) ) ); // GPIOx_AFRL: Alternate Function to AF0 |
| 93 | + |
| 94 | + switch (trace_mode) { |
| 95 | + case 3: /* TRACEDATA[3..2] */ |
| 96 | + /* configure TRACED3 */ |
| 97 | + /* configure TRACED3 (PE6) */ |
| 98 | + // _WDWORD(0x40023830, ( _RDWORD(0x40023830) | 0x00000010) ); // RCC_AHB1ENR: IO port E clock enable |
| 99 | + _WDWORD(0x40021000, ((_RDWORD(0x40021000) & ~0x00003000) | 0x00002000) ); // GPIOx_MODER: Set Mode (Alternate Function) |
| 100 | + _WDWORD(0x40021008, ((_RDWORD(0x40021008) ) | 0x00003000) ); // GPIOx_OSPEEDR: Set Speed (Very High Speed) |
| 101 | + _WDWORD(0x4002100C, ((_RDWORD(0x4002100C) & ~0x00003000) ) ); // GPIOx_PUPDR: Set I/O to no pull-up/pull-down |
| 102 | + _WDWORD(0x40021020, ((_RDWORD(0x40021020) & ~0x0F000000) ) ); // GPIOx_AFRL: Alternate Function to AF0 |
| 103 | + |
| 104 | + /* configure TRACED2 */ |
| 105 | + /* configure TRACED2 (PE5) */ |
| 106 | + // _WDWORD(0x40023830, ( _RDWORD(0x40023830) | 0x00000010) ); // RCC_AHB1ENR: IO port E clock enable |
| 107 | + _WDWORD(0x40021000, ((_RDWORD(0x40021000) & ~0x00000C00) | 0x00000800) ); // GPIOx_MODER: Set Mode (Alternate Function) |
| 108 | + _WDWORD(0x40021008, ((_RDWORD(0x40021008) ) | 0x00000C00) ); // GPIOx_OSPEEDR: Set Speed (Very High Speed) |
| 109 | + _WDWORD(0x4002100C, ((_RDWORD(0x4002100C) & ~0x00000C00) ) ); // GPIOx_PUPDR: Set I/O to no pull-up/pull-down |
| 110 | + _WDWORD(0x40021020, ((_RDWORD(0x40021020) & ~0x00F00000) ) ); // GPIOx_AFRL: Alternate Function to AF0 |
| 111 | + |
| 112 | + case 2: /* TRACEDATA[1] */ |
| 113 | + /* configure TRACED1 */ |
| 114 | + /* configure TRACED1 (PE4) */ |
| 115 | + // _WDWORD(0x40023830, ( _RDWORD(0x40023830) | 0x00000010) ); // RCC_AHB1ENR: IO port E clock enable |
| 116 | + _WDWORD(0x40021000, ((_RDWORD(0x40021000) & ~0x00000300) | 0x00000200) ); // GPIOx_MODER: Set Mode (Alternate Function) |
| 117 | + _WDWORD(0x40021008, ((_RDWORD(0x40021008) ) | 0x00000300) ); // GPIOx_OSPEEDR: Set Speed (Very High Speed) |
| 118 | + _WDWORD(0x4002100C, ((_RDWORD(0x4002100C) & ~0x00000300) ) ); // GPIOx_PUPDR: Set I/O to no pull-up/pull-down |
| 119 | + _WDWORD(0x40021020, ((_RDWORD(0x40021020) & ~0x000F0000) ) ); // GPIOx_AFRL: Alternate Function to AF0 |
| 120 | + |
| 121 | + case 1: /* TRACEDATA[0] */ |
| 122 | + /* configure TRACED0 (PE3) */ |
| 123 | + // _WDWORD(0x40023830, ( _RDWORD(0x40023830) | 0x00000010) ); // RCC_AHB1ENR: IO port E clock enable |
| 124 | + _WDWORD(0x40021000, ((_RDWORD(0x40021000) & ~0x000000C0) | 0x00000080) ); // GPIOx_MODER: Set Mode (Alternate Function) |
| 125 | + _WDWORD(0x40021008, ((_RDWORD(0x40021008) ) | 0x000000C0) ); // GPIOx_OSPEEDR: Set Speed (Very High Speed) |
| 126 | + _WDWORD(0x4002100C, ((_RDWORD(0x4002100C) & ~0x000000C0) ) ); // GPIOx_PUPDR: Set I/O to no pull-up/pull-down |
| 127 | + _WDWORD(0x40021020, ((_RDWORD(0x40021020) & ~0x0000F000) ) ); // GPIOx_AFRL: Alternate Function to AF0 |
| 128 | + break; |
| 129 | + } |
| 130 | + } |
| 131 | + |
| 132 | +} |
| 133 | + |
| 134 | +/*---------------------------------------------------------------------------- |
| 135 | + Setup_DBGMCU() configure DBGMCU registers |
| 136 | + *----------------------------------------------------------------------------*/ |
| 137 | +FUNC void Setup_DBGMCU (void) { |
| 138 | + |
| 139 | + if (DbgMCU_CR & (1 << 5)){ |
| 140 | + Setup_TracePins (((DbgMCU_CR >> 6) & 3)); |
| 141 | + } |
| 142 | + |
| 143 | + _WDWORD(0xE0042004, DbgMCU_CR); // Set DBGMCU_CR |
| 144 | + _WDWORD(0xE0042008, DbgMCU_APB1_Fz); // Set DBGMCU_APB1_FZ |
| 145 | + _WDWORD(0xE004200C, DbgMCU_APB2_Fz); // Set DBGMCU_APB2_FZ |
| 146 | +} |
| 147 | + |
| 148 | + |
| 149 | +/*---------------------------------------------------------------------------- |
| 150 | + OnResetExec() Executed after reset via uVision's 'Reset'-button |
| 151 | + *----------------------------------------------------------------------------*/ |
| 152 | +FUNC void OnResetExec (void) { |
| 153 | + Setup_DBGMCU(); |
| 154 | +} |
| 155 | +
|
| 156 | +Setup_DBGMCU(); // Debugger Setup |
0 commit comments