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#include "FreeRTOS.h"
24#include "task.h"
25/* Private includes ----------------------------------------------------------*/
26/* USER CODE BEGIN Includes */
27#include "../Inc/Sensors/AnalogSensor.h"
28#include "../Inc/Sensors/DigitalSensor.h"
29#include "../Inc/Outputs/DigitalOutput.h"
30/* USER CODE END Includes */
31
32/* Private typedef -----------------------------------------------------------*/
33/* USER CODE BEGIN TD */
34
35/* USER CODE END TD */
36
37/* Private define ------------------------------------------------------------*/
38/* USER CODE BEGIN PD */
39
40/* USER CODE END PD */
41
42/* Private macro -------------------------------------------------------------*/
43/* USER CODE BEGIN PM */
44
45/* USER CODE END PM */
46
47/* Private variables ---------------------------------------------------------*/
48/* USER CODE BEGIN PV */
49// Receive message buffers
50CAN_RxHeaderTypeDef RxHeader1;
51CAN_RxHeaderTypeDef RxHeader2;
52uint8_t RxData1[8];
53uint8_t RxData2[8];
54/* USER CODE END PV */
55
56/* Private function prototypes -----------------------------------------------*/
57/* USER CODE BEGIN PFP */
58
59/* USER CODE END PFP */
60
61/* Private user code ---------------------------------------------------------*/
62/* USER CODE BEGIN 0 */
63
64/* USER CODE END 0 */
65
66/* External variables --------------------------------------------------------*/
67extern DMA_HandleTypeDef hdma_adc1;
68extern DMA_HandleTypeDef hdma_adc2;
69extern DMA_HandleTypeDef hdma_adc3;
70extern CAN_HandleTypeDef hcan1;
71extern CAN_HandleTypeDef hcan2;
72extern DMA_HandleTypeDef hdma_dac1;
73extern DMA_HandleTypeDef hdma_dac2;
74extern TIM_HandleTypeDef htim2;
75/* USER CODE BEGIN EV */
76
77/* USER CODE END EV */
78
79/******************************************************************************/
80/* Cortex-M7 Processor Interruption and Exception Handlers */
81/******************************************************************************/
85void NMI_Handler(void)
86{
87 /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
88
89 /* USER CODE END NonMaskableInt_IRQn 0 */
90 /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
91 while (1)
92 {
93 }
94 /* USER CODE END NonMaskableInt_IRQn 1 */
95}
96
101{
102 /* USER CODE BEGIN HardFault_IRQn 0 */
103
104 /* USER CODE END HardFault_IRQn 0 */
105 while (1)
106 {
107 /* USER CODE BEGIN W1_HardFault_IRQn 0 */
108 /* USER CODE END W1_HardFault_IRQn 0 */
109 }
110}
111
116{
117 /* USER CODE BEGIN MemoryManagement_IRQn 0 */
118
119 /* USER CODE END MemoryManagement_IRQn 0 */
120 while (1)
121 {
122 /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
123 /* USER CODE END W1_MemoryManagement_IRQn 0 */
124 }
125}
126
131{
132 /* USER CODE BEGIN BusFault_IRQn 0 */
133
134 /* USER CODE END BusFault_IRQn 0 */
135 while (1)
136 {
137 /* USER CODE BEGIN W1_BusFault_IRQn 0 */
138 /* USER CODE END W1_BusFault_IRQn 0 */
139 }
140}
141
146{
147 /* USER CODE BEGIN UsageFault_IRQn 0 */
148
149 /* USER CODE END UsageFault_IRQn 0 */
150 while (1)
151 {
152 /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
153 /* USER CODE END W1_UsageFault_IRQn 0 */
154 }
155}
156
161{
162 /* USER CODE BEGIN DebugMonitor_IRQn 0 */
163
164 /* USER CODE END DebugMonitor_IRQn 0 */
165 /* USER CODE BEGIN DebugMonitor_IRQn 1 */
166
167 /* USER CODE END DebugMonitor_IRQn 1 */
168}
169
174{
175 /* USER CODE BEGIN SysTick_IRQn 0 */
176
177 /* USER CODE END SysTick_IRQn 0 */
178 HAL_IncTick();
179#if (INCLUDE_xTaskGetSchedulerState == 1 )
180 if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
181 {
182#endif /* INCLUDE_xTaskGetSchedulerState */
183 xPortSysTickHandler();
184#if (INCLUDE_xTaskGetSchedulerState == 1 )
185 }
186#endif /* INCLUDE_xTaskGetSchedulerState */
187 /* USER CODE BEGIN SysTick_IRQn 1 */
188
189 /* USER CODE END SysTick_IRQn 1 */
190}
191
192/******************************************************************************/
193/* STM32F7xx Peripheral Interrupt Handlers */
194/* Add here the Interrupt Handlers for the used peripherals. */
195/* For the available peripheral interrupt handler names, */
196/* please refer to the startup file (startup_stm32f7xx.s). */
197/******************************************************************************/
198
203{
204 /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */
205
206 /* USER CODE END DMA1_Stream5_IRQn 0 */
207 HAL_DMA_IRQHandler(&hdma_dac1);
208 /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */
209
210 /* USER CODE END DMA1_Stream5_IRQn 1 */
211}
212
217{
218 /* USER CODE BEGIN DMA1_Stream6_IRQn 0 */
219
220 /* USER CODE END DMA1_Stream6_IRQn 0 */
221 HAL_DMA_IRQHandler(&hdma_dac2);
222 /* USER CODE BEGIN DMA1_Stream6_IRQn 1 */
223
224 /* USER CODE END DMA1_Stream6_IRQn 1 */
225}
226
231{
232 /* USER CODE BEGIN CAN1_RX0_IRQn 0 */
233
234 /* USER CODE END CAN1_RX0_IRQn 0 */
235 HAL_CAN_IRQHandler(&hcan1);
236 /* USER CODE BEGIN CAN1_RX0_IRQn 1 */
237
238 /* USER CODE END CAN1_RX0_IRQn 1 */
239}
240
245{
246 /* USER CODE BEGIN TIM2_IRQn 0 */
247
248 /* USER CODE END TIM2_IRQn 0 */
249 HAL_TIM_IRQHandler(&htim2);
250 /* USER CODE BEGIN TIM2_IRQn 1 */
251
252 /* USER CODE END TIM2_IRQn 1 */
253}
254
259{
260 /* USER CODE BEGIN DMA2_Stream0_IRQn 0 */
261
262 /* USER CODE END DMA2_Stream0_IRQn 0 */
263 HAL_DMA_IRQHandler(&hdma_adc1);
264 /* USER CODE BEGIN DMA2_Stream0_IRQn 1 */
265
266 /* USER CODE END DMA2_Stream0_IRQn 1 */
267}
268
273{
274 /* USER CODE BEGIN DMA2_Stream1_IRQn 0 */
275
276 /* USER CODE END DMA2_Stream1_IRQn 0 */
277 HAL_DMA_IRQHandler(&hdma_adc3);
278 /* USER CODE BEGIN DMA2_Stream1_IRQn 1 */
279
280 /* USER CODE END DMA2_Stream1_IRQn 1 */
281}
282
287{
288 /* USER CODE BEGIN DMA2_Stream2_IRQn 0 */
289
290 /* USER CODE END DMA2_Stream2_IRQn 0 */
291 HAL_DMA_IRQHandler(&hdma_adc2);
292 /* USER CODE BEGIN DMA2_Stream2_IRQn 1 */
293
294 /* USER CODE END DMA2_Stream2_IRQn 1 */
295}
296
301{
302 /* USER CODE BEGIN CAN2_RX0_IRQn 0 */
303
304 /* USER CODE END CAN2_RX0_IRQn 0 */
305 HAL_CAN_IRQHandler(&hcan2);
306 /* USER CODE BEGIN CAN2_RX0_IRQn 1 */
307
308 /* USER CODE END CAN2_RX0_IRQn 1 */
309}
310
311/* USER CODE BEGIN 1 */
312volatile uint32_t timer_flag = 0;
313
314void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
315{
316 if (htim->Instance == TIM1)
317 {
318 timer_flag++;
319 } else if (htim->Instance == TIM2) {
320 // OUTPUTS
321 // D10
322 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, digital_out_buffer[0]);
323 // D9
324 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, digital_out_buffer[1]);
325 // D8
326 HAL_GPIO_WritePin(GPIOF, GPIO_PIN_12, digital_out_buffer[2]);
327 // D7
328 HAL_GPIO_WritePin(GPIOF, GPIO_PIN_13, digital_out_buffer[3]);
329 // D6
330 HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9 , digital_out_buffer[4]);
331 // D5
332 HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, digital_out_buffer[5]);
333 // D4 for I2C
334 // HAL_GPIO_WritePin(GPIOF, GPIO_PIN_14, digital_out_buffer[6]);
335 // D3
336 HAL_GPIO_WritePin(GPIOE, GPIO_PIN_13, digital_out_buffer[6]);
337 // D2
338 // HAL_GPIO_WritePin(GPIOF, GPIO_PIN_15, digital_out_buffer[8]);
339 // D1
340 // HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, digital_out_buffer[9]);
341 // D0
342 HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9, digital_out_buffer[7]);
343
344 // INPUTS
345 // D42
346 digital_in_buffer[0] = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_8);
347 // D41
348 digital_in_buffer[1] = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_7);
349 // D40
350 digital_in_buffer[2] = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_10);
351 }
352}
353
354// Polling for sending CAN messages
355int send_CAN_message_helper(CANBus bus, CAN_TxHeaderTypeDef *TxHeader, uint8_t *data)
356{
357 uint32_t mailbox;
358 if (bus == CAN_1) {
359 if (HAL_CAN_AddTxMessage(&hcan1, TxHeader, data, &mailbox) != HAL_OK) {
360 uint32_t error = HAL_CAN_GetError(&hcan1);
361 printf("CAN1 Transmission Error: %lx\n", error);
362 return -1;
363 }
364 } else if (bus == CAN_2) {
365 if (HAL_CAN_AddTxMessage(&hcan2, TxHeader, data, &mailbox) != HAL_OK) {
366 uint32_t error = HAL_CAN_GetError(&hcan2);
367 printf("CAN2 Transmission Error: %lx\n", error);
368 return -1;
369 }
370 } else {
371 return -1;
372 }
373 return 0;
374}
375
376// Callback for receiving CAN messages
377void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
378{
379 if (hcan == &hcan1) {
380 HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader1, RxData1);
382 } else if (hcan == &hcan2) {
383 HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader2, RxData2);
385 }
386}
387
388// Callback for ADC conversion complete
389void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) {
390 if (hadc == &hadc1) {
392 } else if (hadc == &hadc2) {
394 } else if (hadc == &hadc3) {
396 }
397}
398
399/* USER CODE END 1 */
ADC_HandleTypeDef hadc1
Definition: main.c:61
uint32_t adc3_buffer[8]
Definition: main.c:125
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:123
ADC_HandleTypeDef hadc3
Definition: AnalogSensor.h:68
ADC_HandleTypeDef hadc2
Definition: AnalogSensor.h:68
uint32_t adc2_buffer[7]
Definition: main.c:124
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:128
uint8_t digital_in_buffer[NUM_DIGITAL_INPUTS]
Definition: main.c:129
: Header for main.c file. This file contains the common defines of the application.
DMA_HandleTypeDef hdma_dac1
Definition: main.c:73
uint8_t RxData1[8]
Definition: stm32f7xx_it.c:52
CAN_HandleTypeDef hcan1
Definition: main.c:68
volatile uint32_t timer_flag
Definition: stm32f7xx_it.c:312
DMA_HandleTypeDef hdma_adc1
Definition: main.c:64
void UsageFault_Handler(void)
This function handles Undefined instruction or illegal state.
Definition: stm32f7xx_it.c:145
int send_CAN_message_helper(CANBus bus, CAN_TxHeaderTypeDef *TxHeader, uint8_t *data)
Definition: stm32f7xx_it.c:355
void HardFault_Handler(void)
This function handles Hard fault interrupt.
Definition: stm32f7xx_it.c:100
TIM_HandleTypeDef htim2
Definition: main.c:83
uint8_t RxData2[8]
Definition: stm32f7xx_it.c:53
void MemManage_Handler(void)
This function handles Memory management fault.
Definition: stm32f7xx_it.c:115
DMA_HandleTypeDef hdma_adc3
Definition: AnalogSensor.h:69
void TIM2_IRQHandler(void)
This function handles TIM2 global interrupt.
Definition: stm32f7xx_it.c:244
void CAN1_RX0_IRQHandler(void)
This function handles CAN1 RX0 interrupts.
Definition: stm32f7xx_it.c:230
void NMI_Handler(void)
This function handles Non maskable interrupt.
Definition: stm32f7xx_it.c:85
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
Definition: stm32f7xx_it.c:377
CAN_RxHeaderTypeDef RxHeader1
Definition: stm32f7xx_it.c:50
void DMA2_Stream2_IRQHandler(void)
This function handles DMA2 stream2 global interrupt.
Definition: stm32f7xx_it.c:286
void BusFault_Handler(void)
This function handles Pre-fetch fault, memory access fault.
Definition: stm32f7xx_it.c:130
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
Definition: stm32f7xx_it.c:314
CAN_RxHeaderTypeDef RxHeader2
Definition: stm32f7xx_it.c:51
void DMA1_Stream6_IRQHandler(void)
This function handles DMA1 stream6 global interrupt.
Definition: stm32f7xx_it.c:216
DMA_HandleTypeDef hdma_dac2
Definition: main.c:74
void DMA2_Stream0_IRQHandler(void)
This function handles DMA2 stream0 global interrupt.
Definition: stm32f7xx_it.c:258
void SysTick_Handler(void)
This function handles System tick timer.
Definition: stm32f7xx_it.c:173
CAN_HandleTypeDef hcan2
Definition: main.c:69
void CAN2_RX0_IRQHandler(void)
This function handles CAN2 RX0 interrupts.
Definition: stm32f7xx_it.c:300
void DMA1_Stream5_IRQHandler(void)
This function handles DMA1 stream5 global interrupt.
Definition: stm32f7xx_it.c:202
DMA_HandleTypeDef hdma_adc2
Definition: AnalogSensor.h:69
void DMA2_Stream1_IRQHandler(void)
This function handles DMA2 stream1 global interrupt.
Definition: stm32f7xx_it.c:272
void DebugMon_Handler(void)
This function handles Debug monitor.
Definition: stm32f7xx_it.c:160
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
Definition: stm32f7xx_it.c:389
This file contains the headers of the interrupt handlers.