Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a6daf6c172 |
+2
-10
@@ -26,11 +26,11 @@ extern "C" {
|
|||||||
|
|
||||||
/* 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 ------------------------------------------------------------*/
|
||||||
@@ -45,15 +45,7 @@ extern "C" {
|
|||||||
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN EM */
|
/* USER CODE BEGIN EM */
|
||||||
//#define DEBUG_ITM
|
|
||||||
//#define DEBUG_DUMMY_FRAME
|
|
||||||
|
|
||||||
#ifdef DEBUG_ITM
|
|
||||||
#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 ---------------------------------------------*/
|
||||||
|
|||||||
@@ -52,12 +52,10 @@ void MemManage_Handler(void);
|
|||||||
void BusFault_Handler(void);
|
void BusFault_Handler(void);
|
||||||
void UsageFault_Handler(void);
|
void UsageFault_Handler(void);
|
||||||
void DebugMon_Handler(void);
|
void DebugMon_Handler(void);
|
||||||
void USART1_IRQHandler(void);
|
|
||||||
void SDIO_IRQHandler(void);
|
void SDIO_IRQHandler(void);
|
||||||
void TIM6_DAC_IRQHandler(void);
|
void TIM6_DAC_IRQHandler(void);
|
||||||
void DMA2_Stream3_IRQHandler(void);
|
void DMA2_Stream3_IRQHandler(void);
|
||||||
void DMA2_Stream6_IRQHandler(void);
|
void DMA2_Stream6_IRQHandler(void);
|
||||||
void DMA2_Stream7_IRQHandler(void);
|
|
||||||
/* USER CODE BEGIN EFP */
|
/* USER CODE BEGIN EFP */
|
||||||
|
|
||||||
/* USER CODE END EFP */
|
/* USER CODE END EFP */
|
||||||
|
|||||||
+5
-11
@@ -15,7 +15,6 @@
|
|||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
#include "canlog.h"
|
#include "canlog.h"
|
||||||
#include "main.h"
|
|
||||||
/* Private includes ----------------------------------------------------------*/
|
/* Private includes ----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
#include "cmsis_os.h"
|
#include "cmsis_os.h"
|
||||||
@@ -51,9 +50,11 @@ void CAN_Logger_Init(CAN_HandleTypeDef *hcan1, CAN_HandleTypeDef *hcan2)
|
|||||||
|
|
||||||
filter.FilterBank = 0;
|
filter.FilterBank = 0;
|
||||||
if (HAL_CAN_ConfigFilter(hcan1, &filter) != HAL_OK) Error_Handler();
|
if (HAL_CAN_ConfigFilter(hcan1, &filter) != HAL_OK) Error_Handler();
|
||||||
|
if (HAL_CAN_Start(hcan1) != HAL_OK) Error_Handler();
|
||||||
|
|
||||||
filter.FilterBank = 14;
|
filter.FilterBank = 14;
|
||||||
if (HAL_CAN_ConfigFilter(hcan2, &filter) != HAL_OK) Error_Handler();
|
if (HAL_CAN_ConfigFilter(hcan2, &filter) != HAL_OK) Error_Handler();
|
||||||
|
if (HAL_CAN_Start(hcan2) != HAL_OK) Error_Handler();
|
||||||
}
|
}
|
||||||
/* END CAN_Logger_Init */
|
/* END CAN_Logger_Init */
|
||||||
|
|
||||||
@@ -75,8 +76,7 @@ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
|
|||||||
// TODO: manage the case of FIFO overflow
|
// TODO: manage the case of FIFO overflow
|
||||||
if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &rxHeader, data) != HAL_OK) return;
|
if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &rxHeader, data) != HAL_OK) return;
|
||||||
|
|
||||||
if (rxHeader.IDE == CAN_ID_EXT) message.id = rxHeader.ExtId;
|
message.id = rxHeader.ExtId;
|
||||||
else message.id = rxHeader.StdId;
|
|
||||||
message.dlc = rxHeader.DLC;
|
message.dlc = rxHeader.DLC;
|
||||||
message.isExtended = (rxHeader.IDE == CAN_ID_EXT);
|
message.isExtended = (rxHeader.IDE == CAN_ID_EXT);
|
||||||
message.source = (hcan->Instance == CAN1) ? 1 : 2;
|
message.source = (hcan->Instance == CAN1) ? 1 : 2;
|
||||||
@@ -112,23 +112,17 @@ void vCANListener(void *argument)
|
|||||||
osMessageQueueId_t queue = (hcan->Instance == CAN1) ? xCAN1RxQueue : xCAN2RxQueue;
|
osMessageQueueId_t queue = (hcan->Instance == CAN1) ? xCAN1RxQueue : xCAN2RxQueue;
|
||||||
CanMessage_t message;
|
CanMessage_t message;
|
||||||
|
|
||||||
if (HAL_CAN_Start(hcan) != HAL_OK) Error_Handler();
|
|
||||||
HAL_CAN_ActivateNotification(hcan, CAN_IT_RX_FIFO0_MSG_PENDING);
|
HAL_CAN_ActivateNotification(hcan, CAN_IT_RX_FIFO0_MSG_PENDING);
|
||||||
|
|
||||||
uint32_t irqn = (hcan->Instance == CAN1) ? CAN1_RX0_IRQn : CAN2_RX0_IRQn;
|
|
||||||
HAL_NVIC_SetPriority(irqn, 6, 0);
|
|
||||||
HAL_NVIC_EnableIRQ(irqn);
|
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (osMessageQueueGet(queue, &message, NULL, 1000) == osOK)
|
if (osMessageQueueGet(queue, &message, NULL, osWaitForever) == osOK)
|
||||||
{
|
{
|
||||||
// J1939 decoding
|
// J1939 decoding
|
||||||
|
|
||||||
|
// RELAY: Push to the UART queue
|
||||||
osMessageQueuePut(xUARTQueue, &message, 0U, 0U);
|
osMessageQueuePut(xUARTQueue, &message, 0U, 0U);
|
||||||
}
|
}
|
||||||
else DEBUG_PRINT("No CAN yet!\r\n");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* END vCANListener */
|
/* END vCANListener */
|
||||||
|
|||||||
+5
-46
@@ -32,7 +32,7 @@ extern osMessageQueueId_t xUARTQueue;
|
|||||||
* @param arguments: buffer, source, message
|
* @param arguments: buffer, source, message
|
||||||
* @retval None
|
* @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";
|
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++] = '\r';
|
||||||
buf[idx++] = '\n';
|
buf[idx++] = '\n';
|
||||||
buf[idx] = '\0';
|
|
||||||
|
|
||||||
return idx;
|
|
||||||
}
|
}
|
||||||
/* END format_can_message */
|
/* END format_can_message */
|
||||||
|
|
||||||
@@ -104,51 +101,13 @@ void vUARTLogger(void *argument)
|
|||||||
CanMessage_t message;
|
CanMessage_t message;
|
||||||
char tx_buffer[45];
|
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 (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
DEBUG_PRINT("Waiting for CAN traffic...\r\n");
|
if (osMessageQueueGet(xUARTQueue, &message, NULL, osWaitForever) == osOK)
|
||||||
|
|
||||||
#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)
|
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);
|
||||||
int len = format_can_message(tx_buffer, message.source, &message);
|
osSemaphoreAcquire(xUARTDMASemaphore, osWaitForever);
|
||||||
|
|
||||||
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
|
|
||||||
{
|
|
||||||
DEBUG_PRINT("ERROR: Semaphore timeout! UART might be stuck in BUSY state.\r\n");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+32
-58
@@ -46,12 +46,11 @@ DMA_HandleTypeDef hdma_sdio_rx;
|
|||||||
DMA_HandleTypeDef hdma_sdio_tx;
|
DMA_HandleTypeDef hdma_sdio_tx;
|
||||||
|
|
||||||
UART_HandleTypeDef huart1;
|
UART_HandleTypeDef huart1;
|
||||||
DMA_HandleTypeDef hdma_usart1_tx;
|
|
||||||
|
|
||||||
/* USER CODE BEGIN PV */
|
/* USER CODE BEGIN PV */
|
||||||
LED_Config led_can1 = {GPIOB, GPIO_PIN_5};
|
LED_Config led_can1 = {GPIOB, GPIO_PIN_2};
|
||||||
LED_Config led_can2 = {GPIOB, GPIO_PIN_6};
|
LED_Config led_can2 = {GPIOB, GPIO_PIN_5};
|
||||||
LED_Config led_error = {GPIOB, GPIO_PIN_7};
|
LED_Config led_error = {GPIOB, GPIO_PIN_3};
|
||||||
|
|
||||||
osThreadId_t xCAN1rxTask;
|
osThreadId_t xCAN1rxTask;
|
||||||
osThreadId_t xCAN2rxTask;
|
osThreadId_t xCAN2rxTask;
|
||||||
@@ -77,11 +76,6 @@ 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 ---------------------------------------------------------*/
|
||||||
@@ -97,15 +91,7 @@ int main(void)
|
|||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
if (CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk)
|
|
||||||
{
|
|
||||||
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 */
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
/* MCU Configuration--------------------------------------------------------*/
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
@@ -114,7 +100,6 @@ int main(void)
|
|||||||
HAL_Init();
|
HAL_Init();
|
||||||
|
|
||||||
/* USER CODE BEGIN Init */
|
/* USER CODE BEGIN Init */
|
||||||
DEBUG_PRINT("Configuring system clock\r\n");
|
|
||||||
|
|
||||||
/* USER CODE END Init */
|
/* USER CODE END Init */
|
||||||
|
|
||||||
@@ -122,7 +107,7 @@ int main(void)
|
|||||||
SystemClock_Config();
|
SystemClock_Config();
|
||||||
|
|
||||||
/* USER CODE BEGIN SysInit */
|
/* USER CODE BEGIN SysInit */
|
||||||
DEBUG_PRINT("Initializing configured peripherals...\r\n");
|
|
||||||
/* USER CODE END SysInit */
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
/* Initialize all configured peripherals */
|
/* Initialize all configured peripherals */
|
||||||
@@ -133,15 +118,12 @@ int main(void)
|
|||||||
MX_SDIO_SD_Init();
|
MX_SDIO_SD_Init();
|
||||||
MX_USART1_UART_Init();
|
MX_USART1_UART_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
DEBUG_PRINT("Initializing CAN bus logger\r\n");
|
|
||||||
CAN_Logger_Init(&hcan1, &hcan2);
|
CAN_Logger_Init(&hcan1, &hcan2);
|
||||||
/* USER CODE END 2 */
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
/* Init scheduler */
|
/* Init scheduler */
|
||||||
osKernelInitialize();
|
osKernelInitialize();
|
||||||
|
|
||||||
DEBUG_PRINT("Creating RTOS entities\r\n");
|
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_TASKS */
|
/* USER CODE BEGIN RTOS_TASKS */
|
||||||
const osThreadAttr_t CAN1rxAttributes = {
|
const osThreadAttr_t CAN1rxAttributes = {
|
||||||
.name = "CAN1rx",
|
.name = "CAN1rx",
|
||||||
@@ -174,7 +156,7 @@ int main(void)
|
|||||||
/* USER CODE END RTOS_MUTEX */
|
/* USER CODE END RTOS_MUTEX */
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_SEMAPHORES */
|
/* USER CODE BEGIN RTOS_SEMAPHORES */
|
||||||
xUARTDMASemaphore = osSemaphoreNew(1, 1, NULL);
|
xUARTDMASemaphore = osSemaphoreNew(1, 0, NULL);
|
||||||
if (xUARTDMASemaphore == NULL) Error_Handler();
|
if (xUARTDMASemaphore == NULL) Error_Handler();
|
||||||
/* USER CODE END RTOS_SEMAPHORES */
|
/* USER CODE END RTOS_SEMAPHORES */
|
||||||
|
|
||||||
@@ -201,7 +183,6 @@ int main(void)
|
|||||||
/* USER CODE END RTOS_EVENTS */
|
/* USER CODE END RTOS_EVENTS */
|
||||||
|
|
||||||
/* Start scheduler */
|
/* Start scheduler */
|
||||||
DEBUG_PRINT("Starting RTOS init scheduler\r\n");
|
|
||||||
osKernelStart();
|
osKernelStart();
|
||||||
|
|
||||||
/* We should never get here as control is now taken by the scheduler */
|
/* We should never get here as control is now taken by the scheduler */
|
||||||
@@ -213,7 +194,6 @@ int main(void)
|
|||||||
/* USER CODE END WHILE */
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
/* USER CODE BEGIN 3 */
|
/* USER CODE BEGIN 3 */
|
||||||
DEBUG_PRINT("ERROR: RTOS scheduler crashed!\r\n");
|
|
||||||
/* USER CODE END 3 */
|
/* USER CODE END 3 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -280,7 +260,7 @@ static void MX_CAN1_Init(void)
|
|||||||
|
|
||||||
/* USER CODE END CAN1_Init 1 */
|
/* USER CODE END CAN1_Init 1 */
|
||||||
hcan1.Instance = CAN1;
|
hcan1.Instance = CAN1;
|
||||||
hcan1.Init.Prescaler = 8;
|
hcan1.Init.Prescaler = 4;
|
||||||
hcan1.Init.Mode = CAN_MODE_SILENT;
|
hcan1.Init.Mode = CAN_MODE_SILENT;
|
||||||
hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;
|
hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;
|
||||||
hcan1.Init.TimeSeg1 = CAN_BS1_16TQ;
|
hcan1.Init.TimeSeg1 = CAN_BS1_16TQ;
|
||||||
@@ -296,7 +276,7 @@ static void MX_CAN1_Init(void)
|
|||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN CAN1_Init 2 */
|
/* USER CODE BEGIN CAN1_Init 2 */
|
||||||
DEBUG_PRINT("CAN1 initialized!\r\n");
|
|
||||||
/* USER CODE END CAN1_Init 2 */
|
/* USER CODE END CAN1_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -317,7 +297,7 @@ static void MX_CAN2_Init(void)
|
|||||||
|
|
||||||
/* USER CODE END CAN2_Init 1 */
|
/* USER CODE END CAN2_Init 1 */
|
||||||
hcan2.Instance = CAN2;
|
hcan2.Instance = CAN2;
|
||||||
hcan2.Init.Prescaler = 16;
|
hcan2.Init.Prescaler = 8;
|
||||||
hcan2.Init.Mode = CAN_MODE_SILENT;
|
hcan2.Init.Mode = CAN_MODE_SILENT;
|
||||||
hcan2.Init.SyncJumpWidth = CAN_SJW_1TQ;
|
hcan2.Init.SyncJumpWidth = CAN_SJW_1TQ;
|
||||||
hcan2.Init.TimeSeg1 = CAN_BS1_16TQ;
|
hcan2.Init.TimeSeg1 = CAN_BS1_16TQ;
|
||||||
@@ -333,7 +313,7 @@ static void MX_CAN2_Init(void)
|
|||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN CAN2_Init 2 */
|
/* USER CODE BEGIN CAN2_Init 2 */
|
||||||
DEBUG_PRINT("CAN2 initialized!\r\n");
|
|
||||||
/* USER CODE END CAN2_Init 2 */
|
/* USER CODE END CAN2_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -360,16 +340,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");
|
|
||||||
/* USER CODE END SDIO_Init 2 */
|
/* USER CODE END SDIO_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -390,7 +370,7 @@ static void MX_USART1_UART_Init(void)
|
|||||||
|
|
||||||
/* USER CODE END USART1_Init 1 */
|
/* USER CODE END USART1_Init 1 */
|
||||||
huart1.Instance = USART1;
|
huart1.Instance = USART1;
|
||||||
huart1.Init.BaudRate = 115200;
|
huart1.Init.BaudRate = 1152000;
|
||||||
huart1.Init.WordLength = UART_WORDLENGTH_8B;
|
huart1.Init.WordLength = UART_WORDLENGTH_8B;
|
||||||
huart1.Init.StopBits = UART_STOPBITS_1;
|
huart1.Init.StopBits = UART_STOPBITS_1;
|
||||||
huart1.Init.Parity = UART_PARITY_NONE;
|
huart1.Init.Parity = UART_PARITY_NONE;
|
||||||
@@ -402,7 +382,7 @@ static void MX_USART1_UART_Init(void)
|
|||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN USART1_Init 2 */
|
/* USER CODE BEGIN USART1_Init 2 */
|
||||||
DEBUG_PRINT("USART1 initialized!\r\n");
|
|
||||||
/* USER CODE END USART1_Init 2 */
|
/* USER CODE END USART1_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -423,13 +403,7 @@ static void MX_DMA_Init(void)
|
|||||||
/* DMA2_Stream6_IRQn interrupt configuration */
|
/* DMA2_Stream6_IRQn interrupt configuration */
|
||||||
HAL_NVIC_SetPriority(DMA2_Stream6_IRQn, 5, 0);
|
HAL_NVIC_SetPriority(DMA2_Stream6_IRQn, 5, 0);
|
||||||
HAL_NVIC_EnableIRQ(DMA2_Stream6_IRQn);
|
HAL_NVIC_EnableIRQ(DMA2_Stream6_IRQn);
|
||||||
/* DMA2_Stream7_IRQn interrupt configuration */
|
|
||||||
HAL_NVIC_SetPriority(DMA2_Stream7_IRQn, 5, 0);
|
|
||||||
HAL_NVIC_EnableIRQ(DMA2_Stream7_IRQn);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN MX_DMA_Init 1 */
|
|
||||||
DEBUG_PRINT("DMA initialized!\r\n");
|
|
||||||
/* USER CODE END MX_DMA_Init 1 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -452,7 +426,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_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
|
/*Configure GPIO pins : PC13 PC14 PC15 PC0
|
||||||
PC1 PC2 PC3 PC4
|
PC1 PC2 PC3 PC4
|
||||||
@@ -472,33 +446,35 @@ 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 PA15 */
|
PA8 PA11 PA12 PA13
|
||||||
|
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_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.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 PB3
|
PB11 PB14 PB15 PB6
|
||||||
PB4 */
|
PB7 */
|
||||||
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_3
|
|GPIO_PIN_11|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_6
|
||||||
|GPIO_PIN_4;
|
|GPIO_PIN_7;
|
||||||
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 : PB5 PB6 PB7 */
|
/*Configure GPIO pins : PB3 PB4 PB5 */
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
|
GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;
|
||||||
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;
|
||||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
DEBUG_PRINT("GPIO initialized!\r\n");
|
|
||||||
/* USER CODE END MX_GPIO_Init_2 */
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -533,8 +509,6 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
|||||||
*/
|
*/
|
||||||
void Error_Handler(void)
|
void Error_Handler(void)
|
||||||
{
|
{
|
||||||
DEBUG_PRINT("ERROR: entering error handler\r\n");
|
|
||||||
|
|
||||||
/* USER CODE BEGIN Error_Handler_Debug */
|
/* USER CODE BEGIN Error_Handler_Debug */
|
||||||
/* User can add his own implementation to report the HAL error return state */
|
/* User can add his own implementation to report the HAL error return state */
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
|
|||||||
@@ -26,8 +26,6 @@ extern DMA_HandleTypeDef hdma_sdio_rx;
|
|||||||
|
|
||||||
extern DMA_HandleTypeDef hdma_sdio_tx;
|
extern DMA_HandleTypeDef hdma_sdio_tx;
|
||||||
|
|
||||||
extern DMA_HandleTypeDef hdma_usart1_tx;
|
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN TD */
|
/* USER CODE BEGIN TD */
|
||||||
|
|
||||||
@@ -373,28 +371,6 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
|
|||||||
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
|
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
|
||||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* USART1 DMA Init */
|
|
||||||
/* USART1_TX Init */
|
|
||||||
hdma_usart1_tx.Instance = DMA2_Stream7;
|
|
||||||
hdma_usart1_tx.Init.Channel = DMA_CHANNEL_4;
|
|
||||||
hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
|
|
||||||
hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
|
|
||||||
hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE;
|
|
||||||
hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
|
||||||
hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
|
||||||
hdma_usart1_tx.Init.Mode = DMA_NORMAL;
|
|
||||||
hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW;
|
|
||||||
hdma_usart1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
|
|
||||||
if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
|
|
||||||
__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 BEGIN USART1_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END USART1_MspInit 1 */
|
/* USER CODE END USART1_MspInit 1 */
|
||||||
@@ -425,11 +401,6 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
|
|||||||
*/
|
*/
|
||||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
|
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
|
||||||
|
|
||||||
/* USART1 DMA DeInit */
|
|
||||||
HAL_DMA_DeInit(huart->hdmatx);
|
|
||||||
|
|
||||||
/* USART1 interrupt DeInit */
|
|
||||||
HAL_NVIC_DisableIRQ(USART1_IRQn);
|
|
||||||
/* USER CODE BEGIN USART1_MspDeInit 1 */
|
/* USER CODE BEGIN USART1_MspDeInit 1 */
|
||||||
|
|
||||||
/* USER CODE END USART1_MspDeInit 1 */
|
/* USER CODE END USART1_MspDeInit 1 */
|
||||||
|
|||||||
@@ -58,8 +58,6 @@
|
|||||||
extern DMA_HandleTypeDef hdma_sdio_rx;
|
extern DMA_HandleTypeDef hdma_sdio_rx;
|
||||||
extern DMA_HandleTypeDef hdma_sdio_tx;
|
extern DMA_HandleTypeDef hdma_sdio_tx;
|
||||||
extern SD_HandleTypeDef hsd;
|
extern SD_HandleTypeDef hsd;
|
||||||
extern DMA_HandleTypeDef hdma_usart1_tx;
|
|
||||||
extern UART_HandleTypeDef huart1;
|
|
||||||
extern TIM_HandleTypeDef htim6;
|
extern TIM_HandleTypeDef htim6;
|
||||||
|
|
||||||
/* USER CODE BEGIN EV */
|
/* USER CODE BEGIN EV */
|
||||||
@@ -164,20 +162,6 @@ void DebugMon_Handler(void)
|
|||||||
/* please refer to the startup file (startup_stm32f4xx.s). */
|
/* 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.
|
* @brief This function handles SDIO global interrupt.
|
||||||
*/
|
*/
|
||||||
@@ -234,20 +218,6 @@ void DMA2_Stream6_IRQHandler(void)
|
|||||||
/* USER CODE END DMA2_Stream6_IRQn 1 */
|
/* USER CODE END DMA2_Stream6_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This function handles DMA2 stream7 global interrupt.
|
|
||||||
*/
|
|
||||||
void DMA2_Stream7_IRQHandler(void)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN DMA2_Stream7_IRQn 0 */
|
|
||||||
|
|
||||||
/* USER CODE END DMA2_Stream7_IRQn 0 */
|
|
||||||
HAL_DMA_IRQHandler(&hdma_usart1_tx);
|
|
||||||
/* USER CODE BEGIN DMA2_Stream7_IRQn 1 */
|
|
||||||
|
|
||||||
/* USER CODE END DMA2_Stream7_IRQn 1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END 1 */
|
||||||
|
|||||||
-38
@@ -1,38 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
# 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)
|
|
||||||
+16
-35
@@ -20,8 +20,7 @@ CAN2.Mode=CAN_MODE_SILENT
|
|||||||
CAN2.Prescaler=8
|
CAN2.Prescaler=8
|
||||||
Dma.Request0=SDIO_RX
|
Dma.Request0=SDIO_RX
|
||||||
Dma.Request1=SDIO_TX
|
Dma.Request1=SDIO_TX
|
||||||
Dma.Request2=USART1_TX
|
Dma.RequestsNb=2
|
||||||
Dma.RequestsNb=3
|
|
||||||
Dma.SDIO_RX.0.Direction=DMA_PERIPH_TO_MEMORY
|
Dma.SDIO_RX.0.Direction=DMA_PERIPH_TO_MEMORY
|
||||||
Dma.SDIO_RX.0.FIFOMode=DMA_FIFOMODE_ENABLE
|
Dma.SDIO_RX.0.FIFOMode=DMA_FIFOMODE_ENABLE
|
||||||
Dma.SDIO_RX.0.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL
|
Dma.SDIO_RX.0.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL
|
||||||
@@ -48,16 +47,6 @@ Dma.SDIO_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_WORD
|
|||||||
Dma.SDIO_TX.1.PeriphInc=DMA_PINC_DISABLE
|
Dma.SDIO_TX.1.PeriphInc=DMA_PINC_DISABLE
|
||||||
Dma.SDIO_TX.1.Priority=DMA_PRIORITY_LOW
|
Dma.SDIO_TX.1.Priority=DMA_PRIORITY_LOW
|
||||||
Dma.SDIO_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,FIFOThreshold,MemBurst,PeriphBurst
|
Dma.SDIO_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,FIFOThreshold,MemBurst,PeriphBurst
|
||||||
Dma.USART1_TX.2.Direction=DMA_MEMORY_TO_PERIPH
|
|
||||||
Dma.USART1_TX.2.FIFOMode=DMA_FIFOMODE_DISABLE
|
|
||||||
Dma.USART1_TX.2.Instance=DMA2_Stream7
|
|
||||||
Dma.USART1_TX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
|
||||||
Dma.USART1_TX.2.MemInc=DMA_MINC_ENABLE
|
|
||||||
Dma.USART1_TX.2.Mode=DMA_NORMAL
|
|
||||||
Dma.USART1_TX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
|
||||||
Dma.USART1_TX.2.PeriphInc=DMA_PINC_DISABLE
|
|
||||||
Dma.USART1_TX.2.Priority=DMA_PRIORITY_LOW
|
|
||||||
Dma.USART1_TX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
|
|
||||||
FREERTOS.FootprintOK=true
|
FREERTOS.FootprintOK=true
|
||||||
FREERTOS.IPParameters=Tasks01,configUSE_NEWLIB_REENTRANT,FootprintOK
|
FREERTOS.IPParameters=Tasks01,configUSE_NEWLIB_REENTRANT,FootprintOK
|
||||||
FREERTOS.Tasks01=DefaultTask,49,128,can_listen,Default,NULL,Dynamic,NULL,NULL
|
FREERTOS.Tasks01=DefaultTask,49,128,can_listen,Default,NULL,Dynamic,NULL,NULL
|
||||||
@@ -81,24 +70,22 @@ Mcu.Name=STM32F405RGTx
|
|||||||
Mcu.Package=LQFP64
|
Mcu.Package=LQFP64
|
||||||
Mcu.Pin0=PB12
|
Mcu.Pin0=PB12
|
||||||
Mcu.Pin1=PB13
|
Mcu.Pin1=PB13
|
||||||
Mcu.Pin10=PC12
|
Mcu.Pin10=PB3
|
||||||
Mcu.Pin11=PD2
|
Mcu.Pin11=PB4
|
||||||
Mcu.Pin12=PB5
|
Mcu.Pin12=PB5
|
||||||
Mcu.Pin13=PB6
|
Mcu.Pin13=PB8
|
||||||
Mcu.Pin14=PB7
|
Mcu.Pin14=PB9
|
||||||
Mcu.Pin15=PB8
|
Mcu.Pin15=VP_FREERTOS_VS_CMSIS_V2
|
||||||
Mcu.Pin16=PB9
|
Mcu.Pin16=VP_SYS_VS_tim6
|
||||||
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=PA13
|
Mcu.Pin6=PC10
|
||||||
Mcu.Pin7=PA14
|
Mcu.Pin7=PC11
|
||||||
Mcu.Pin8=PC10
|
Mcu.Pin8=PC12
|
||||||
Mcu.Pin9=PC11
|
Mcu.Pin9=PD2
|
||||||
Mcu.PinsNb=19
|
Mcu.PinsNb=17
|
||||||
Mcu.ThirdPartyNb=0
|
Mcu.ThirdPartyNb=0
|
||||||
Mcu.UserConstants=
|
Mcu.UserConstants=
|
||||||
Mcu.UserName=STM32F405RGTx
|
Mcu.UserName=STM32F405RGTx
|
||||||
@@ -107,7 +94,6 @@ MxDb.Version=DB.6.0.170
|
|||||||
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
|
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
|
||||||
NVIC.DMA2_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
|
NVIC.DMA2_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
|
||||||
NVIC.DMA2_Stream6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
|
NVIC.DMA2_Stream6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
|
||||||
NVIC.DMA2_Stream7_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
|
|
||||||
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
|
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
|
||||||
NVIC.ForceEnableDMAVector=true
|
NVIC.ForceEnableDMAVector=true
|
||||||
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
|
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
|
||||||
@@ -124,26 +110,21 @@ 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.TIM6_DAC_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true
|
||||||
NVIC.TimeBase=TIM6_DAC_IRQn
|
NVIC.TimeBase=TIM6_DAC_IRQn
|
||||||
NVIC.TimeBaseIP=TIM6
|
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
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user