Compare commits

...

2 Commits

@ -234,7 +234,7 @@
#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U
#define USE_HAL_SPI_REGISTER_CALLBACKS 0U
#define USE_HAL_SWPMI_REGISTER_CALLBACKS 0U
#define USE_HAL_TIM_REGISTER_CALLBACKS 0U
#define USE_HAL_TIM_REGISTER_CALLBACKS 1U
#define USE_HAL_TSC_REGISTER_CALLBACKS 0U
#define USE_HAL_UART_REGISTER_CALLBACKS 1U
#define USE_HAL_USART_REGISTER_CALLBACKS 0U

@ -59,6 +59,7 @@ void DMA1_Channel5_IRQHandler(void);
void USART1_IRQHandler(void);
void USART2_IRQHandler(void);
void TIM6_DAC_IRQHandler(void);
void TIM7_IRQHandler(void);
/* USER CODE BEGIN EFP */
/* USER CODE END EFP */

@ -47,16 +47,18 @@
/* Private variables ---------------------------------------------------------*/
TIM_HandleTypeDef htim2;
TIM_HandleTypeDef htim6;
TIM_HandleTypeDef htim7;
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;
DMA_HandleTypeDef hdma_usart1_rx;
/* USER CODE BEGIN PV */
volatile uint8_t huart2_rxc;
volatile uint8_t huart1_rxc;
static volatile uint32_t sys_time = 0;
static volatile bool b_timer_struck = false;
uint8_t huart2_rxc;
uint8_t huart1_rxc;
static uint32_t sys_time = 0;
static uint32_t _my_time = 0;
static bool b_timer_struck = false;
/* USER CODE END PV */
@ -68,8 +70,11 @@ static void MX_USART2_UART_Init(void);
static void MX_DMA_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_TIM6_Init(void);
static void MX_TIM7_Init(void);
/* USER CODE BEGIN PFP */
static void UART2_RxCpltCallback(UART_HandleTypeDef *huart);
static void _tim6_period_elapsed_cb(TIM_HandleTypeDef *htim);
static void _tim7_period_elapsed_cb(TIM_HandleTypeDef *htim);
/* USER CODE END PFP */
@ -111,11 +116,12 @@ int main(void)
MX_DMA_Init();
MX_USART1_UART_Init();
MX_TIM6_Init();
MX_TIM7_Init();
/* USER CODE BEGIN 2 */
huart2.RxCpltCallback = UART2_RxCpltCallback;
p_uart_init(&huart2);
p_serial_mgr_init(&huart1);
p_serial_mgr_init(&huart1, &hdma_usart1_rx);
// HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
// HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);
@ -128,6 +134,7 @@ int main(void)
mc_init(&htim2);
HAL_UART_Receive_IT(&huart2, &huart2_rxc, 1);
HAL_TIM_Base_Start_IT(&htim6);
HAL_TIM_Base_Start_IT(&htim7);
p_serial_mgr_start();
@ -203,7 +210,7 @@ void SystemClock_Config(void)
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;
RCC_OscInitStruct.PLL.PLLM = 1;
RCC_OscInitStruct.PLL.PLLN = 16;
RCC_OscInitStruct.PLL.PLLN = 36;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
@ -220,7 +227,7 @@ void SystemClock_Config(void)
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
{
Error_Handler();
}
@ -301,9 +308,9 @@ static void MX_TIM6_Init(void)
/* USER CODE END TIM6_Init 1 */
htim6.Instance = TIM6;
htim6.Init.Prescaler = 127;
htim6.Init.Prescaler = 1000;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 249;
htim6.Init.Period = 72;
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
{
@ -316,10 +323,49 @@ static void MX_TIM6_Init(void)
Error_Handler();
}
/* USER CODE BEGIN TIM6_Init 2 */
htim6.PeriodElapsedCallback = _tim6_period_elapsed_cb;
/* USER CODE END TIM6_Init 2 */
}
/**
* @brief TIM7 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM7_Init(void)
{
/* USER CODE BEGIN TIM7_Init 0 */
/* USER CODE END TIM7_Init 0 */
TIM_MasterConfigTypeDef sMasterConfig = {0};
/* USER CODE BEGIN TIM7_Init 1 */
/* USER CODE END TIM7_Init 1 */
htim7.Instance = TIM7;
htim7.Init.Prescaler = 1000;
htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
htim7.Init.Period = 720;
htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim7) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM7_Init 2 */
htim7.PeriodElapsedCallback = _tim7_period_elapsed_cb;
/* USER CODE END TIM7_Init 2 */
}
/**
* @brief USART1 Initialization Function
* @param None
@ -434,22 +480,28 @@ void UART2_RxCpltCallback(UART_HandleTypeDef *huart)
HAL_UART_Transmit(&huart1, &huart2_rxc, 1, 100);
HAL_UART_Receive_IT(&huart2, &huart2_rxc, 1);
}
// void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
// {
// else if (huart == &huart2)
// {
// }
// }
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
void _tim6_period_elapsed_cb(TIM_HandleTypeDef *htim)
{
sys_time += 1;
if (++sys_time % 250 == 0)
sys_time++;
if (sys_time % 1000 == 0)
{
PDEBUG("%d\n", sys_time);
b_timer_struck = true;
}
}
void _tim7_period_elapsed_cb(TIM_HandleTypeDef *htim)
{
_my_time++;
if (_my_time % 100 == 0)
{
PDEBUG("my time: %d\n", _my_time);
}
// do stuff
// every 10ms
}
void setPWM(TIM_HandleTypeDef *timer, uint32_t channel, uint8_t dc_percent)
{
HAL_TIM_PWM_Stop(timer, channel);

@ -123,6 +123,20 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
/* USER CODE END TIM6_MspInit 1 */
}
else if(htim_base->Instance==TIM7)
{
/* USER CODE BEGIN TIM7_MspInit 0 */
/* USER CODE END TIM7_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_TIM7_CLK_ENABLE();
/* TIM7 interrupt Init */
HAL_NVIC_SetPriority(TIM7_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM7_IRQn);
/* USER CODE BEGIN TIM7_MspInit 1 */
/* USER CODE END TIM7_MspInit 1 */
}
}
@ -197,6 +211,20 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
/* USER CODE END TIM6_MspDeInit 1 */
}
else if(htim_base->Instance==TIM7)
{
/* USER CODE BEGIN TIM7_MspDeInit 0 */
/* USER CODE END TIM7_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM7_CLK_DISABLE();
/* TIM7 interrupt DeInit */
HAL_NVIC_DisableIRQ(TIM7_IRQn);
/* USER CODE BEGIN TIM7_MspDeInit 1 */
/* USER CODE END TIM7_MspDeInit 1 */
}
}
@ -247,7 +275,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
hdma_usart1_rx.Init.Request = DMA_REQUEST_2;
hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
hdma_usart1_rx.Init.MemInc = DMA_MINC_DISABLE;
hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_usart1_rx.Init.Mode = DMA_NORMAL;

