Vehicle Control Unit 0.01
This is the c library for controlling the car.
Loading...
Searching...
No Matches
stm32f7xx_it.c
Go to the documentation of this file.
1/* USER CODE BEGIN Header */
18/* USER CODE END Header */
19
20/* Includes ------------------------------------------------------------------*/
21#include "main.h"
22#include "stm32f7xx_it.h"
23/* Private includes ----------------------------------------------------------*/
24/* USER CODE BEGIN Includes */
25#include "../Inc/Sensors/AnalogSensor.h"
26#include "../Inc/Sensors/DigitalSensor.h"
27#include "../Inc/Outputs/DigitalOutput.h"
28/* USER CODE END Includes */
29
30/* Private typedef -----------------------------------------------------------*/
31/* USER CODE BEGIN TD */
32
33/* USER CODE END TD */
34
35/* Private define ------------------------------------------------------------*/
36/* USER CODE BEGIN PD */
37
38/* USER CODE END PD */
39
40/* Private macro -------------------------------------------------------------*/
41/* USER CODE BEGIN PM */
42
43/* USER CODE END PM */
44
45/* Private variables ---------------------------------------------------------*/
46/* USER CODE BEGIN PV */
47// Receive message buffers
48CAN_RxHeaderTypeDef RxHeader1;
49CAN_RxHeaderTypeDef RxHeader2;
50uint8_t RxData1[8];
51uint8_t RxData2[8];
52/* USER CODE END PV */
53
54/* Private function prototypes -----------------------------------------------*/
55/* USER CODE BEGIN PFP */
56
57/* USER CODE END PFP */
58
59/* Private user code ---------------------------------------------------------*/
60/* USER CODE BEGIN 0 */
61
62/* USER CODE END 0 */
63
64/* External variables --------------------------------------------------------*/
65extern DMA_HandleTypeDef hdma_adc1;
66extern DMA_HandleTypeDef hdma_adc2;
67extern DMA_HandleTypeDef hdma_adc3;
68extern CAN_HandleTypeDef hcan1;
69extern CAN_HandleTypeDef hcan2;
70extern CAN_HandleTypeDef hcan3;
71extern DMA_HandleTypeDef hdma_dac1;
72extern DMA_HandleTypeDef hdma_dac2;
73extern TIM_HandleTypeDef htim2;
74/* USER CODE BEGIN EV */
75
76/* USER CODE END EV */
77
78/******************************************************************************/
79/* Cortex-M7 Processor Interruption and Exception Handlers */
80/******************************************************************************/
84void NMI_Handler(void)
85{
86 /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
87
88 /* USER CODE END NonMaskableInt_IRQn 0 */
89 /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
90 while (1)
91 {
92 }
93 /* USER CODE END NonMaskableInt_IRQn 1 */
94}
95
100{
101 /* USER CODE BEGIN HardFault_IRQn 0 */
102
103 /* USER CODE END HardFault_IRQn 0 */
104 while (1)
105 {
106 /* USER CODE BEGIN W1_HardFault_IRQn 0 */
107 /* USER CODE END W1_HardFault_IRQn 0 */
108 }
109}
110
115{
116 /* USER CODE BEGIN MemoryManagement_IRQn 0 */
117
118 /* USER CODE END MemoryManagement_IRQn 0 */
119 while (1)
120 {
121 /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
122 /* USER CODE END W1_MemoryManagement_IRQn 0 */
123 }
124}
125
130{
131 /* USER CODE BEGIN BusFault_IRQn 0 */
132
133 /* USER CODE END BusFault_IRQn 0 */
134 while (1)
135 {
136 /* USER CODE BEGIN W1_BusFault_IRQn 0 */
137 /* USER CODE END W1_BusFault_IRQn 0 */
138 }
139}
140
145{
146 /* USER CODE BEGIN UsageFault_IRQn 0 */
147
148 /* USER CODE END UsageFault_IRQn 0 */
149 while (1)
150 {
151 /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
152 /* USER CODE END W1_UsageFault_IRQn 0 */
153 }
154}
155
159void SVC_Handler(void)
160{
161 /* USER CODE BEGIN SVCall_IRQn 0 */
162
163 /* USER CODE END SVCall_IRQn 0 */
164 /* USER CODE BEGIN SVCall_IRQn 1 */
165
166 /* USER CODE END SVCall_IRQn 1 */
167}
168
173{
174 /* USER CODE BEGIN DebugMonitor_IRQn 0 */
175
176 /* USER CODE END DebugMonitor_IRQn 0 */
177 /* USER CODE BEGIN DebugMonitor_IRQn 1 */
178
179 /* USER CODE END DebugMonitor_IRQn 1 */
180}
181
186{
187 /* USER CODE BEGIN PendSV_IRQn 0 */
188
189 /* USER CODE END PendSV_IRQn 0 */
190 /* USER CODE BEGIN PendSV_IRQn 1 */
191
192 /* USER CODE END PendSV_IRQn 1 */
193}
194
199{
200 /* USER CODE BEGIN SysTick_IRQn 0 */
201
202 /* USER CODE END SysTick_IRQn 0 */
203 HAL_IncTick();
204 /* USER CODE BEGIN SysTick_IRQn 1 */
205
206 /* USER CODE END SysTick_IRQn 1 */
207}
208
209/******************************************************************************/
210/* STM32F7xx Peripheral Interrupt Handlers */
211/* Add here the Interrupt Handlers for the used peripherals. */
212/* For the available peripheral interrupt handler names, */
213/* please refer to the startup file (startup_stm32f7xx.s). */
214/******************************************************************************/
215
220{
221 /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */
222
223 /* USER CODE END DMA1_Stream5_IRQn 0 */
224 HAL_DMA_IRQHandler(&hdma_dac1);
225 /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */
226
227 /* USER CODE END DMA1_Stream5_IRQn 1 */
228}
229
234{
235 /* USER CODE BEGIN DMA1_Stream6_IRQn 0 */
236
237 /* USER CODE END DMA1_Stream6_IRQn 0 */
238 HAL_DMA_IRQHandler(&hdma_dac2);
239 /* USER CODE BEGIN DMA1_Stream6_IRQn 1 */
240
241 /* USER CODE END DMA1_Stream6_IRQn 1 */
242}
243
248{
249 /* USER CODE BEGIN CAN1_RX0_IRQn 0 */
250
251 /* USER CODE END CAN1_RX0_IRQn 0 */
252 HAL_CAN_IRQHandler(&hcan1);
253 /* USER CODE BEGIN CAN1_RX0_IRQn 1 */
254
255 /* USER CODE END CAN1_RX0_IRQn 1 */
256}
257
262{
263 /* USER CODE BEGIN TIM2_IRQn 0 */
264
265 /* USER CODE END TIM2_IRQn 0 */
266 HAL_TIM_IRQHandler(&htim2);
267 /* USER CODE BEGIN TIM2_IRQn 1 */
268
269 /* USER CODE END TIM2_IRQn 1 */
270}
271
276{
277 /* USER CODE BEGIN DMA2_Stream0_IRQn 0 */
278
279 /* USER CODE END DMA2_Stream0_IRQn 0 */
280 HAL_DMA_IRQHandler(&hdma_adc1);
281 /* USER CODE BEGIN DMA2_Stream0_IRQn 1 */
282
283 /* USER CODE END DMA2_Stream0_IRQn 1 */
284}
285
290{
291 /* USER CODE BEGIN DMA2_Stream1_IRQn 0 */
292
293 /* USER CODE END DMA2_Stream1_IRQn 0 */
294 HAL_DMA_IRQHandler(&hdma_adc3);
295 /* USER CODE BEGIN DMA2_Stream1_IRQn 1 */
296
297 /* USER CODE END DMA2_Stream1_IRQn 1 */
298}
299
304{
305 /* USER CODE BEGIN DMA2_Stream2_IRQn 0 */
306
307 /* USER CODE END DMA2_Stream2_IRQn 0 */
308 HAL_DMA_IRQHandler(&hdma_adc2);
309 /* USER CODE BEGIN DMA2_Stream2_IRQn 1 */
310
311 /* USER CODE END DMA2_Stream2_IRQn 1 */
312}
313
318{
319 /* USER CODE BEGIN CAN2_RX0_IRQn 0 */
320
321 /* USER CODE END CAN2_RX0_IRQn 0 */
322 HAL_CAN_IRQHandler(&hcan2);
323 /* USER CODE BEGIN CAN2_RX0_IRQn 1 */
324
325 /* USER CODE END CAN2_RX0_IRQn 1 */
326}
327
332{
333 /* USER CODE BEGIN CAN3_RX0_IRQn 0 */
334
335 /* USER CODE END CAN3_RX0_IRQn 0 */
336 HAL_CAN_IRQHandler(&hcan3);
337 /* USER CODE BEGIN CAN3_RX0_IRQn 1 */
338
339 /* USER CODE END CAN3_RX0_IRQn 1 */
340}
341
342/* USER CODE BEGIN 1 */
343volatile uint32_t timer_flag = 0;
344
345void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
346{
347 if (htim->Instance == TIM1)
348 {
349 timer_flag++;
350 } else if (htim->Instance == TIM2) {
351 // OUTPUTS
352 // D10
353 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, digital_out_buffer[0]);
354 // D9
355 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, digital_out_buffer[1]);
356 // D8
357 HAL_GPIO_WritePin(GPIOF, GPIO_PIN_12, digital_out_buffer[2]);
358 // D7
359 HAL_GPIO_WritePin(GPIOF, GPIO_PIN_13, digital_out_buffer[3]);
360 // D6
361 HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9 , digital_out_buffer[4]);
362 // D5
363 HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, digital_out_buffer[5]);
364 // D4 for I2C
365 // HAL_GPIO_WritePin(GPIOF, GPIO_PIN_14, digital_out_buffer[6]);
366 // D3
367 HAL_GPIO_WritePin(GPIOE, GPIO_PIN_13, digital_out_buffer[6]);
368 // D2
369 // HAL_GPIO_WritePin(GPIOF, GPIO_PIN_15, digital_out_buffer[8]);
370 // D1
371 // HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, digital_out_buffer[9]);
372 // D0
373 HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9, digital_out_buffer[7]);
374
375 // INPUTS
376 // D42
377 digital_in_buffer[0] = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_8);
378 // D41
379 digital_in_buffer[1] = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_7);
380 // D40
381 digital_in_buffer[2] = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_10);
382 }
383}
384
385// Polling for sending CAN messages
386int send_CAN_message_helper(CANBus bus, CAN_TxHeaderTypeDef *TxHeader, uint8_t *data)
387{
388 uint32_t mailbox;
389 if (bus == CAN_1) {
390 if (HAL_CAN_AddTxMessage(&hcan1, TxHeader, data, &mailbox) != HAL_OK) {
391 uint32_t error = HAL_CAN_GetError(&hcan1);
392 printf("CAN1 Transmission Error: %lx\n", error);
393 return -1;
394 }
395 } else if (bus == CAN_2) {
396 if (HAL_CAN_AddTxMessage(&hcan2, TxHeader, data, &mailbox) != HAL_OK) {
397 uint32_t error = HAL_CAN_GetError(&hcan2);
398 printf("CAN2 Transmission Error: %lx\n", error);
399 return -1;
400 }
401 } else {
402 return -1;
403 }
404 return 0;
405}
406
407// Callback for receiving CAN messages
408void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
409{
410 if (hcan == &hcan1) {
411 HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader1, RxData1);
413 } else if (hcan == &hcan2) {
414 HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader2, RxData2);
416 }
417}
418
419// Callback for ADC conversion complete
420void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) {
421 if (hadc == &hadc1) {
423 } else if (hadc == &hadc2) {
425 } else if (hadc == &hadc3) {
427 }
428}
429
430/* USER CODE END 1 */
ADC_HandleTypeDef hadc1
Definition: main.c:60
uint32_t adc3_buffer[8]
Definition: main.c:115
void ProcessADCData(uint32_t *adc1_buffer, uint32_t *adc2_buffer, uint32_t *adc3_buffer)
Processes ADC data from all three ADCs and stores it in the circular buffer.
Definition: AnalogSensor.c:58
uint32_t adc1_buffer[7]
Definition: main.c:113
ADC_HandleTypeDef hadc3
Definition: AnalogSensor.h:68
ADC_HandleTypeDef hadc2
Definition: AnalogSensor.h:68
uint32_t adc2_buffer[7]
Definition: main.c:114
CANBus
Definition: Can.h:98
@ CAN_1
Definition: Can.h:99
@ CAN_2
Definition: Can.h:100
void receive_CAN_message(CAN_RxHeaderTypeDef *header, uint8_t *data, CANBus bus)
Receives a CAN message.
Definition: Can.c:112
uint8_t digital_out_buffer[NUM_DIGITAL_OUTPUTS]
Definition: main.c:118
uint8_t digital_in_buffer[NUM_DIGITAL_INPUTS]
Definition: main.c:119
: Header for main.c file. This file contains the common defines of the application.
DMA_HandleTypeDef hdma_dac1
Definition: main.c:72
uint8_t RxData1[8]
Definition: stm32f7xx_it.c:50
CAN_HandleTypeDef hcan1
Definition: main.c:67
volatile uint32_t timer_flag
Definition: stm32f7xx_it.c:343
DMA_HandleTypeDef hdma_adc1
Definition: main.c:63
void UsageFault_Handler(void)
This function handles Undefined instruction or illegal state.
Definition: stm32f7xx_it.c:144
int send_CAN_message_helper(CANBus bus, CAN_TxHeaderTypeDef *TxHeader, uint8_t *data)
Definition: stm32f7xx_it.c:386
void HardFault_Handler(void)
This function handles Hard fault interrupt.
Definition: stm32f7xx_it.c:99
TIM_HandleTypeDef htim2
Definition: main.c:82
uint8_t RxData2[8]
Definition: stm32f7xx_it.c:51
void MemManage_Handler(void)
This function handles Memory management fault.
Definition: stm32f7xx_it.c:114
DMA_HandleTypeDef hdma_adc3
Definition: AnalogSensor.h:69
void TIM2_IRQHandler(void)
This function handles TIM2 global interrupt.
Definition: stm32f7xx_it.c:261
void SVC_Handler(void)
This function handles System service call via SWI instruction.
Definition: stm32f7xx_it.c:159
void CAN1_RX0_IRQHandler(void)
This function handles CAN1 RX0 interrupts.
Definition: stm32f7xx_it.c:247
void PendSV_Handler(void)
This function handles Pendable request for system service.
Definition: stm32f7xx_it.c:185
void NMI_Handler(void)
This function handles Non maskable interrupt.
Definition: stm32f7xx_it.c:84
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
Definition: stm32f7xx_it.c:408
CAN_RxHeaderTypeDef RxHeader1
Definition: stm32f7xx_it.c:48
void DMA2_Stream2_IRQHandler(void)
This function handles DMA2 stream2 global interrupt.
Definition: stm32f7xx_it.c:303
void BusFault_Handler(void)
This function handles Pre-fetch fault, memory access fault.
Definition: stm32f7xx_it.c:129
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
Definition: stm32f7xx_it.c:345
CAN_RxHeaderTypeDef RxHeader2
Definition: stm32f7xx_it.c:49
void DMA1_Stream6_IRQHandler(void)
This function handles DMA1 stream6 global interrupt.
Definition: stm32f7xx_it.c:233
DMA_HandleTypeDef hdma_dac2
Definition: main.c:73
void DMA2_Stream0_IRQHandler(void)
This function handles DMA2 stream0 global interrupt.
Definition: stm32f7xx_it.c:275
void SysTick_Handler(void)
This function handles System tick timer.
Definition: stm32f7xx_it.c:198
void CAN3_RX0_IRQHandler(void)
This function handles CAN3 RX0 interrupt.
Definition: stm32f7xx_it.c:331
CAN_HandleTypeDef hcan2
Definition: main.c:68
CAN_HandleTypeDef hcan3
Definition: main.c:69
void CAN2_RX0_IRQHandler(void)
This function handles CAN2 RX0 interrupts.
Definition: stm32f7xx_it.c:317
void DMA1_Stream5_IRQHandler(void)
This function handles DMA1 stream5 global interrupt.
Definition: stm32f7xx_it.c:219
DMA_HandleTypeDef hdma_adc2
Definition: AnalogSensor.h:69
void DMA2_Stream1_IRQHandler(void)
This function handles DMA2 stream1 global interrupt.
Definition: stm32f7xx_it.c:289
void DebugMon_Handler(void)
This function handles Debug monitor.
Definition: stm32f7xx_it.c:172
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
Definition: stm32f7xx_it.c:420
This file contains the headers of the interrupt handlers.