Skip to main content
JTurn.2
Associate III
October 12, 2021
Solved

Unable to use USART1 to output in serial on STM32H7B3I-DK

I am having trouble trying to output data via USART1 on my STM32H7B3I-DK. According to the doc (UM2569), USART1 is a virtual com port connected to the USB STLINK (CN14). So I should theoretically be able to use USART1 to output to my serial console via the Mirco-USB connected to my laptop? But for some reason my serial console isn't outputting anything at all. I have already checked that the settings for USART1 in STM32CubeMX and serial console match, so I am assuming it has nothing to do with my serial console's settings.

Here is a code snippet of my main loop and USART1. The code was essentially generated by STM32CubeMX after I selected the correct discovery board in 'board selector'.

int main(void)
{
 /* USER CODE BEGIN 1 */
 
 /* USER CODE END 1 */
 
 /* MCU Configuration--------------------------------------------------------*/
 
 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
 HAL_Init();
 
 /* USER CODE BEGIN Init */
 
 /* USER CODE END Init */
 
 /* Configure the system clock */
 SystemClock_Config();
 
/* Configure the peripherals common clocks */
 PeriphCommonClock_Config();
 
 /* USER CODE BEGIN SysInit */
 
 /* USER CODE END SysInit */
 
 /* Initialize all configured peripherals */
 MX_GPIO_Init();
 MX_FMC_Init();
 MX_I2C1_Init();
 MX_I2C4_Init();
 MX_I2S6_Init();
 MX_LTDC_Init();
 MX_OCTOSPI1_Init();
 MX_RTC_Init();
 MX_SDMMC1_SD_Init();
 MX_SPI1_Init();
 MX_SPI2_Init();
 MX_USART1_UART_Init();
 MX_USART2_UART_Init();
 /* USER CODE BEGIN 2 */
 
 /* USER CODE END 2 */
 
 /* Infinite loop */
 /* USER CODE BEGIN WHILE */
 while (1)
 {
 /* USER CODE END WHILE */
 
 /* USER CODE BEGIN 3 */
		uint8_t Test[] = "Hello World !!!\r\n"; //Data to send
		HAL_UART_Transmit(&huart1,Test,sizeof(Test),10);// Sending in normal mode
		HAL_Delay(1000);
 }
 /* USER CODE END 3 */
}
static void MX_USART1_UART_Init(void)
{
 
 /* USER CODE BEGIN USART1_Init 0 */
 
 /* USER CODE END USART1_Init 0 */
 
 /* USER CODE BEGIN USART1_Init 1 */
 
 /* USER CODE END USART1_Init 1 */
 huart1.Instance = USART1;
 huart1.Init.BaudRate = 115200;
 huart1.Init.WordLength = UART_WORDLENGTH_8B;
 huart1.Init.StopBits = UART_STOPBITS_1;
 huart1.Init.Parity = UART_PARITY_NONE;
 huart1.Init.Mode = UART_MODE_TX_RX;
 huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
 huart1.Init.OverSampling = UART_OVERSAMPLING_16;
 huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
 huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
 huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
 if (HAL_UART_Init(&huart1) != HAL_OK)
 {
 Error_Handler();
 }
 if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
 {
 Error_Handler();
 }
 if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
 {
 Error_Handler();
 }
 if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
 {
 Error_Handler();
 }
 /* USER CODE BEGIN USART1_Init 2 */
 
 /* USER CODE END USART1_Init 2 */
 
}

Thank you for your help!

This topic has been closed for replies.
JTurn.2
JTurn.2Best answer
Associate III
October 12, 2021

I see. Thank you for your advice. I used the debugger to step through my code and realised that there's an event handler error at 'MX_SDMMC1_SD_Init' which was stopping the rest of the code from running as I did not have a micro SD card inserted in my board. I managed to get a reading after adding an sd card to my board or by commenting out the event handler.

2 replies

Tesla DeLorean
Guru
October 12, 2021

It's not necessary to like your own posts.

Check that it's not ending up in the Error_Handler() or other while loop, stop/check with a debugger.

Check RCC, GPIO and USART1 register settings.

Check define for HSE_VALUE, or clock from the HSI clock source.

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
JTurn.2
JTurn.2AuthorBest answer
Associate III
October 12, 2021

I see. Thank you for your advice. I used the debugger to step through my code and realised that there's an event handler error at 'MX_SDMMC1_SD_Init' which was stopping the rest of the code from running as I did not have a micro SD card inserted in my board. I managed to get a reading after adding an sd card to my board or by commenting out the event handler.