@ -56,6 +56,7 @@
/* External variables --------------------------------------------------------*/
extern TIM_HandleTypeDef htim6;
extern TIM_HandleTypeDef htim7;
extern DMA_HandleTypeDef hdma_usart1_rx;
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
@ -257,6 +258,20 @@ void TIM6_DAC_IRQHandler(void)
/* USER CODE END TIM6_DAC_IRQn 1 */
}
/**
* @brief This function handles TIM7 global interrupt.
*/
void TIM7_IRQHandler(void)
{
/* USER CODE BEGIN TIM7_IRQn 0 */
/* USER CODE END TIM7_IRQn 0 */
HAL_TIM_IRQHandler(&htim7);
/* USER CODE BEGIN TIM7_IRQn 1 */
/* USER CODE END TIM7_IRQn 1 */
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */

@ -1,5 +1,5 @@
##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [3.16.0] date: [Mon May 02 17:19:20 CDT 2022]
# File automatically-generated by tool: [projectgenerator] version: [3.16.0] date: [Thu Jun 30 14:32:12 CDT 2022]
##########################################################################################################################
# ------------------------------------------------

@ -26,13 +26,13 @@
"-g3",
"-gdwarf-2",
"-D_DEBUG",
"-MFbuild/p_serial_mgr.d",
"-Wa,-a,-ad,-alms=build/p_serial_mgr.lst",
"-MFbuild/main.d",
"-Wa,-a,-ad,-alms=build/main.lst",
"-o",
"build/p_serial_mgr.o",
"shared/drivers/p_serial_mgr.c"
"build/main.o",
"Core/Src/main.c"
],
"directory": "/storage/Shared/Projects/Penguinator/motor_controller",
"file": "shared/drivers/p_serial_mgr.c"
"file": "Core/Src/main.c"
}
]

