Skip to content

Commit 6b6315f

Browse files
authored
Merge pull request #45 from Formula-Electric-Berkeley/hp/sensor_node_2
Hp/sensor node 2
2 parents f9d4843 + e2c83a3 commit 6b6315f

43 files changed

Lines changed: 2968 additions & 209 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.cubemx-manifest.json

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -280,28 +280,30 @@
280280
}
281281
},
282282
"Sensor_Nodes": {
283-
"ioc_checksum": "8c69b14e19d1dd61e329967ee4aad14fac48a8c30fc502bc9055c4a5eb52e5ab",
284-
"generated_at": "2026-04-28T02:40:03Z",
283+
"ioc_checksum": "2aa197f3fd419c6ece9ea9fc99ccd8fa3acc197e02f96dfc6386dda5b6f1fc3e",
284+
"generated_at": "2026-05-03T19:03:35Z",
285285
"files": {
286286
"Core/Inc/adc.h": "0ac97025a4065f07b7b65a906bd0c45ea800215434ed43c287c1685507f3f612",
287287
"Core/Inc/can.h": "98925d7f4010f054e17d240116244377377c15248a5413a09ff811cdc23084e5",
288288
"Core/Inc/dma.h": "7cf6f7450a29d26303cbba5a3ca8c6cb24a02635d6a5ba4d05141fdfc75c4c49",
289289
"Core/Inc/gpio.h": "e2d62f964a0b7f238384ed6a20a181d09df9647240a268dc547acf5b35099f74",
290290
"Core/Inc/i2c.h": "f8ccbb92e950fd1d84e3851b46a5e327f04797b3596af4ad306373eee85840a4",
291291
"Core/Inc/main.h": "3d094f9cafa9dddc183ec8a0549cf2a3bf78b6bdf2aee71402de2f5634f26f99",
292-
"Core/Inc/stm32f4xx_hal_conf.h": "c8b316b7f467708684ebfd60b1fa3dff66c46ff0aa25cfd0bbb73dcb8b090d67",
293-
"Core/Inc/stm32f4xx_it.h": "c29034dac6a7ae80eb81707617496d66a639352fdb5db581518700b2eb87c293",
292+
"Core/Inc/stm32f4xx_hal_conf.h": "73d247d57dfb67fbdd50432f98f71c6fe9c18d23a705828178ca7a3589f9e709",
293+
"Core/Inc/stm32f4xx_it.h": "475e3816ec3c320e776dd14a5cf2e8eddadff4261a4bc80034210d1c3d71ee73",
294+
"Core/Inc/tim.h": "6ea6adbad8265f73a0ca556e657fc3f1906a29dbbb243b4337030b4ce847eff8",
294295
"Core/Inc/usart.h": "8c7ef615ce73773c33fdce85e6a9809f9eef65226b59e67e53e72c902a6a70a9",
295296
"Core/Src/adc.c": "2635c7fe171aa8514bfb03abf5cab1b247a16e48cb8a6044f0c6aac56a4c3a3a",
296-
"Core/Src/can.c": "589dc8b641d52fdd91ac9df2efabb17e604228248601e5017359fd25c7778525",
297+
"Core/Src/can.c": "394f8a4a99d9c65784aa27c3745eca549717dfba4749d379acdfd212a5e80ca5",
297298
"Core/Src/dma.c": "34e9a60453cff20a0e179e43e2464abb3aa205dd8faf7acd7581ca0086f3a673",
298299
"Core/Src/gpio.c": "12d70d25d5a8026905bcf10ea026c982e785528fe85bd1861d2095dbae583e0e",
299300
"Core/Src/i2c.c": "ad7c6a964844941003cc19eac436fd531c82106f18ef2e2e24afddd6363c3425",
300-
"Core/Src/main.c": "754084d09b34d901706964c2db563a09d1cdcf65d6db1885213b15c0f6c53e25",
301+
"Core/Src/main.c": "63b74204d8837f4da7fc73912967c5134ab6abfcbbea1bd7d0665a4837a60830",
301302
"Core/Src/stm32f4xx_hal_msp.c": "3217d99dc7006dc46ac384717641fe84386f05fc71db0a3340fa0eae810bc1b7",
302-
"Core/Src/stm32f4xx_it.c": "80b5d5fb42f1054d18f2ea82b60b934acd7b2b22233cbca23b60c04825f3838e",
303+
"Core/Src/stm32f4xx_it.c": "ceaa18875b9504a3e34d1821555549042e62d7c1b4c4fe6fcd4d54662a34bb59",
303304
"Core/Src/syscalls.c": "03c06c72eafb44b499814cf9234aba57dd830f345d9b8779b5d7090e78517600",
304305
"Core/Src/sysmem.c": "ad20f7b1fa1e7c73330727747222cf2ffa3245ebf035230ee9a157545e79df95",
306+
"Core/Src/tim.c": "b82e3fe610597a81b3d926426e0757534b3ea17d6783c640c4948a590651fdb4",
305307
"Core/Src/usart.c": "bdc44ebff0694aaaa1401cd98c9d689f1bf65edd5614163d2dfb96dbeb6e07b0",
306308
"STM32F446XX_FLASH.ld": "104cb1a1baa900a864bd01c5aebded70dda1429afc827de8ec3373ce9d64bfb3",
307309
"startup_stm32f446xx.s": "448435eb5d2ffe063490bcac42b9c861461ce05528141d87e62f8425c00131f8"

Sensor_Nodes/.mxproject

Lines changed: 14 additions & 12 deletions
Large diffs are not rendered by default.

Sensor_Nodes/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,14 @@ list(APPEND ALL_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/../common/FEB_CAN_Library_S
4747
set(LWGPS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../third-party/lwgps/src")
4848
list(APPEND ALL_SOURCES "${LWGPS_DIR}/lwgps/lwgps.c")
4949

50+
# Fusion AHRS library (xioTechnologies)
51+
set(FUSION_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../third-party/Fusion")
52+
list(APPEND ALL_SOURCES
53+
"${FUSION_DIR}/FusionAhrs.c"
54+
"${FUSION_DIR}/FusionBias.c"
55+
"${FUSION_DIR}/FusionCompass.c"
56+
)
57+
5058
# ══════════════════════════════════════════════════════════════════════
5159
# INCLUDE DIRECTORIES
5260
# ══════════════════════════════════════════════════════════════════════
@@ -74,6 +82,9 @@ list(APPEND BASE_INCLUDES
7482
# LwGPS library includes
7583
list(APPEND BASE_INCLUDES "${LWGPS_DIR}/include")
7684

85+
# Fusion library includes
86+
list(APPEND BASE_INCLUDES "${FUSION_DIR}")
87+
7788
# ══════════════════════════════════════════════════════════════════════
7889
# EXECUTABLE TARGET
7990
# ══════════════════════════════════════════════════════════════════════

Sensor_Nodes/Core/Inc/stm32f4xx_hal_conf.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
/* #define HAL_SD_MODULE_ENABLED */
6464
/* #define HAL_MMC_MODULE_ENABLED */
6565
/* #define HAL_SPI_MODULE_ENABLED */
66-
/* #define HAL_TIM_MODULE_ENABLED */
66+
#define HAL_TIM_MODULE_ENABLED
6767
#define HAL_UART_MODULE_ENABLED
6868
/* #define HAL_USART_MODULE_ENABLED */
6969
/* #define HAL_IRDA_MODULE_ENABLED */

Sensor_Nodes/Core/Inc/stm32f4xx_it.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,18 @@ void DMA1_Stream2_IRQHandler(void);
6060
void DMA1_Stream4_IRQHandler(void);
6161
void DMA1_Stream5_IRQHandler(void);
6262
void DMA1_Stream6_IRQHandler(void);
63+
void CAN1_TX_IRQHandler(void);
64+
void CAN1_RX0_IRQHandler(void);
65+
void CAN1_RX1_IRQHandler(void);
66+
void CAN1_SCE_IRQHandler(void);
6367
void EXTI9_5_IRQHandler(void);
6468
void USART2_IRQHandler(void);
6569
void EXTI15_10_IRQHandler(void);
6670
void UART4_IRQHandler(void);
71+
void CAN2_TX_IRQHandler(void);
72+
void CAN2_RX0_IRQHandler(void);
73+
void CAN2_RX1_IRQHandler(void);
74+
void CAN2_SCE_IRQHandler(void);
6775
/* USER CODE BEGIN EFP */
6876

6977
/* USER CODE END EFP */

Sensor_Nodes/Core/Inc/tim.h

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/* USER CODE BEGIN Header */
2+
/**
3+
******************************************************************************
4+
* @file tim.h
5+
* @brief This file contains all the function prototypes for
6+
* the tim.c file
7+
******************************************************************************
8+
* @attention
9+
*
10+
* Copyright (c) 2026 STMicroelectronics.
11+
* All rights reserved.
12+
*
13+
* This software is licensed under terms that can be found in the LICENSE file
14+
* in the root directory of this software component.
15+
* If no LICENSE file comes with this software, it is provided AS-IS.
16+
*
17+
******************************************************************************
18+
*/
19+
/* USER CODE END Header */
20+
/* Define to prevent recursive inclusion -------------------------------------*/
21+
#ifndef __TIM_H__
22+
#define __TIM_H__
23+
24+
#ifdef __cplusplus
25+
extern "C" {
26+
#endif
27+
28+
/* Includes ------------------------------------------------------------------*/
29+
#include "main.h"
30+
31+
/* USER CODE BEGIN Includes */
32+
33+
/* USER CODE END Includes */
34+
35+
extern TIM_HandleTypeDef htim5;
36+
37+
/* USER CODE BEGIN Private defines */
38+
39+
/* USER CODE END Private defines */
40+
41+
void MX_TIM5_Init(void);
42+
43+
/* USER CODE BEGIN Prototypes */
44+
45+
/* USER CODE END Prototypes */
46+
47+
#ifdef __cplusplus
48+
}
49+
#endif
50+
51+
#endif /* __TIM_H__ */
52+

Sensor_Nodes/Core/Src/can.c

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ void MX_CAN1_Init(void)
3939

4040
/* USER CODE END CAN1_Init 1 */
4141
hcan1.Instance = CAN1;
42-
hcan1.Init.Prescaler = 16;
42+
hcan1.Init.Prescaler = 18;
4343
hcan1.Init.Mode = CAN_MODE_NORMAL;
4444
hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;
45-
hcan1.Init.TimeSeg1 = CAN_BS1_1TQ;
45+
hcan1.Init.TimeSeg1 = CAN_BS1_3TQ;
4646
hcan1.Init.TimeSeg2 = CAN_BS2_1TQ;
4747
hcan1.Init.TimeTriggeredMode = DISABLE;
4848
hcan1.Init.AutoBusOff = DISABLE;
@@ -71,10 +71,10 @@ void MX_CAN2_Init(void)
7171

7272
/* USER CODE END CAN2_Init 1 */
7373
hcan2.Instance = CAN2;
74-
hcan2.Init.Prescaler = 16;
74+
hcan2.Init.Prescaler = 18;
7575
hcan2.Init.Mode = CAN_MODE_NORMAL;
7676
hcan2.Init.SyncJumpWidth = CAN_SJW_1TQ;
77-
hcan2.Init.TimeSeg1 = CAN_BS1_1TQ;
77+
hcan2.Init.TimeSeg1 = CAN_BS1_3TQ;
7878
hcan2.Init.TimeSeg2 = CAN_BS2_1TQ;
7979
hcan2.Init.TimeTriggeredMode = DISABLE;
8080
hcan2.Init.AutoBusOff = DISABLE;
@@ -121,6 +121,15 @@ void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)
121121
GPIO_InitStruct.Alternate = GPIO_AF9_CAN1;
122122
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
123123

124+
/* CAN1 interrupt Init */
125+
HAL_NVIC_SetPriority(CAN1_TX_IRQn, 0, 0);
126+
HAL_NVIC_EnableIRQ(CAN1_TX_IRQn);
127+
HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 0, 0);
128+
HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);
129+
HAL_NVIC_SetPriority(CAN1_RX1_IRQn, 0, 0);
130+
HAL_NVIC_EnableIRQ(CAN1_RX1_IRQn);
131+
HAL_NVIC_SetPriority(CAN1_SCE_IRQn, 0, 0);
132+
HAL_NVIC_EnableIRQ(CAN1_SCE_IRQn);
124133
/* USER CODE BEGIN CAN1_MspInit 1 */
125134

126135
/* USER CODE END CAN1_MspInit 1 */
@@ -149,6 +158,15 @@ void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)
149158
GPIO_InitStruct.Alternate = GPIO_AF9_CAN2;
150159
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
151160

161+
/* CAN2 interrupt Init */
162+
HAL_NVIC_SetPriority(CAN2_TX_IRQn, 0, 0);
163+
HAL_NVIC_EnableIRQ(CAN2_TX_IRQn);
164+
HAL_NVIC_SetPriority(CAN2_RX0_IRQn, 0, 0);
165+
HAL_NVIC_EnableIRQ(CAN2_RX0_IRQn);
166+
HAL_NVIC_SetPriority(CAN2_RX1_IRQn, 0, 0);
167+
HAL_NVIC_EnableIRQ(CAN2_RX1_IRQn);
168+
HAL_NVIC_SetPriority(CAN2_SCE_IRQn, 0, 0);
169+
HAL_NVIC_EnableIRQ(CAN2_SCE_IRQn);
152170
/* USER CODE BEGIN CAN2_MspInit 1 */
153171

154172
/* USER CODE END CAN2_MspInit 1 */
@@ -175,6 +193,11 @@ void HAL_CAN_MspDeInit(CAN_HandleTypeDef* canHandle)
175193
*/
176194
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);
177195

196+
/* CAN1 interrupt Deinit */
197+
HAL_NVIC_DisableIRQ(CAN1_TX_IRQn);
198+
HAL_NVIC_DisableIRQ(CAN1_RX0_IRQn);
199+
HAL_NVIC_DisableIRQ(CAN1_RX1_IRQn);
200+
HAL_NVIC_DisableIRQ(CAN1_SCE_IRQn);
178201
/* USER CODE BEGIN CAN1_MspDeInit 1 */
179202

180203
/* USER CODE END CAN1_MspDeInit 1 */
@@ -197,6 +220,11 @@ void HAL_CAN_MspDeInit(CAN_HandleTypeDef* canHandle)
197220
*/
198221
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_12|GPIO_PIN_13);
199222

