Question
STM32H743 BLDC use Hallsensor get speed(HAL)
LED1_TOGGLE();cant run when i start BLDC. can someone solve it? status of HAL_TIMEx_HallSensor_Start_DMA is OK and Mspinit is OK.
void hall_init(void)
{
__HAL_RCC_DMA1_CLK_ENABLE();
__HAL_LINKDMA(&g_htimx_handle, hdma[TIM_DMA_ID_CC1], g_hall_dma_handle);
g_hall_dma_handle.Instance = DMA1_Stream5;
g_hall_dma_handle.Init.Request = DMA_REQUEST_TIM5_CH1;
g_hall_dma_handle.Init.Direction = DMA_PERIPH_TO_MEMORY;
g_hall_dma_handle.Init.MemInc = DMA_MINC_ENABLE;
g_hall_dma_handle.Init.PeriphInc = DMA_PINC_DISABLE;
g_hall_dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
g_hall_dma_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
g_hall_dma_handle.Init.Priority = DMA_PRIORITY_HIGH;
g_hall_dma_handle.Init.Mode = DMA_CIRCULAR;
g_hall_dma_handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
g_hall_dma_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
g_hall_dma_handle.Init.MemBurst = DMA_MBURST_SINGLE;
g_hall_dma_handle.Init.PeriphBurst = DMA_PBURST_SINGLE;
HAL_DMA_Init(&g_hall_dma_handle);
HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 1, 1);
HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);
__HAL_DMA_ENABLE_IT(&g_hall_dma_handle, DMA_IT_TC);
TIM_HallSensor_InitTypeDef hall_tim_handle = {0};
g_htimx_handle.Instance = TIM5;
g_htimx_handle.Init.Period = HALL_ARR;
g_htimx_handle.Init.Prescaler = 200-1;
g_htimx_handle.Init.RepetitionCounter = 0;
g_htimx_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
g_htimx_handle.Init.CounterMode = TIM_COUNTERMODE_UP;
g_htimx_handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
hall_tim_handle.Commutation_Delay = 1;
hall_tim_handle.IC1Prescaler = TIM_ICPSC_DIV1;
hall_tim_handle.IC1Filter = 15;
hall_tim_handle.IC1Polarity = TIM_ICPOLARITY_FALLING;
HAL_TIMEx_HallSensor_Init(&g_htimx_handle, &hall_tim_handle);
HAL_TIMEx_HallSensor_Start_DMA(&g_htimx_handle, (uint32_t *)g_encoder_data, 1);
}
void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM5)
{
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_TIM5_CLK_ENABLE();
GPIO_InitTypeDef gpio_init_struct = {0};
gpio_init_struct.Pin = GPIO_PIN_10;
gpio_init_struct.Mode = GPIO_MODE_INPUT;
gpio_init_struct.Pull = GPIO_PULLUP;
gpio_init_struct.Alternate = GPIO_AF2_TIM5;
HAL_GPIO_Init(GPIOH, &gpio_init_struct);
gpio_init_struct.Pin = GPIO_PIN_11;
HAL_GPIO_Init(GPIOH, &gpio_init_struct);
gpio_init_struct.Pin = GPIO_PIN_12;
HAL_GPIO_Init(GPIOH, &gpio_init_struct);
}
}
void DMA1_Stream5_IRQHandler(void)
{
LED1_TOGGLE();
if(__HAL_DMA_GET_FLAG(&g_hall_dma_handle, DMA_FLAG_TCIF1_5) != RESET)
{
HAL_DMA_IRQHandler(&g_hall_dma_handle);
}
}
