Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@3:a0ce23fb69d8, 2018-09-05 (annotated)
- Committer:
- geryyy
- Date:
- Wed Sep 05 17:31:20 2018 +0000
- Revision:
- 3:a0ce23fb69d8
- Parent:
- 2:7d25b12db2bc
author and date added
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| geryyy | 0:1df541c54e25 | 1 | #include "mbed.h" |
| geryyy | 0:1df541c54e25 | 2 | #include "stm32f7xx_hal.h" |
| geryyy | 0:1df541c54e25 | 3 | |
| geryyy | 3:a0ce23fb69d8 | 4 | /* author: Gerald Ebmer |
| geryyy | 3:a0ce23fb69d8 | 5 | * date: 26.06.2018 |
| geryyy | 3:a0ce23fb69d8 | 6 | */ |
| geryyy | 3:a0ce23fb69d8 | 7 | |
| geryyy | 2:7d25b12db2bc | 8 | DigitalOut myled(LED1); |
| geryyy | 2:7d25b12db2bc | 9 | uint16_t uhPrescalerValue; |
| geryyy | 2:7d25b12db2bc | 10 | |
| geryyy | 2:7d25b12db2bc | 11 | uint16_t TPeriod; |
| geryyy | 2:7d25b12db2bc | 12 | uint16_t TPulse; |
| geryyy | 2:7d25b12db2bc | 13 | uint16_t TPulseframe; |
| geryyy | 0:1df541c54e25 | 14 | |
| geryyy | 2:7d25b12db2bc | 15 | TIM_HandleTypeDef htim3; |
| geryyy | 2:7d25b12db2bc | 16 | TIM_HandleTypeDef htim4; |
| geryyy | 2:7d25b12db2bc | 17 | static void MX_GPIO_Init(void); |
| geryyy | 2:7d25b12db2bc | 18 | static void MX_TIM3_Init(void); |
| geryyy | 2:7d25b12db2bc | 19 | static void MX_TIM4_Init(void); |
| geryyy | 2:7d25b12db2bc | 20 | |
| geryyy | 2:7d25b12db2bc | 21 | void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); |
| geryyy | 0:1df541c54e25 | 22 | |
| geryyy | 2:7d25b12db2bc | 23 | void _Error_Handler(char *file, int line); |
| geryyy | 0:1df541c54e25 | 24 | |
| geryyy | 0:1df541c54e25 | 25 | int main() { |
| geryyy | 2:7d25b12db2bc | 26 | uint32_t TimerCLK = 10000000; |
| geryyy | 2:7d25b12db2bc | 27 | uhPrescalerValue = (uint32_t)(((SystemCoreClock/ 2) / TimerCLK) - 1); |
| geryyy | 0:1df541c54e25 | 28 | |
| geryyy | 2:7d25b12db2bc | 29 | /* pulse parameter |
| geryyy | 2:7d25b12db2bc | 30 | * __ __ |
| geryyy | 2:7d25b12db2bc | 31 | * TIM3 Ch1 (PB4): | |_______________________| |
| geryyy | 2:7d25b12db2bc | 32 | * : : __ : |
| geryyy | 2:7d25b12db2bc | 33 | * TIM4 Ch1 (PB6): :__:___________| |________:__ |
| geryyy | 3:a0ce23fb69d8 | 34 | * :TPulse_s : : |
| geryyy | 3:a0ce23fb69d8 | 35 | * : TPulseframe_s : |
| geryyy | 2:7d25b12db2bc | 36 | * : TPeriod_s : |
| geryyy | 2:7d25b12db2bc | 37 | */ |
| geryyy | 2:7d25b12db2bc | 38 | |
| geryyy | 2:7d25b12db2bc | 39 | float Tclk_s = 1/ (float)TimerCLK; |
| geryyy | 2:7d25b12db2bc | 40 | float TPulse_s = 0.000001; /* Tclk_s .. TPeriod_s 0.1 e.g. 1us */ |
| geryyy | 3:a0ce23fb69d8 | 41 | float TPulseframe_s = 0.0005; /* TPulse_s .. TPeriod_s 0.1 e.g. 10us */ |
| geryyy | 3:a0ce23fb69d8 | 42 | float TPeriod_s = 0.001; /* 0.0001 .. 0.0065 s */ |
| geryyy | 2:7d25b12db2bc | 43 | |
| geryyy | 2:7d25b12db2bc | 44 | /* timer register values */ |
| geryyy | 2:7d25b12db2bc | 45 | TPulse = (uint16_t)(TPulse_s / Tclk_s) + 1; |
| geryyy | 2:7d25b12db2bc | 46 | TPulseframe = (uint16_t)(TPulseframe_s / Tclk_s + 1); |
| geryyy | 2:7d25b12db2bc | 47 | TPeriod = (uint16_t)(TPeriod_s / Tclk_s) + 1; |
| geryyy | 2:7d25b12db2bc | 48 | |
| geryyy | 2:7d25b12db2bc | 49 | printf("HV Pulsgenerator V0.1\nGerald Ebmer 2018\n\n"); |
| geryyy | 2:7d25b12db2bc | 50 | printf("TPulse: %d\nTPulseframe: %d\nTPeriod: %d\n\n",TPulse, TPulseframe, TPeriod); |
| geryyy | 2:7d25b12db2bc | 51 | |
| geryyy | 0:1df541c54e25 | 52 | |
| geryyy | 2:7d25b12db2bc | 53 | |
| geryyy | 2:7d25b12db2bc | 54 | |
| geryyy | 2:7d25b12db2bc | 55 | MX_GPIO_Init(); |
| geryyy | 2:7d25b12db2bc | 56 | MX_TIM3_Init(); |
| geryyy | 2:7d25b12db2bc | 57 | MX_TIM4_Init(); |
| geryyy | 2:7d25b12db2bc | 58 | HAL_TIM_Base_MspInit(&htim3); |
| geryyy | 2:7d25b12db2bc | 59 | HAL_TIM_Base_MspInit(&htim4); |
| geryyy | 2:7d25b12db2bc | 60 | |
| geryyy | 2:7d25b12db2bc | 61 | HAL_TIM_Base_Start(&htim4); |
| geryyy | 2:7d25b12db2bc | 62 | HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); |
| geryyy | 2:7d25b12db2bc | 63 | HAL_TIM_OnePulse_Start(&htim4, TIM_CHANNEL_1); |
| geryyy | 2:7d25b12db2bc | 64 | // Master |
| geryyy | 2:7d25b12db2bc | 65 | HAL_TIM_Base_Start(&htim3); |
| geryyy | 2:7d25b12db2bc | 66 | HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); |
| geryyy | 2:7d25b12db2bc | 67 | /* TIM3 Channel 1: PB4 |
| geryyy | 2:7d25b12db2bc | 68 | TIM4 Channel 1: PB6 |
| geryyy | 2:7d25b12db2bc | 69 | */ |
| geryyy | 0:1df541c54e25 | 70 | while(1) { |
| geryyy | 0:1df541c54e25 | 71 | myled = !myled; |
| geryyy | 0:1df541c54e25 | 72 | wait(1); |
| geryyy | 0:1df541c54e25 | 73 | } |
| geryyy | 0:1df541c54e25 | 74 | } |
| geryyy | 0:1df541c54e25 | 75 | |
| geryyy | 2:7d25b12db2bc | 76 | /* TIM3 init function */ |
| geryyy | 2:7d25b12db2bc | 77 | static void MX_TIM3_Init(void) |
| geryyy | 0:1df541c54e25 | 78 | { |
| geryyy | 2:7d25b12db2bc | 79 | |
| geryyy | 2:7d25b12db2bc | 80 | TIM_ClockConfigTypeDef sClockSourceConfig; |
| geryyy | 2:7d25b12db2bc | 81 | TIM_MasterConfigTypeDef sMasterConfig; |
| geryyy | 2:7d25b12db2bc | 82 | TIM_OC_InitTypeDef sConfigOC; |
| geryyy | 2:7d25b12db2bc | 83 | |
| geryyy | 2:7d25b12db2bc | 84 | htim3.Instance = TIM3; |
| geryyy | 2:7d25b12db2bc | 85 | htim3.Init.Prescaler = uhPrescalerValue; |
| geryyy | 2:7d25b12db2bc | 86 | htim3.Init.CounterMode = TIM_COUNTERMODE_UP; |
| geryyy | 2:7d25b12db2bc | 87 | htim3.Init.Period = TPeriod; |
| geryyy | 2:7d25b12db2bc | 88 | htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
| geryyy | 2:7d25b12db2bc | 89 | htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
| geryyy | 2:7d25b12db2bc | 90 | if (HAL_TIM_Base_Init(&htim3) != HAL_OK) |
| geryyy | 2:7d25b12db2bc | 91 | { |
| geryyy | 2:7d25b12db2bc | 92 | _Error_Handler(__FILE__, __LINE__); |
| geryyy | 2:7d25b12db2bc | 93 | } |
| geryyy | 2:7d25b12db2bc | 94 | |
| geryyy | 2:7d25b12db2bc | 95 | sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; |
| geryyy | 2:7d25b12db2bc | 96 | if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) |
| geryyy | 2:7d25b12db2bc | 97 | { |
| geryyy | 2:7d25b12db2bc | 98 | _Error_Handler(__FILE__, __LINE__); |
| geryyy | 2:7d25b12db2bc | 99 | } |
| geryyy | 2:7d25b12db2bc | 100 | |
| geryyy | 2:7d25b12db2bc | 101 | if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) |
| geryyy | 2:7d25b12db2bc | 102 | { |
| geryyy | 2:7d25b12db2bc | 103 | _Error_Handler(__FILE__, __LINE__); |
| geryyy | 2:7d25b12db2bc | 104 | } |
| geryyy | 2:7d25b12db2bc | 105 | |
| geryyy | 2:7d25b12db2bc | 106 | sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; |
| geryyy | 2:7d25b12db2bc | 107 | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; |
| geryyy | 2:7d25b12db2bc | 108 | if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) |
| geryyy | 2:7d25b12db2bc | 109 | { |
| geryyy | 2:7d25b12db2bc | 110 | _Error_Handler(__FILE__, __LINE__); |
| geryyy | 2:7d25b12db2bc | 111 | } |
| geryyy | 0:1df541c54e25 | 112 | |
| geryyy | 2:7d25b12db2bc | 113 | sConfigOC.OCMode = TIM_OCMODE_PWM1; |
| geryyy | 2:7d25b12db2bc | 114 | sConfigOC.Pulse = TPulse; |
| geryyy | 2:7d25b12db2bc | 115 | sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; |
| geryyy | 2:7d25b12db2bc | 116 | sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; |
| geryyy | 2:7d25b12db2bc | 117 | if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) |
| geryyy | 2:7d25b12db2bc | 118 | { |
| geryyy | 2:7d25b12db2bc | 119 | _Error_Handler(__FILE__, __LINE__); |
| geryyy | 2:7d25b12db2bc | 120 | } |
| geryyy | 2:7d25b12db2bc | 121 | |
| geryyy | 2:7d25b12db2bc | 122 | HAL_TIM_MspPostInit(&htim3); |
| geryyy | 2:7d25b12db2bc | 123 | |
| geryyy | 2:7d25b12db2bc | 124 | } |
| geryyy | 2:7d25b12db2bc | 125 | |
| geryyy | 2:7d25b12db2bc | 126 | /* TIM4 init function */ |
| geryyy | 2:7d25b12db2bc | 127 | static void MX_TIM4_Init(void) |
| geryyy | 2:7d25b12db2bc | 128 | { |
| geryyy | 2:7d25b12db2bc | 129 | |
| geryyy | 2:7d25b12db2bc | 130 | TIM_ClockConfigTypeDef sClockSourceConfig; |
| geryyy | 2:7d25b12db2bc | 131 | TIM_SlaveConfigTypeDef sSlaveConfig; |
| geryyy | 2:7d25b12db2bc | 132 | TIM_MasterConfigTypeDef sMasterConfig; |
| geryyy | 2:7d25b12db2bc | 133 | TIM_OC_InitTypeDef sConfigOC; |
| geryyy | 2:7d25b12db2bc | 134 | |
| geryyy | 2:7d25b12db2bc | 135 | htim4.Instance = TIM4; |
| geryyy | 2:7d25b12db2bc | 136 | htim4.Init.Prescaler = uhPrescalerValue; |
| geryyy | 2:7d25b12db2bc | 137 | htim4.Init.CounterMode = TIM_COUNTERMODE_UP; |
| geryyy | 2:7d25b12db2bc | 138 | htim4.Init.Period = TPulseframe; |
| geryyy | 2:7d25b12db2bc | 139 | htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
| geryyy | 2:7d25b12db2bc | 140 | htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
| geryyy | 2:7d25b12db2bc | 141 | if (HAL_TIM_Base_Init(&htim4) != HAL_OK) |
| geryyy | 2:7d25b12db2bc | 142 | { |
| geryyy | 2:7d25b12db2bc | 143 | _Error_Handler(__FILE__, __LINE__); |
| geryyy | 2:7d25b12db2bc | 144 | } |
| geryyy | 2:7d25b12db2bc | 145 | |
| geryyy | 2:7d25b12db2bc | 146 | sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; |
| geryyy | 2:7d25b12db2bc | 147 | if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) |
| geryyy | 2:7d25b12db2bc | 148 | { |
| geryyy | 2:7d25b12db2bc | 149 | _Error_Handler(__FILE__, __LINE__); |
| geryyy | 2:7d25b12db2bc | 150 | } |
| geryyy | 2:7d25b12db2bc | 151 | |
| geryyy | 2:7d25b12db2bc | 152 | if (HAL_TIM_PWM_Init(&htim4) != HAL_OK) |
| geryyy | 2:7d25b12db2bc | 153 | { |
| geryyy | 2:7d25b12db2bc | 154 | _Error_Handler(__FILE__, __LINE__); |
| geryyy | 2:7d25b12db2bc | 155 | } |
| geryyy | 2:7d25b12db2bc | 156 | |
| geryyy | 2:7d25b12db2bc | 157 | if (HAL_TIM_OnePulse_Init(&htim4, TIM_OPMODE_SINGLE) != HAL_OK) |
| geryyy | 2:7d25b12db2bc | 158 | { |
| geryyy | 2:7d25b12db2bc | 159 | _Error_Handler(__FILE__, __LINE__); |
| geryyy | 2:7d25b12db2bc | 160 | } |
| geryyy | 0:1df541c54e25 | 161 | |
| geryyy | 2:7d25b12db2bc | 162 | sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER; |
| geryyy | 2:7d25b12db2bc | 163 | sSlaveConfig.InputTrigger = TIM_TS_ITR2; |
| geryyy | 2:7d25b12db2bc | 164 | if (HAL_TIM_SlaveConfigSynchronization(&htim4, &sSlaveConfig) != HAL_OK) |
| geryyy | 2:7d25b12db2bc | 165 | { |
| geryyy | 2:7d25b12db2bc | 166 | _Error_Handler(__FILE__, __LINE__); |
| geryyy | 2:7d25b12db2bc | 167 | } |
| geryyy | 2:7d25b12db2bc | 168 | |
| geryyy | 2:7d25b12db2bc | 169 | sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; |
| geryyy | 2:7d25b12db2bc | 170 | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; |
| geryyy | 2:7d25b12db2bc | 171 | if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) |
| geryyy | 2:7d25b12db2bc | 172 | { |
| geryyy | 2:7d25b12db2bc | 173 | _Error_Handler(__FILE__, __LINE__); |
| geryyy | 2:7d25b12db2bc | 174 | } |
| geryyy | 2:7d25b12db2bc | 175 | |
| geryyy | 2:7d25b12db2bc | 176 | sConfigOC.OCMode = TIM_OCMODE_PWM1; |
| geryyy | 2:7d25b12db2bc | 177 | sConfigOC.Pulse = TPulseframe - TPulse; |
| geryyy | 2:7d25b12db2bc | 178 | sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW; |
| geryyy | 2:7d25b12db2bc | 179 | sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; |
| geryyy | 2:7d25b12db2bc | 180 | if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) |
| geryyy | 2:7d25b12db2bc | 181 | { |
| geryyy | 2:7d25b12db2bc | 182 | _Error_Handler(__FILE__, __LINE__); |
| geryyy | 2:7d25b12db2bc | 183 | } |
| geryyy | 2:7d25b12db2bc | 184 | |
| geryyy | 2:7d25b12db2bc | 185 | HAL_TIM_MspPostInit(&htim4); |
| geryyy | 2:7d25b12db2bc | 186 | |
| geryyy | 2:7d25b12db2bc | 187 | } |
| geryyy | 2:7d25b12db2bc | 188 | |
| geryyy | 2:7d25b12db2bc | 189 | /** Configure pins as |
| geryyy | 2:7d25b12db2bc | 190 | * Analog |
| geryyy | 2:7d25b12db2bc | 191 | * Input |
| geryyy | 2:7d25b12db2bc | 192 | * Output |
| geryyy | 2:7d25b12db2bc | 193 | * EVENT_OUT |
| geryyy | 2:7d25b12db2bc | 194 | * EXTI |
| geryyy | 2:7d25b12db2bc | 195 | */ |
| geryyy | 2:7d25b12db2bc | 196 | static void MX_GPIO_Init(void) |
| geryyy | 2:7d25b12db2bc | 197 | { |
| geryyy | 2:7d25b12db2bc | 198 | /* GPIO Ports Clock Enable */ |
| geryyy | 2:7d25b12db2bc | 199 | __HAL_RCC_GPIOH_CLK_ENABLE(); |
| geryyy | 2:7d25b12db2bc | 200 | __HAL_RCC_GPIOB_CLK_ENABLE(); |
| geryyy | 2:7d25b12db2bc | 201 | } |
| geryyy | 2:7d25b12db2bc | 202 | |
| geryyy | 0:1df541c54e25 | 203 | |
| geryyy | 2:7d25b12db2bc | 204 | void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) |
| geryyy | 2:7d25b12db2bc | 205 | { |
| geryyy | 2:7d25b12db2bc | 206 | |
| geryyy | 2:7d25b12db2bc | 207 | if(htim_base->Instance==TIM3) |
| geryyy | 2:7d25b12db2bc | 208 | { |
| geryyy | 2:7d25b12db2bc | 209 | /* Peripheral clock enable */ |
| geryyy | 2:7d25b12db2bc | 210 | __HAL_RCC_TIM3_CLK_ENABLE(); |
| geryyy | 2:7d25b12db2bc | 211 | } |
| geryyy | 2:7d25b12db2bc | 212 | else if(htim_base->Instance==TIM4) |
| geryyy | 2:7d25b12db2bc | 213 | { |
| geryyy | 2:7d25b12db2bc | 214 | /* Peripheral clock enable */ |
| geryyy | 2:7d25b12db2bc | 215 | __HAL_RCC_TIM4_CLK_ENABLE(); |
| geryyy | 2:7d25b12db2bc | 216 | } |
| geryyy | 2:7d25b12db2bc | 217 | } |
| geryyy | 0:1df541c54e25 | 218 | |
| geryyy | 2:7d25b12db2bc | 219 | void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) |
| geryyy | 2:7d25b12db2bc | 220 | { |
| geryyy | 2:7d25b12db2bc | 221 | GPIO_InitTypeDef GPIO_InitStruct; |
| geryyy | 2:7d25b12db2bc | 222 | if(htim->Instance==TIM3) |
| geryyy | 2:7d25b12db2bc | 223 | { |
| geryyy | 2:7d25b12db2bc | 224 | /**TIM3 GPIO Configuration |
| geryyy | 2:7d25b12db2bc | 225 | PB4 ------> TIM3_CH1 |
| geryyy | 2:7d25b12db2bc | 226 | */ |
| geryyy | 2:7d25b12db2bc | 227 | GPIO_InitStruct.Pin = GPIO_PIN_4; |
| geryyy | 2:7d25b12db2bc | 228 | GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
| geryyy | 2:7d25b12db2bc | 229 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
| geryyy | 3:a0ce23fb69d8 | 230 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
| geryyy | 2:7d25b12db2bc | 231 | GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; |
| geryyy | 2:7d25b12db2bc | 232 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
| geryyy | 2:7d25b12db2bc | 233 | |
| geryyy | 2:7d25b12db2bc | 234 | } |
| geryyy | 2:7d25b12db2bc | 235 | else if(htim->Instance==TIM4) |
| geryyy | 2:7d25b12db2bc | 236 | { |
| geryyy | 2:7d25b12db2bc | 237 | /**TIM4 GPIO Configuration |
| geryyy | 2:7d25b12db2bc | 238 | PB6 ------> TIM4_CH1 |
| geryyy | 2:7d25b12db2bc | 239 | */ |
| geryyy | 2:7d25b12db2bc | 240 | GPIO_InitStruct.Pin = GPIO_PIN_6; |
| geryyy | 2:7d25b12db2bc | 241 | GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
| geryyy | 2:7d25b12db2bc | 242 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
| geryyy | 3:a0ce23fb69d8 | 243 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
| geryyy | 2:7d25b12db2bc | 244 | GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; |
| geryyy | 2:7d25b12db2bc | 245 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
| geryyy | 2:7d25b12db2bc | 246 | } |
| geryyy | 0:1df541c54e25 | 247 | } |
| geryyy | 0:1df541c54e25 | 248 | |
| geryyy | 0:1df541c54e25 | 249 | |
| geryyy | 0:1df541c54e25 | 250 | /** |
| geryyy | 0:1df541c54e25 | 251 | * @brief This function is executed in case of error occurrence. |
| geryyy | 0:1df541c54e25 | 252 | * @param file: The file name as string. |
| geryyy | 0:1df541c54e25 | 253 | * @param line: The line in file as a number. |
| geryyy | 0:1df541c54e25 | 254 | * @retval None |
| geryyy | 0:1df541c54e25 | 255 | */ |
| geryyy | 2:7d25b12db2bc | 256 | void _Error_Handler(char *file, int line) |
| geryyy | 0:1df541c54e25 | 257 | { |
| geryyy | 0:1df541c54e25 | 258 | fprintf(stderr, "Error in file %s linenr %d!\n",file,line); |
| geryyy | 0:1df541c54e25 | 259 | /* USER CODE BEGIN Error_Handler_Debug */ |
| geryyy | 0:1df541c54e25 | 260 | /* User can add his own implementation to report the HAL error return state */ |
| geryyy | 0:1df541c54e25 | 261 | while(1) |
| geryyy | 0:1df541c54e25 | 262 | { |
| geryyy | 0:1df541c54e25 | 263 | } |
| geryyy | 0:1df541c54e25 | 264 | /* USER CODE END Error_Handler_Debug */ |
| geryyy | 0:1df541c54e25 | 265 | } |