1 Commits

Author SHA1 Message Date
eeeck a6daf6c172 Removing duplicate, again... 2026-06-17 18:07:09 +02:00
5 changed files with 54 additions and 92 deletions
+3 -9
View File
@@ -26,11 +26,11 @@ extern "C" {
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_hal.h"
#include "canlog.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdint.h>
#include "canlog.h"
/* USER CODE END Includes */
/* Exported types ------------------------------------------------------------*/
@@ -45,13 +45,7 @@ extern "C" {
/* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */
#define DEBUG
#ifdef DEBUG
#include <stdio.h>
#define DEBUG_PRINT(...) printf(__VA_ARGS__)
#else
#define DEBUG_PRINT(...)
#endif
/* USER CODE END EM */
/* Exported functions prototypes ---------------------------------------------*/
+4 -5
View File
@@ -15,7 +15,6 @@
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "canlog.h"
#include "main.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "cmsis_os.h"
@@ -117,13 +116,13 @@ void vCANListener(void *argument)
for (;;)
{
if (osMessageQueueGet(queue, &message, NULL, osWaitForever) == osOK)
{
if (osMessageQueueGet(queue, &message, NULL, osWaitForever) == osOK)
{
// J1939 decoding
// RELAY: Push to the UART queue
osMessageQueuePut(xUARTQueue, &message, 0U, 0U);
}
osMessageQueuePut(xUARTQueue, &message, 0U, 0U);
}
}
}
/* END vCANListener */
+3 -9
View File
@@ -32,7 +32,7 @@ extern osMessageQueueId_t xUARTQueue;
* @param arguments: buffer, source, message
* @retval None
*/
static int format_can_message(char *buf, uint8_t source, const CanMessage_t *message)
static void format_can_message(char *buf, uint8_t source, const CanMessage_t *message)
{
const char hex[] = "0123456789ABCDEF";
@@ -72,9 +72,6 @@ static int format_can_message(char *buf, uint8_t source, const CanMessage_t *mes
buf[idx++] = '\r';
buf[idx++] = '\n';
buf[idx] = '\0';
return idx;
}
/* END format_can_message */
@@ -106,14 +103,11 @@ void vUARTLogger(void *argument)
for (;;)
{
DEBUG_PRINT("Waiting for CAN traffic...\r\n");
if (osMessageQueueGet(xUARTQueue, &message, NULL, osWaitForever) == osOK)
{
DEBUG_PRINT("CAN frame detected\r\n");
format_can_message(tx_buffer, message.source, &message);
HAL_UART_Transmit_DMA(&huart1, (uint8_t*)tx_buffer, len);
format_can_message(tx_buffer, message.source, &message); // Assuming you add 'source' to the struct
HAL_UART_Transmit_DMA(&huart1, (uint8_t*)tx_buffer, 44);
osSemaphoreAcquire(xUARTDMASemaphore, osWaitForever);
DEBUG_PRINT("CAN frame sent via UART\r\n");
}
}
}
+29 -48
View File
@@ -48,9 +48,9 @@ DMA_HandleTypeDef hdma_sdio_tx;
UART_HandleTypeDef huart1;
/* USER CODE BEGIN PV */
LED_Config led_can1 = {GPIOB, GPIO_PIN_5};
LED_Config led_can2 = {GPIOB, GPIO_PIN_6};
LED_Config led_error = {GPIOB, GPIO_PIN_7};
LED_Config led_can1 = {GPIOB, GPIO_PIN_2};
LED_Config led_can2 = {GPIOB, GPIO_PIN_5};
LED_Config led_error = {GPIOB, GPIO_PIN_3};
osThreadId_t xCAN1rxTask;
osThreadId_t xCAN2rxTask;
@@ -76,12 +76,6 @@ static void MX_SDIO_SD_Init(void);
static void MX_USART1_UART_Init(void);
/* USER CODE BEGIN PFP */
int _write(int file, char *ptr, int len) {
for (int i = 0; i < len; i++) {
ITM_SendChar((*ptr++));
}
return len;
}
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
@@ -97,11 +91,7 @@ int main(void)
{
/* USER CODE BEGIN 1 */
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
ITM->LAR = 0xC5ACCE55;
ITM->TER = 1 << 0;
ITM->TCR = ITM_TCR_ITMENA_Msk | ITM_TCR_SYNCENA_Msk | ITM_TCR_SWOENA_Msk;
DEBUG_PRINT("Booting system\r\n");
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
@@ -110,7 +100,6 @@ int main(void)
HAL_Init();
/* USER CODE BEGIN Init */
DEBUG_PRINT("Configuring system clock\r\n");
/* USER CODE END Init */
@@ -118,7 +107,7 @@ int main(void)
SystemClock_Config();
/* USER CODE BEGIN SysInit */
DEBUG_PRINT("Initializing configured peripherals...\r\n");
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
@@ -129,15 +118,12 @@ int main(void)
MX_SDIO_SD_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
DEBUG_PRINT("Initializing CAN bus logger\r\n");
CAN_Logger_Init(&hcan1, &hcan2);
/* USER CODE END 2 */
/* Init scheduler */
osKernelInitialize();
DEBUG_PRINT("Creating RTOS entities\r\n");
/* USER CODE BEGIN RTOS_TASKS */
const osThreadAttr_t CAN1rxAttributes = {
.name = "CAN1rx",
@@ -197,7 +183,6 @@ int main(void)
/* USER CODE END RTOS_EVENTS */
/* Start scheduler */
DEBUG_PRINT("Starting RTOS init scheduler\r\n");
osKernelStart();
/* We should never get here as control is now taken by the scheduler */
@@ -209,7 +194,6 @@ int main(void)
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
DEBUG_PRINT("ERROR: RTOS scheduler crashed!\r\n");
/* USER CODE END 3 */
}
}
@@ -292,7 +276,7 @@ static void MX_CAN1_Init(void)
Error_Handler();
}
/* USER CODE BEGIN CAN1_Init 2 */
DEBUG_PRINT("CAN1 initialized!\r\n");
/* USER CODE END CAN1_Init 2 */
}
@@ -329,7 +313,7 @@ static void MX_CAN2_Init(void)
Error_Handler();
}
/* USER CODE BEGIN CAN2_Init 2 */
DEBUG_PRINT("CAN2 initialized!\r\n");
/* USER CODE END CAN2_Init 2 */
}
@@ -356,16 +340,16 @@ static void MX_SDIO_SD_Init(void)
hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
hsd.Init.ClockDiv = 0;
//if (HAL_SD_Init(&hsd) != HAL_OK)
//{
// Error_Handler();
//}
//if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK)
//{
// Error_Handler();
//}
if (HAL_SD_Init(&hsd) != HAL_OK)
{
Error_Handler();
}
if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN SDIO_Init 2 */
//DEBUG_PRINT("SDIO initialized!\r\n");
/* USER CODE END SDIO_Init 2 */
}
@@ -398,7 +382,7 @@ static void MX_USART1_UART_Init(void)
Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 */
DEBUG_PRINT("USART1 initialized!\r\n");
/* USER CODE END USART1_Init 2 */
}
@@ -420,9 +404,6 @@ static void MX_DMA_Init(void)
HAL_NVIC_SetPriority(DMA2_Stream6_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream6_IRQn);
/* USER CODE BEGIN MX_DMA_Init 1 */
DEBUG_PRINT("DMA initialized!\r\n");
/* USER CODE END MX_DMA_Init 1 */
}
/**
@@ -445,7 +426,7 @@ static void MX_GPIO_Init(void)
__HAL_RCC_GPIOD_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5, GPIO_PIN_RESET);
/*Configure GPIO pins : PC13 PC14 PC15 PC0
PC1 PC2 PC3 PC4
@@ -465,33 +446,35 @@ static void MX_GPIO_Init(void)
/*Configure GPIO pins : PA0 PA1 PA2 PA3
PA4 PA5 PA6 PA7
PA8 PA11 PA12 PA15 */
PA8 PA11 PA12 PA13
PA14 PA15 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
|GPIO_PIN_8|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_15;
|GPIO_PIN_8|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13
|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pins : PB0 PB1 PB2 PB10
PB11 PB14 PB15 PB3
PB4 */
PB11 PB14 PB15 PB6
PB7 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10
|GPIO_PIN_11|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_3
|GPIO_PIN_4;
|GPIO_PIN_11|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_6
|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pins : PB5 PB6 PB7 */
GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
/*Configure GPIO pins : PB3 PB4 PB5 */
GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USER CODE BEGIN MX_GPIO_Init_2 */
DEBUG_PRINT("GPIO initialized!\r\n");
/* USER CODE END MX_GPIO_Init_2 */
}
@@ -526,8 +509,6 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
*/
void Error_Handler(void)
{
DEBUG_PRINT("ERROR: entering error handler\r\n");
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
__disable_irq();
+15 -21
View File
@@ -70,24 +70,22 @@ Mcu.Name=STM32F405RGTx
Mcu.Package=LQFP64
Mcu.Pin0=PB12
Mcu.Pin1=PB13
Mcu.Pin10=PC12
Mcu.Pin11=PD2
Mcu.Pin10=PB3
Mcu.Pin11=PB4
Mcu.Pin12=PB5
Mcu.Pin13=PB6
Mcu.Pin14=PB7
Mcu.Pin15=PB8
Mcu.Pin16=PB9
Mcu.Pin17=VP_FREERTOS_VS_CMSIS_V2
Mcu.Pin18=VP_SYS_VS_tim6
Mcu.Pin13=PB8
Mcu.Pin14=PB9
Mcu.Pin15=VP_FREERTOS_VS_CMSIS_V2
Mcu.Pin16=VP_SYS_VS_tim6
Mcu.Pin2=PC8
Mcu.Pin3=PC9
Mcu.Pin4=PA9
Mcu.Pin5=PA10
Mcu.Pin6=PA13
Mcu.Pin7=PA14
Mcu.Pin8=PC10
Mcu.Pin9=PC11
Mcu.PinsNb=19
Mcu.Pin6=PC10
Mcu.Pin7=PC11
Mcu.Pin8=PC12
Mcu.Pin9=PD2
Mcu.PinsNb=17
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F405RGTx
@@ -115,22 +113,18 @@ NVIC.TimeBaseIP=TIM6
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
PA10.Mode=Asynchronous
PA10.Signal=USART1_RX
PA13.Mode=Serial_Wire
PA13.Signal=SYS_JTMS-SWDIO
PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK
PA9.Mode=Asynchronous
PA9.Signal=USART1_TX
PB12.Mode=CAN_Activate
PB12.Signal=CAN2_RX
PB13.Mode=CAN_Activate
PB13.Signal=CAN2_TX
PB3.Locked=true
PB3.Signal=GPIO_Output
PB4.Locked=true
PB4.Signal=GPIO_Output
PB5.Locked=true
PB5.Signal=GPIO_Output
PB6.Locked=true
PB6.Signal=GPIO_Output
PB7.Locked=true
PB7.Signal=GPIO_Output
PB8.Mode=CAN_Activate
PB8.Signal=CAN1_RX
PB9.Locked=true