1072
gdb.txt

File diff suppressed because it is too large Load Diff

@ -4,13 +4,14 @@ Dma.RequestsNb=1
Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY
Dma.USART1_RX.0.Instance=DMA1_Channel5
Dma.USART1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE
Dma.USART1_RX.0.MemInc=DMA_MINC_ENABLE
Dma.USART1_RX.0.MemInc=DMA_MINC_DISABLE
Dma.USART1_RX.0.Mode=DMA_NORMAL
Dma.USART1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
Dma.USART1_RX.0.PeriphInc=DMA_PINC_DISABLE
Dma.USART1_RX.0.Priority=DMA_PRIORITY_LOW
Dma.USART1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
File.Version=6
GPIO.groupedBy=Group By Peripherals
KeepUserPlacement=false
Mcu.CPN=STM32L432KCU3
Mcu.Family=STM32L4
@ -20,9 +21,10 @@ Mcu.IP2=RCC
Mcu.IP3=SYS
Mcu.IP4=TIM2
Mcu.IP5=TIM6
Mcu.IP6=USART1
Mcu.IP7=USART2
Mcu.IPNb=8
Mcu.IP6=TIM7
Mcu.IP7=USART1
Mcu.IP8=USART2
Mcu.IPNb=9
Mcu.Name=STM32L432K(B-C)Ux
Mcu.Package=UFQFPN32
Mcu.Pin0=PC14-OSC32_IN (PC14)
@ -33,6 +35,7 @@ Mcu.Pin12=PA14 (JTCK-SWCLK)
Mcu.Pin13=PA15 (JTDI)
Mcu.Pin14=VP_SYS_VS_Systick
Mcu.Pin15=VP_TIM6_VS_ClockSourceINT
Mcu.Pin16=VP_TIM7_VS_ClockSourceINT
Mcu.Pin2=PA0
Mcu.Pin3=PA1
Mcu.Pin4=PA2
@ -41,7 +44,7 @@ Mcu.Pin6=PA4
Mcu.Pin7=PA5
Mcu.Pin8=PA9
Mcu.Pin9=PA10
Mcu.PinsNb=16
Mcu.PinsNb=17
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32L432KCUx
@ -59,6 +62,7 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
NVIC.SysTick_IRQn=true\:0\:0\:true\:false\:true\:true\:true\:true
NVIC.TIM6_DAC_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TIM7_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
@ -137,64 +141,64 @@ ProjectManager.PreviousToolchain=STM32CubeIDE
ProjectManager.ProjectBuild=false
ProjectManager.ProjectFileName=motor_controller.ioc
ProjectManager.ProjectName=motor_controller
ProjectManager.RegisterCallBack=UART
ProjectManager.RegisterCallBack=UART,TIM
ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=Makefile
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_TIM2_Init-TIM2-false-HAL-true,4-MX_USART2_UART_Init-USART2-false-HAL-true,5-MX_DMA_Init-DMA-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_TIM6_Init-TIM6-false-HAL-true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_TIM2_Init-TIM2-false-HAL-true,4-MX_USART2_UART_Init-USART2-false-HAL-true,5-MX_DMA_Init-DMA-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_TIM6_Init-TIM6-false-HAL-true,8-MX_TIM7_Init-TIM7-false-HAL-true
RCC.48CLKFreq_Value=24000000
RCC.AHBFreq_Value=32000000
RCC.APB1Freq_Value=32000000
RCC.APB1TimFreq_Value=32000000
RCC.APB2Freq_Value=32000000
RCC.APB2TimFreq_Value=32000000
RCC.CortexFreq_Value=32000000
RCC.FCLKCortexFreq_Value=32000000
RCC.AHBFreq_Value=72000000
RCC.APB1Freq_Value=72000000
RCC.APB1TimFreq_Value=72000000
RCC.APB2Freq_Value=72000000
RCC.APB2TimFreq_Value=72000000
RCC.CortexFreq_Value=72000000
RCC.FCLKCortexFreq_Value=72000000
RCC.FamilyName=M
RCC.HCLKFreq_Value=32000000
RCC.HCLKFreq_Value=72000000
RCC.HSE_VALUE=8000000
RCC.HSI16_VALUE=16000000
RCC.HSI48_VALUE=48000000
RCC.HSI_VALUE=16000000
RCC.I2C1Freq_Value=32000000
RCC.I2C1Freq_Value=72000000
RCC.I2C2Freq_Value=16000000
RCC.I2C3Freq_Value=32000000
RCC.I2C3Freq_Value=72000000
RCC.IPParameters=48CLKFreq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI16_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,LCDFreq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIMFreq_Value,LPUART1Freq_Value,LPUARTFreq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,MCOPinFreq_Value,MSI_VALUE,PLLCLKFreq_Value,PLLMUL,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSAI1PoutputFreq_Value,PLLSAI1QoutputFreq_Value,PLLSAI1RoutputFreq_Value,PWRFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SAI1Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,TIMFreq_Value,TimerFreq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAI1OutputFreq_Value,WatchDogFreq_Value
RCC.LCDFreq_Value=37000
RCC.LPTIM1Freq_Value=32000000
RCC.LPTIM2Freq_Value=32000000
RCC.LPTIM1Freq_Value=72000000
RCC.LPTIM2Freq_Value=72000000
RCC.LPTIMFreq_Value=32000000
RCC.LPUART1Freq_Value=32000000
RCC.LPUART1Freq_Value=72000000
RCC.LPUARTFreq_Value=32000000
RCC.LSCOPinFreq_Value=32000
RCC.LSI_VALUE=32000
RCC.MCO1PinFreq_Value=32000000
RCC.MCO1PinFreq_Value=72000000
RCC.MCOPinFreq_Value=32000000
RCC.MSI_VALUE=4000000
RCC.PLLCLKFreq_Value=32000000
RCC.PLLMUL=RCC_PLLMUL_4
RCC.PLLN=16
RCC.PLLPoutputFreq_Value=9142857.142857144
RCC.PLLQoutputFreq_Value=32000000
RCC.PLLRCLKFreq_Value=32000000
RCC.PLLN=36
RCC.PLLPoutputFreq_Value=20571428.57142857
RCC.PLLQoutputFreq_Value=72000000
RCC.PLLRCLKFreq_Value=72000000
RCC.PLLSAI1PoutputFreq_Value=4571428.571428572
RCC.PLLSAI1QoutputFreq_Value=16000000
RCC.PLLSAI1RoutputFreq_Value=16000000
RCC.PWRFreq_Value=32000000
RCC.PWRFreq_Value=72000000
RCC.RTCFreq_Value=32000
RCC.RTCHSEDivFreq_Value=4000000
RCC.SAI1Freq_Value=4571428.571428572
RCC.SWPMI1Freq_Value=32000000
RCC.SYSCLKFreq_VALUE=32000000
RCC.SWPMI1Freq_Value=72000000
RCC.SYSCLKFreq_VALUE=72000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.TIMFreq_Value=32000000
RCC.TimerFreq_Value=32000000
RCC.USART1Freq_Value=32000000
RCC.USART2Freq_Value=32000000
RCC.USART1Freq_Value=72000000
RCC.USART2Freq_Value=72000000
RCC.USART3Freq_Value=16000000
RCC.VCOInputFreq_Value=4000000
RCC.VCOOutputFreq_Value=64000000
RCC.VCOOutputFreq_Value=144000000
RCC.VCOSAI1OutputFreq_Value=32000000
RCC.WatchDogFreq_Value=32000
SH.S_TIM2_CH2.0=TIM2_CH2,PWM Generation2 CH2
@ -210,9 +214,13 @@ TIM2.Prescaler=127
TIM2.Pulse-PWM\ Generation2\ CH2=250
TIM2.Pulse-PWM\ Generation4\ CH4=125
TIM6.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
TIM6.IPParameters=Prescaler,AutoReloadPreload,Period
TIM6.Period=249
TIM6.Prescaler=127
TIM6.IPParameters=Prescaler,Period,AutoReloadPreload
TIM6.Period=72
TIM6.Prescaler=1000
TIM7.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
TIM7.IPParameters=Prescaler,Period,AutoReloadPreload
TIM7.Period=720
TIM7.Prescaler=1000
USART1.IPParameters=VirtualMode-Asynchronous,VirtualMode-Hardware Flow Control (RS485)
USART1.VirtualMode-Asynchronous=VM_ASYNC
USART1.VirtualMode-Hardware\ Flow\ Control\ (RS485)=VM_ASYNC
@ -222,5 +230,7 @@ VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
VP_TIM6_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM6_VS_ClockSourceINT.Signal=TIM6_VS_ClockSourceINT
VP_TIM7_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM7_VS_ClockSourceINT.Signal=TIM7_VS_ClockSourceINT
board=NUCLEO-L432KC
boardIOC=true

