using LPUART to forward Bluetooth messages !

This commit is contained in:
2024-08-10 03:28:37 +02:00
parent 8e3b1526aa
commit b02f4af38d
9 changed files with 94 additions and 5 deletions

View File

@@ -43,11 +43,13 @@
#include "BSP_GPIO.h"
#include "BSP_ADC.h"
#include "ram_loader.h"
#include "AsyncComm.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
uint8_t lp_buffer[2][1024] = {0};
extern uart_desc_t uart_half;
__attribute__((__section__(".dma_buffer"))) uint8_t lp_buffer[2][2048] = {0};
uint8_t swap_index = 0;
/* USER CODE END PTD */
@@ -142,13 +144,19 @@ int main(void)
BSP_GPIO_PeriperalsOn();
BSP_POWER_Init();
ULOG_INIT();
//ULOG_SUBSCRIBE(ULOG_SendLPUART,ULOG_DEBUG_LEVEL);
ULOG_SUBSCRIBE(ULOG_SendLPUART,ULOG_DEBUG_LEVEL);
ULOG_DEBUG("Setup Logger");
gCLS_DEVICE_ADDRESS = 0x11; // Address is set to master
ULOG_DEBUG("Setting Global CLS address to 0b10001");
ULOG_DEBUG("Init Kernel and start schedule");
//HAL_UART_Receive(&hlpuart1, lp_buffer[swap_index], 10, 10000);
HAL_UART_Receive_DMA(&hlpuart1, lp_buffer[0], 1024);
HAL_StatusTypeDef status = HAL_UARTEx_ReceiveToIdle_DMA(&hlpuart1, lp_buffer[swap_index], 2048);
if(status != HAL_OK){
ULOG_ERROR("Failed to start DMA");
Error_Handler();
}
/* USER CODE END 2 */
@@ -172,6 +180,37 @@ int main(void)
/* USER CODE END 3 */
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
if(huart->Instance ==LPUART1){
uint8_t new_index = (swap_index + 1) % 2;
HAL_UARTEx_ReceiveToIdle_DMA(&hlpuart1, lp_buffer[new_index], 2048);
usart_send_data(&uart_half, lp_buffer[swap_index], 2048);
swap_index = new_index;
}
}
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
//restarts the DMA listening of the UART rx (next 247 bytes)
if(huart->Instance ==LPUART1){
uint8_t new_index = (swap_index + 1) % 2;
HAL_UARTEx_ReceiveToIdle_DMA(&hlpuart1, lp_buffer[new_index], 2048);
usart_send_data(&uart_half, lp_buffer[swap_index], Size);
swap_index = new_index;
}
return;
}
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
if(huart->Instance ==LPUART1){
swap_index = (swap_index + 1) % 2;
HAL_UARTEx_ReceiveToIdle_DMA(&hlpuart1, lp_buffer[swap_index], 2048);
}
}
/**
* @brief System Clock Configuration
* @retval None

View File

@@ -65,6 +65,7 @@ extern FDCAN_HandleTypeDef hfdcan2;
extern LPTIM_HandleTypeDef hlptim4;
extern DMA_HandleTypeDef hdma_lpuart1_rx;
extern DMA_HandleTypeDef hdma_lpuart1_tx;
extern UART_HandleTypeDef hlpuart1;
extern RTC_HandleTypeDef hrtc;
extern SD_HandleTypeDef hsd1;
extern TIM_HandleTypeDef htim2;
@@ -519,6 +520,22 @@ void LPTIM4_IRQHandler(void)
/* USER CODE END LPTIM4_IRQn 1 */
}
/**
* @brief This function handles LPUART1 global interrupt.
*/
void LPUART1_IRQHandler(void)
{
/* USER CODE BEGIN LPUART1_IRQn 0 */
/* USER CODE END LPUART1_IRQn 0 */
HAL_UART_IRQHandler(&hlpuart1);
/* USER CODE BEGIN LPUART1_IRQn 1 */
/* USER CODE END LPUART1_IRQn 1 */
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */

View File

@@ -41,7 +41,7 @@ void MX_LPUART1_UART_Init(void)
/* USER CODE END LPUART1_Init 1 */
hlpuart1.Instance = LPUART1;
hlpuart1.Init.BaudRate = 1000000;
hlpuart1.Init.BaudRate = 3000000;
hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
hlpuart1.Init.StopBits = UART_STOPBITS_1;
hlpuart1.Init.Parity = UART_PARITY_NONE;
@@ -377,6 +377,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
__HAL_LINKDMA(uartHandle,hdmatx,hdma_lpuart1_tx);
/* LPUART1 interrupt Init */
HAL_NVIC_SetPriority(LPUART1_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(LPUART1_IRQn);
/* USER CODE BEGIN LPUART1_MspInit 1 */
/* USER CODE END LPUART1_MspInit 1 */
@@ -405,6 +408,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
/* LPUART1 DMA DeInit */
HAL_DMA_DeInit(uartHandle->hdmarx);
HAL_DMA_DeInit(uartHandle->hdmatx);
/* LPUART1 interrupt Deinit */
HAL_NVIC_DisableIRQ(LPUART1_IRQn);
/* USER CODE BEGIN LPUART1_MspDeInit 1 */
/* USER CODE END LPUART1_MspDeInit 1 */