223+
/* CAN2 interrupt Deinit */
224+
HAL_NVIC_DisableIRQ(CAN2_TX_IRQn);
225+
HAL_NVIC_DisableIRQ(CAN2_RX0_IRQn);
226+
HAL_NVIC_DisableIRQ(CAN2_RX1_IRQn);
227+
HAL_NVIC_DisableIRQ(CAN2_SCE_IRQn);
200228
/* USER CODE BEGIN CAN2_MspDeInit 1 */
201229

202230
/* USER CODE END CAN2_MspDeInit 1 */

Sensor_Nodes/Core/Src/main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "can.h"
2323
#include "dma.h"
2424
#include "i2c.h"
25+
#include "tim.h"
2526
#include "usart.h"
2627
#include "gpio.h"
2728

@@ -101,6 +102,7 @@ int main(void)
101102
MX_I2C3_Init();
102103
MX_UART4_Init();
103104
MX_I2C1_Init();
105+
MX_TIM5_Init();
104106
/* USER CODE BEGIN 2 */
105107
FEB_Init();
106108
/* USER CODE END 2 */

Sensor_Nodes/Core/Src/stm32f4xx_it.c

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@
5656
/* USER CODE END 0 */
5757

5858
/* External variables --------------------------------------------------------*/
59+
extern CAN_HandleTypeDef hcan1;
60+
extern CAN_HandleTypeDef hcan2;
5961
extern DMA_HandleTypeDef hdma_uart4_rx;
6062
extern DMA_HandleTypeDef hdma_uart4_tx;
6163
extern DMA_HandleTypeDef hdma_usart2_rx;
@@ -274,6 +276,62 @@ void DMA1_Stream6_IRQHandler(void)
274276
/* USER CODE END DMA1_Stream6_IRQn 1 */
275277
}
276278

