2025-10-01 1:29 PM
Hi everyone, I'm using a Riverdi board (STM32 10.1" Rev. 1.2) with an STM32H747XIH6, and I'm having trouble with the UART8 in single-wire mode. I can't get the interrupt callback function to be called when data is received on that port.
This board uses TouchGfx and FreeRTOS.
I'm using a test interrupt code just for the UART8, but it's not responding.
If I use the blocking function HAL_UART_Receive(...), I receive consistent data, so I don't think it's a wiring or pinout issue.
I have checked that the signal is coming in with the oscilloscope.
I have the global interrupt enabled for the UART8.
The code I'm using is this, in freertos.c
void startUartTask(void *argument)
{
/* USER CODE BEGIN startUartTask */
memset(rxBuffer, 65, 128);
HAL_HalfDuplex_EnableReceiver(&huart8);
HAL_UARTEx_ReceiveToIdle_IT(&huart8, rxBuffer, 64);
/* Infinite loop */
for(;;)
{
//HAL_UART_Receive(&huart8, rxBuffer, 128, 120);
osDelay(10);
}
/* USER CODE END startUartTask */
}
In main.c
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
HAL_UARTEx_ReceiveToIdle_IT(&huart8, rxBuffer, 128);
}
I have enabled the interrupt in CubeMX for UART8 and pin J8 (UART8 TX) is configured as pullup but the callback is never called.
The task starts normally and runs.
I don't understand what's going wrong, any ideas?
Thanks
2025-10-01 2:30 PM
Check startup_stm32h747xx.s for UART8_IRQHandler, confirm build and linkage.
Check UART8_IRQHandler code and that it is a) reached, and b) calls into the HAL infrastructure.
Check HAL_UARTEx_RxEventCallback() is entering with huart handle pointing at your huart8 structure, verify, don't assume.
Check NVIC side configuration/recognition
Check UART8 a register level