14 Commits

Author SHA1 Message Date
eeeck aac6d0a8d1 Add license notice
This file was orignally added in v0.0.1, somehow messed up git history and it got deleted. This is a reupload
2026-06-18 16:33:32 +02:00
eeeck 4bf2f52b49 Add GNU GPLv3 license
This license was orignally added in v0.0.1, somehow messed up git history and it got deleted. This is a reupload
2026-06-18 16:32:02 +02:00
eeeck 61374d00f1 Disable debug flag by default 2026-06-18 16:09:18 +02:00
eeeck 5b5edc2ead Merge pull request 'Implement task for sending CAN data via UART' (#21) from dev_serial-send into main
Reviewed-on: erickahmed/j1939_logger#21
2026-06-18 15:35:22 +02:00
eeeck adcdc8b340 Fix spacing 2026-06-18 15:15:52 +02:00
eeeck 2880ae64dc Check semaphore acquire status 2026-06-18 15:05:50 +02:00
eeeck 33a2cc8fb4 Enable USART1 global interrupt 2026-06-18 15:02:19 +02:00
eeeck 41de3851f2 Implement better ciclical method for dummy CAN frame sent on debug 2026-06-18 14:06:00 +02:00
eeeck 6f8d2a12ea Merge branch 'stm_debug' into dev_serial-send 2026-06-18 13:43:23 +02:00
eeeck 1ad8e5b04f Change define name
- "DEBUG" is also used by STM32 for... something...
2026-06-18 13:38:28 +02:00
eeeck ef034f3195 Add debug dummy CAN frame sent regularly
- Activated by defining DEBUG_DUMMY_FRAME
2026-06-18 13:37:10 +02:00
eeeck 5a91a56e27 Fix spacing 2026-06-18 13:25:07 +02:00
eeeck 825ddc6961 Add debug print after 1s of no CAN traffic 2026-06-18 08:28:56 +02:00
eeeck 604e9e603b Add USART DMA in Normal mode from CubeMX 2026-06-18 06:21:41 +02:00
9 changed files with 119 additions and 11 deletions
+4 -2
View File
@@ -45,8 +45,10 @@ extern "C" {
/* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */
#define DEBUG
#ifdef DEBUG
//#define DEBUG_ITM
//#define DEBUG_DUMMY_FRAME
#ifdef DEBUG_ITM
#include <stdio.h>
#define DEBUG_PRINT(...) printf(__VA_ARGS__)
#else
+1
View File
@@ -52,6 +52,7 @@ void MemManage_Handler(void);
void BusFault_Handler(void);
void UsageFault_Handler(void);
void DebugMon_Handler(void);
void USART1_IRQHandler(void);
void SDIO_IRQHandler(void);
void TIM6_DAC_IRQHandler(void);
void DMA2_Stream3_IRQHandler(void);
+3 -1
View File
@@ -121,12 +121,14 @@ void vCANListener(void *argument)
for (;;)
{
if (osMessageQueueGet(queue, &message, NULL, osWaitForever) == osOK)
if (osMessageQueueGet(queue, &message, NULL, 1000) == osOK)
{
// J1939 decoding
osMessageQueuePut(xUARTQueue, &message, 0U, 0U);
}
else DEBUG_PRINT("No CAN yet!\r\n");
}
}
/* END vCANListener */
+36 -8
View File
@@ -104,24 +104,52 @@ void vUARTLogger(void *argument)
CanMessage_t message;
char tx_buffer[45];
#ifdef DEBUG_DUMMY_FRAME
CanMessage_t dummy_frame = {
.id = 0x0CF00400, // J1939 EEC1 ID
.dlc = 8, // 8 bytes of data
.isExtended = 1, // 29-bit Extended ID
.source = 1, // CAN1
.payload = {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x11, 0x22}
};
#endif
for (;;)
{
DEBUG_PRINT("Waiting for CAN traffic...\r\n");
if (osMessageQueueGet(xUARTQueue, &message, NULL, osWaitForever) == osOK)
{
osSemaphoreAcquire(xUARTDMASemaphore, osWaitForever);
int len = format_can_message(tx_buffer, message.source, &message);
if (HAL_UART_Transmit_DMA(&huart1, (uint8_t*)tx_buffer, len) == HAL_OK)
#ifdef DEBUG_DUMMY_FRAME
uint32_t queue_timeout = 1000U;
#else
uint32_t queue_timeout = osWaitForever;
#endif
#ifdef DEBUG_DUMMY_FRAME
osMessageQueuePut(xUARTQueue, &dummy_frame, 0U, 0U);
osDelay(1000);
#endif
if (osMessageQueueGet(xUARTQueue, &message, NULL, queue_timeout) == osOK)
{
if (osSemaphoreAcquire(xUARTDMASemaphore, queue_timeout) == osOK)
{
int len = format_can_message(tx_buffer, message.source, &message);
if (HAL_UART_Transmit_DMA(&huart1, (uint8_t*)tx_buffer, len) == HAL_OK)
{
DEBUG_PRINT("CAN frame sent via UART\r\n");
}
else
{
osSemaphoreRelease(xUARTDMASemaphore);
DEBUG_PRINT("HAL error, CAN frame NOT sent!\r\n");
}
}
else
{
osSemaphoreRelease(xUARTDMASemaphore);
DEBUG_PRINT("HAL error, CAN frame NOT sent!\r\n");
DEBUG_PRINT("ERROR: Semaphore timeout! UART might be stuck in BUSY state.\r\n");
}
}
}
}
}
/* END vUARTLoggerListen */
+6
View File
@@ -392,6 +392,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
__HAL_LINKDMA(huart,hdmatx,hdma_usart1_tx);
/* USART1 interrupt Init */
HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspInit 1 */
/* USER CODE END USART1_MspInit 1 */
@@ -424,6 +427,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
/* USART1 DMA DeInit */
HAL_DMA_DeInit(huart->hdmatx);
/* USART1 interrupt DeInit */
HAL_NVIC_DisableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspDeInit 1 */
/* USER CODE END USART1_MspDeInit 1 */
+15
View File
@@ -59,6 +59,7 @@ extern DMA_HandleTypeDef hdma_sdio_rx;
extern DMA_HandleTypeDef hdma_sdio_tx;
extern SD_HandleTypeDef hsd;
extern DMA_HandleTypeDef hdma_usart1_tx;
extern UART_HandleTypeDef huart1;
extern TIM_HandleTypeDef htim6;
/* USER CODE BEGIN EV */
@@ -163,6 +164,20 @@ void DebugMon_Handler(void)
/* please refer to the startup file (startup_stm32f4xx.s). */
/******************************************************************************/
/**
* @brief This function handles USART1 global interrupt.
*/
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
/**
* @brief This function handles SDIO global interrupt.
*/
+38
View File
@@ -0,0 +1,38 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. https://fsf.org/
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
+15
View File
@@ -0,0 +1,15 @@
# Third-Party Notices
This project is built with open source components and includes third-party software:
## 1. Original Application Code
- **Copyright (c) 2026 Erick Ahmed**
- **License:** [GNU General Public License v3.0](https://git.erickahmed.com/erickahmed/j1939_logger/src/branch/main/LICENSE.md)
## 2. STM32F4 HAL Drivers
- **Copyright (c) 2016 STMicroelectronics**
- **License:** [BSD 3-Clause License](https://git.erickahmed.com/erickahmed/j1939_logger/src/branch/main/Drivers/STM32F4xx_HAL_Driver/LICENSE.txt)
## 3. STM32 CMSIS
- **Copyright (c) 2017 STMicroelectronics**
- **License:** [Apache License 2.0](https://git.erickahmed.com/erickahmed/j1939_logger/src/branch/main/Drivers/CMSIS/LICENSE.txt)
+1
View File
@@ -124,6 +124,7 @@ NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:true\:false
NVIC.TIM6_DAC_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true
NVIC.TimeBase=TIM6_DAC_IRQn
NVIC.TimeBaseIP=TIM6
NVIC.USART1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
PA10.Mode=Asynchronous
PA10.Signal=USART1_RX