279+
/**
280+
* @brief This function handles CAN1 TX interrupt.
281+
*/
282+
void CAN1_TX_IRQHandler(void)
283+
{
284+
/* USER CODE BEGIN CAN1_TX_IRQn 0 */
285+
286+
/* USER CODE END CAN1_TX_IRQn 0 */
287+
HAL_CAN_IRQHandler(&hcan1);
288+
/* USER CODE BEGIN CAN1_TX_IRQn 1 */
289+
290+
/* USER CODE END CAN1_TX_IRQn 1 */
291+
}
292+
293+
/**
294+
* @brief This function handles CAN1 RX0 interrupt.
295+
*/
296+
void CAN1_RX0_IRQHandler(void)
297+
{
298+
/* USER CODE BEGIN CAN1_RX0_IRQn 0 */
299+
300+
/* USER CODE END CAN1_RX0_IRQn 0 */
301+
HAL_CAN_IRQHandler(&hcan1);
302+
/* USER CODE BEGIN CAN1_RX0_IRQn 1 */
303+
304+
/* USER CODE END CAN1_RX0_IRQn 1 */
305+
}
306+
307+
/**
308+
* @brief This function handles CAN1 RX1 interrupt.
309+
*/
310+
void CAN1_RX1_IRQHandler(void)
311+
{
312+
/* USER CODE BEGIN CAN1_RX1_IRQn 0 */
313+
314+
/* USER CODE END CAN1_RX1_IRQn 0 */
315+
HAL_CAN_IRQHandler(&hcan1);
316+
/* USER CODE BEGIN CAN1_RX1_IRQn 1 */
317+
318+
/* USER CODE END CAN1_RX1_IRQn 1 */
319+
}
320+
321+
/**
322+
* @brief This function handles CAN1 SCE interrupt.
323+
*/
324+
void CAN1_SCE_IRQHandler(void)
325+
{
326+
/* USER CODE BEGIN CAN1_SCE_IRQn 0 */
327+
328+
/* USER CODE END CAN1_SCE_IRQn 0 */
329+
HAL_CAN_IRQHandler(&hcan1);
330+
/* USER CODE BEGIN CAN1_SCE_IRQn 1 */
331+
332+
/* USER CODE END CAN1_SCE_IRQn 1 */
333+
}
334+
277335
/**
278336
* @brief This function handles EXTI line[9:5] interrupts.
279337
*/
@@ -331,6 +389,62 @@ void UART4_IRQHandler(void)
331389
/* USER CODE END UART4_IRQn 1 */
332390
}
333391

