8 Commits

Author SHA1 Message Date
eeeck 4afa6702fb Return exact length 2026-06-17 20:33:38 +02:00
eeeck 907c0b170d Move to PFP block in main.c and use more standard logic 2026-06-17 20:33:22 +02:00
eeeck 60849ebb78 Testing: SDIO stuff deactivated until implemented
- Goes into error handling
2026-06-17 20:32:36 +02:00
eeeck aeb553994c Update LED struct 2026-06-17 20:14:56 +02:00
eeeck 5e28758a5e Use serial mode instad of JTAG 2026-06-17 20:09:45 +02:00
eeeck 9980dafb5c Initialize JTAG hardware
- To debug with ST-Link
2026-06-17 18:27:55 +02:00
eeeck 1d70a35f95 Move to proper block 2026-06-17 18:26:01 +02:00
eeeck 5c8961efa7 Include stdint 2026-06-17 18:16:13 +02:00
4 changed files with 62 additions and 61 deletions
+9 -21
View File
@@ -24,31 +24,13 @@
extern "C" { extern "C" {
#endif #endif
#define DEBUG
#ifdef DEBUG
static inline void ITM_Print(const char *str) {
while (*str) {
uint32_t timeout = 1000;
while ((ITM->PORT[0].u32 == 0) && (timeout-- > 0));
if (timeout > 0) {
ITM->PORT[0].u8 = (uint8_t)(*str);
}
str++;
}
}
#define DEBUG_PRINT(x) ITM_Print(x)
#else
#define DEBUG_PRINT(x)
#endif
/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_hal.h" #include "stm32f4xx_hal.h"
#include "canlog.h"
/* Private includes ----------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */ /* USER CODE BEGIN Includes */
#include <stdint.h>
#include "canlog.h"
/* USER CODE END Includes */ /* USER CODE END Includes */
/* Exported types ------------------------------------------------------------*/ /* Exported types ------------------------------------------------------------*/
@@ -63,7 +45,13 @@ static inline void ITM_Print(const char *str) {
/* Exported macro ------------------------------------------------------------*/ /* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */ /* 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 */ /* USER CODE END EM */
/* Exported functions prototypes ---------------------------------------------*/ /* Exported functions prototypes ---------------------------------------------*/
+5 -2
View File
@@ -32,7 +32,7 @@ extern osMessageQueueId_t xUARTQueue;
* @param arguments: buffer, source, message * @param arguments: buffer, source, message
* @retval None * @retval None
*/ */
static void format_can_message(char *buf, uint8_t source, const CanMessage_t *message) static int format_can_message(char *buf, uint8_t source, const CanMessage_t *message)
{ {
const char hex[] = "0123456789ABCDEF"; const char hex[] = "0123456789ABCDEF";
@@ -72,6 +72,9 @@ static void format_can_message(char *buf, uint8_t source, const CanMessage_t *me
buf[idx++] = '\r'; buf[idx++] = '\r';
buf[idx++] = '\n'; buf[idx++] = '\n';
buf[idx] = '\0';
return idx;
} }
/* END format_can_message */ /* END format_can_message */
@@ -108,7 +111,7 @@ void vUARTLogger(void *argument)
{ {
DEBUG_PRINT("CAN frame detected\r\n"); DEBUG_PRINT("CAN frame detected\r\n");
format_can_message(tx_buffer, message.source, &message); format_can_message(tx_buffer, message.source, &message);
HAL_UART_Transmit_DMA(&huart1, (uint8_t*)tx_buffer, 44); HAL_UART_Transmit_DMA(&huart1, (uint8_t*)tx_buffer, len);
osSemaphoreAcquire(xUARTDMASemaphore, osWaitForever); osSemaphoreAcquire(xUARTDMASemaphore, osWaitForever);
DEBUG_PRINT("CAN frame sent via UART\r\n"); DEBUG_PRINT("CAN frame sent via UART\r\n");
} }
+27 -23
View File
@@ -48,9 +48,9 @@ DMA_HandleTypeDef hdma_sdio_tx;
UART_HandleTypeDef huart1; UART_HandleTypeDef huart1;
/* USER CODE BEGIN PV */ /* USER CODE BEGIN PV */
LED_Config led_can1 = {GPIOB, GPIO_PIN_2}; LED_Config led_can1 = {GPIOB, GPIO_PIN_5};
LED_Config led_can2 = {GPIOB, GPIO_PIN_5}; LED_Config led_can2 = {GPIOB, GPIO_PIN_6};
LED_Config led_error = {GPIOB, GPIO_PIN_3}; LED_Config led_error = {GPIOB, GPIO_PIN_7};
osThreadId_t xCAN1rxTask; osThreadId_t xCAN1rxTask;
osThreadId_t xCAN2rxTask; osThreadId_t xCAN2rxTask;
@@ -76,6 +76,12 @@ static void MX_SDIO_SD_Init(void);
static void MX_USART1_UART_Init(void); static void MX_USART1_UART_Init(void);
/* USER CODE BEGIN PFP */ /* 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 */ /* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/ /* Private user code ---------------------------------------------------------*/
@@ -350,16 +356,16 @@ static void MX_SDIO_SD_Init(void)
hsd.Init.BusWide = SDIO_BUS_WIDE_1B; hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE; hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
hsd.Init.ClockDiv = 0; hsd.Init.ClockDiv = 0;
if (HAL_SD_Init(&hsd) != HAL_OK) //if (HAL_SD_Init(&hsd) != HAL_OK)
{ //{
Error_Handler(); // Error_Handler();
} //}
if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK) //if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK)
{ //{
Error_Handler(); // Error_Handler();
} //}
/* USER CODE BEGIN SDIO_Init 2 */ /* USER CODE BEGIN SDIO_Init 2 */
DEBUG_PRINT("SDIO initialized!\r\n"); //DEBUG_PRINT("SDIO initialized!\r\n");
/* USER CODE END SDIO_Init 2 */ /* USER CODE END SDIO_Init 2 */
} }
@@ -439,7 +445,7 @@ static void MX_GPIO_Init(void)
__HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE();
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_RESET);
/*Configure GPIO pins : PC13 PC14 PC15 PC0 /*Configure GPIO pins : PC13 PC14 PC15 PC0
PC1 PC2 PC3 PC4 PC1 PC2 PC3 PC4
@@ -459,28 +465,26 @@ static void MX_GPIO_Init(void)
/*Configure GPIO pins : PA0 PA1 PA2 PA3 /*Configure GPIO pins : PA0 PA1 PA2 PA3
PA4 PA5 PA6 PA7 PA4 PA5 PA6 PA7
PA8 PA11 PA12 PA13 PA8 PA11 PA12 PA15 */
PA14 PA15 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 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_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
|GPIO_PIN_8|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13 |GPIO_PIN_8|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_15;
|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pins : PB0 PB1 PB2 PB10 /*Configure GPIO pins : PB0 PB1 PB2 PB10
PB11 PB14 PB15 PB6 PB11 PB14 PB15 PB3
PB7 */ PB4 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10 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_6 |GPIO_PIN_11|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_3
|GPIO_PIN_7; |GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pins : PB4 PB5 */ /*Configure GPIO pins : PB5 PB6 PB7 */
GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5; GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+21 -15
View File
@@ -70,22 +70,24 @@ Mcu.Name=STM32F405RGTx
Mcu.Package=LQFP64 Mcu.Package=LQFP64
Mcu.Pin0=PB12 Mcu.Pin0=PB12
Mcu.Pin1=PB13 Mcu.Pin1=PB13
Mcu.Pin10=PB3 Mcu.Pin10=PC12
Mcu.Pin11=PB4 Mcu.Pin11=PD2
Mcu.Pin12=PB5 Mcu.Pin12=PB5
Mcu.Pin13=PB8 Mcu.Pin13=PB6
Mcu.Pin14=PB9 Mcu.Pin14=PB7
Mcu.Pin15=VP_FREERTOS_VS_CMSIS_V2 Mcu.Pin15=PB8
Mcu.Pin16=VP_SYS_VS_tim6 Mcu.Pin16=PB9
Mcu.Pin17=VP_FREERTOS_VS_CMSIS_V2
Mcu.Pin18=VP_SYS_VS_tim6
Mcu.Pin2=PC8 Mcu.Pin2=PC8
Mcu.Pin3=PC9 Mcu.Pin3=PC9
Mcu.Pin4=PA9 Mcu.Pin4=PA9
Mcu.Pin5=PA10 Mcu.Pin5=PA10
Mcu.Pin6=PC10 Mcu.Pin6=PA13
Mcu.Pin7=PC11 Mcu.Pin7=PA14
Mcu.Pin8=PC12 Mcu.Pin8=PC10
Mcu.Pin9=PD2 Mcu.Pin9=PC11
Mcu.PinsNb=17 Mcu.PinsNb=19
Mcu.ThirdPartyNb=0 Mcu.ThirdPartyNb=0
Mcu.UserConstants= Mcu.UserConstants=
Mcu.UserName=STM32F405RGTx Mcu.UserName=STM32F405RGTx
@@ -113,18 +115,22 @@ NVIC.TimeBaseIP=TIM6
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
PA10.Mode=Asynchronous PA10.Mode=Asynchronous
PA10.Signal=USART1_RX 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.Mode=Asynchronous
PA9.Signal=USART1_TX PA9.Signal=USART1_TX
PB12.Mode=CAN_Activate PB12.Mode=CAN_Activate
PB12.Signal=CAN2_RX PB12.Signal=CAN2_RX
PB13.Mode=CAN_Activate PB13.Mode=CAN_Activate
PB13.Signal=CAN2_TX PB13.Signal=CAN2_TX
PB3.Locked=true
PB3.Signal=GPIO_Output
PB4.Locked=true
PB4.Signal=GPIO_Output
PB5.Locked=true PB5.Locked=true
PB5.Signal=GPIO_Output PB5.Signal=GPIO_Output
PB6.Locked=true
PB6.Signal=GPIO_Output
PB7.Locked=true
PB7.Signal=GPIO_Output
PB8.Mode=CAN_Activate PB8.Mode=CAN_Activate
PB8.Signal=CAN1_RX PB8.Signal=CAN1_RX
PB9.Locked=true PB9.Locked=true