@ -1,11 +1,12 @@
#include "p_serial_mgr.h"
#include "putil.h"
#include "stm32l4xx_hal_def.h"
#include "stm32l4xx_hal_dma.h"
#include "stm32l4xx_hal_uart.h"
#define NUM_BUFFERS (10)
uint8_t sbuffer[NUM_BUFFERS][MAX_MESSAGE_LEN];
#define MAX_DMA_BUFFER_LEN (512)
uint8_t sbuffer[NUM_BUFFERS][MAX_DMA_BUFFER_LEN];
uint8_t active_buffer = 0;
uint8_t rxb[MAX_MESSAGE_LEN];
@ -28,6 +29,7 @@ typedef enum serial_state_t
} serial_state_t;
static UART_HandleTypeDef *_serial_huart_inst = NULL;
static DMA_HandleTypeDef *_serial_dma_inst = NULL;
static uint8_t rxc = '\0';
static serial_state_t sstate = SS_IDLE;
@ -38,50 +40,24 @@ static void p_serial_mgr_flush()
}
void UART1_RxCpltCallback(UART_HandleTypeDef *huart)
{
PDEBUG("%c", sbuffer[active_buffer][0]);
PDEBUG("%s\n", sbuffer[active_buffer]);
active_buffer = (active_buffer + 1) % NUM_BUFFERS;
p_serial_mgr_start();
return;
if (sstate == SS_IDLE && sbuffer[active_buffer][0] == 0x7E)
{
sstate = SS_START;
}
else
{
sstate = SS_ERR;
}
}
void p_serial_mgr_init(UART_HandleTypeDef *huart)
void p_serial_mgr_init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma)
{
_serial_huart_inst = huart;
_serial_dma_inst = hdma;
_serial_huart_inst->RxCpltCallback = UART1_RxCpltCallback;
}
void p_serial_mgr_service(void)
{
if (sstate == SS_START)
{
while (HAL_UART_Receive(_serial_huart_inst, &sbuffer[active_buffer][1], MAX_MESSAGE_LEN - 2, 20) != HAL_OK) {}
for (int ind = 0; ind < 24; ind++)
{
PDEBUG("[%d]: 0x%02x\n", ind, sbuffer[active_buffer][ind]);
}
PDEBUG("\n\n");
memset(sbuffer[active_buffer], 0, MAX_MESSAGE_LEN);
active_buffer = (active_buffer + 1) % NUM_BUFFERS;
uint8_t sendbuffer[9] = {0x7E, DEVICE_ADDR, MASTER_ADDR, 4, 0x01, 0x02, 0x03, 0x04, 0xFF};
// HAL_UART_Transmit(_serial_huart_inst, sendbuffer, 9, 10);
p_serial_mgr_start();
}
else if (sstate == SS_ERR)
{
PDEBUG("MISSED BYTE 0x%02x\n", sbuffer[active_buffer][0]);
p_serial_mgr_start();
}
// HAL_Delay(100);
// PDEBUG("%d\n", __HAL_DMA_GET_COUNTER(_serial_dma_inst));
}
void p_serial_mgr_start()
{
sstate = SS_IDLE;
volatile HAL_StatusTypeDef ret = HAL_UART_Receive_IT(_serial_huart_inst, &sbuffer[active_buffer][0], 1);
asm volatile("nop");
HAL_UART_Receive_DMA(_serial_huart_inst, sbuffer[active_buffer], MAX_DMA_BUFFER_LEN);
}

@ -28,7 +28,7 @@ typedef struct serial_pkt_t
int msg_len;
} serial_pkt_t;
void p_serial_mgr_init(UART_HandleTypeDef *huart);
void p_serial_mgr_init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma);
void p_serial_mgr_service(void);

Loading…
Cancel
Save