392+
/**
393+
* @brief This function handles CAN2 TX interrupt.
394+
*/
395+
void CAN2_TX_IRQHandler(void)
396+
{
397+
/* USER CODE BEGIN CAN2_TX_IRQn 0 */
398+
399+
/* USER CODE END CAN2_TX_IRQn 0 */
400+
HAL_CAN_IRQHandler(&hcan2);
401+
/* USER CODE BEGIN CAN2_TX_IRQn 1 */
402+
403+
/* USER CODE END CAN2_TX_IRQn 1 */
404+
}
405+
406+
/**
407+
* @brief This function handles CAN2 RX0 interrupt.
408+
*/
409+
void CAN2_RX0_IRQHandler(void)
410+
{
411+
/* USER CODE BEGIN CAN2_RX0_IRQn 0 */
412+
413+
/* USER CODE END CAN2_RX0_IRQn 0 */
414+
HAL_CAN_IRQHandler(&hcan2);
415+
/* USER CODE BEGIN CAN2_RX0_IRQn 1 */
416+
417+
/* USER CODE END CAN2_RX0_IRQn 1 */
418+
}
419+
420+
/**
421+
* @brief This function handles CAN2 RX1 interrupt.
422+
*/
423+
void CAN2_RX1_IRQHandler(void)
424+
{
425+
/* USER CODE BEGIN CAN2_RX1_IRQn 0 */
426+
427+
/* USER CODE END CAN2_RX1_IRQn 0 */
428+
HAL_CAN_IRQHandler(&hcan2);
429+
/* USER CODE BEGIN CAN2_RX1_IRQn 1 */
430+
431+
/* USER CODE END CAN2_RX1_IRQn 1 */
432+
}
433+
434+
/**
435+
* @brief This function handles CAN2 SCE interrupt.
436+
*/
437+
void CAN2_SCE_IRQHandler(void)
438+
{
439+
/* USER CODE BEGIN CAN2_SCE_IRQn 0 */
440+
441+
/* USER CODE END CAN2_SCE_IRQn 0 */
442+
HAL_CAN_IRQHandler(&hcan2);
443+
/* USER CODE BEGIN CAN2_SCE_IRQn 1 */
444+
445+
/* USER CODE END CAN2_SCE_IRQn 1 */
446+
}
447+
334448
/* USER CODE BEGIN 1 */
335449
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
336450
{

0 commit comments

Comments
 (0)