Skip to main content
Associate
September 23, 2024
Solved

stm32h750 x-cube-ai , ai_network_create_and_init() code stuck

  • September 23, 2024
  • 2 replies
  • 1200 views

Snipaste_2024-09-23_20-19-02.jpg

Best answer by FuShenXiao

I have already enabled the CRC IP by adding "__HAL_RCC_CRC_CLK_ENABLE();" before "AI_Init();" but still have the log "ai_network_create error - type=51 code=65"

The following is a part of my main.c file

 

/* USER CODE BEGIN Header */
/**
 ******************************************************************************
 * @file : main.c
 * @brief : Main program body
 ******************************************************************************
 * @attention
 *
 * Copyright (c) 2024 STMicroelectronics.
 * All rights reserved.
 *
 * This software is licensed under terms that can be found in the LICENSE file
 * in the root directory of this software component.
 * If no LICENSE file comes with this software, it is provided AS-IS.
 *
 ******************************************************************************
 */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "string.h"
#include "ai_platform.h"
#include "network.h"
#include "network_data.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

CRC_HandleTypeDef hcrc;

UART_HandleTypeDef huart4;

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
static void MX_GPIO_Init(void);
static void MX_CRC_Init(void);
static void MX_FLASH_Init(void);
static void MX_UART4_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

int fputc(int ch, FILE *f)
{
 HAL_UART_Transmit(&huart4, (uint8_t *)&ch, 1, 0xffff);
 return ch;
}

int fgetc(FILE *f)
{
 uint8_t ch = 0;
 HAL_UART_Receive(&huart4, &ch, 1, 0xffff);
 return ch;
}

ai_handle network;
float aiInData[AI_NETWORK_IN_1_SIZE];
float aiOutData[AI_NETWORK_OUT_1_SIZE];
ai_u8 activations[AI_NETWORK_DATA_ACTIVATIONS_SIZE];

ai_buffer * ai_input;
ai_buffer * ai_output;

static void AI_Init(void);
static void AI_Run(float *pIn, float *pOut);
void PictureCharArrayToFloat(uint8_t *srcBuf,float *dstBuf,int len);


void Uart_send(char * str);
#define UART_BUFF_LEN 1024
#define ONE_FRAME_LEN 1+784+2
uint16_t uart_rx_length = 0;
uint8_t uart_rx_byte = 0;
uint8_t uart_rx_buffer[UART_BUFF_LEN];
volatile uint8_t goRunning = 0;
/* USER CODE END 0 */

/**
 * @brief The application entry point.
 * @retval int
 */
int main(void)
{

 /* USER CODE BEGIN 1 */

 /* USER CODE END 1 */

 /* MCU Configuration--------------------------------------------------------*/

 /* Update SystemCoreClock variable according to RCC registers values. */
 SystemCoreClockUpdate();

 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
 HAL_Init();

 /* USER CODE BEGIN Init */

 /* USER CODE END Init */

 /* USER CODE BEGIN SysInit */

 /* USER CODE END SysInit */

 /* Initialize all configured peripherals */
 MX_GPIO_Init();
 MX_CRC_Init();
 MX_FLASH_Init();
 MX_UART4_Init();
 /* USER CODE BEGIN 2 */
 __HAL_RCC_CRC_CLK_ENABLE();
 AI_Init();
 memset(uart_rx_buffer,0,784);
 HAL_UART_Receive_IT(&huart4, (uint8_t *)&uart_rx_byte, 1);
 /* USER CODE END 2 */

 /* Infinite loop */
 /* USER CODE BEGIN WHILE */
 while (1)
 {
 /* USER CODE END WHILE */

 /* USER CODE BEGIN 3 */
	 char str[10];
	 if(goRunning>0)
	 {
	 if(uart_rx_length == ONE_FRAME_LEN)
	 {
	 PictureCharArrayToFloat(uart_rx_buffer+1,aiInData,28*28);
	 AI_Run(aiInData, aiOutData);
	 }
	 memset(uart_rx_buffer,0,784);
	 goRunning = 0;
	 uart_rx_length = 0;
	 }
 }
 /* USER CODE END 3 */
}

/**
 * @brief CRC Initialization Function
 * @PAram None
 * @retval None
 */
static void MX_CRC_Init(void)
{

 /* USER CODE BEGIN CRC_Init 0 */

 /* USER CODE END CRC_Init 0 */

 /* USER CODE BEGIN CRC_Init 1 */

 /* USER CODE END CRC_Init 1 */
 hcrc.Instance = CRC;
 hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
 hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
 hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
 hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
 hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
 if (HAL_CRC_Init(&hcrc) != HAL_OK)
 {
 Error_Handler();
 }
 /* USER CODE BEGIN CRC_Init 2 */

 /* USER CODE END CRC_Init 2 */

}

/**
 * @brief FLASH Initialization Function
 * @PAram None
 * @retval None
 */
static void MX_FLASH_Init(void)
{

 /* USER CODE BEGIN FLASH_Init 0 */

 /* USER CODE END FLASH_Init 0 */

 /* USER CODE BEGIN FLASH_Init 1 */

 /* USER CODE END FLASH_Init 1 */
 /* USER CODE BEGIN FLASH_Init 2 */

 /* USER CODE END FLASH_Init 2 */

}

/**
 * @brief UART4 Initialization Function
 * @PAram None
 * @retval None
 */
static void MX_UART4_Init(void)
{

 /* USER CODE BEGIN UART4_Init 0 */

 /* USER CODE END UART4_Init 0 */

 /* USER CODE BEGIN UART4_Init 1 */

 /* USER CODE END UART4_Init 1 */
 huart4.Instance = UART4;
 huart4.Init.BaudRate = 115200;
 huart4.Init.WordLength = UART_WORDLENGTH_8B;
 huart4.Init.StopBits = UART_STOPBITS_1;
 huart4.Init.Parity = UART_PARITY_NONE;
 huart4.Init.Mode = UART_MODE_TX_RX;
 huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
 huart4.Init.OverSampling = UART_OVERSAMPLING_16;
 huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
 huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1;
 huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
 if (HAL_UART_Init(&huart4) != HAL_OK)
 {
 Error_Handler();
 }
 if (HAL_UARTEx_SetTxFifoThreshold(&huart4, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
 {
 Error_Handler();
 }
 if (HAL_UARTEx_SetRxFifoThreshold(&huart4, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
 {
 Error_Handler();
 }
 if (HAL_UARTEx_DisableFifoMode(&huart4) != HAL_OK)
 {
 Error_Handler();
 }
 /* USER CODE BEGIN UART4_Init 2 */

 /* USER CODE END UART4_Init 2 */

}

/**
 * @brief GPIO Initialization Function
 * @PAram None
 * @retval None
 */
static void MX_GPIO_Init(void)
{
 GPIO_InitTypeDef GPIO_InitStruct = {0};
/* USER CODE BEGIN MX_GPIO_Init_1 */
/* USER CODE END MX_GPIO_Init_1 */

 /* GPIO Ports Clock Enable */
 __HAL_RCC_GPIOE_CLK_ENABLE();
 __HAL_RCC_GPIOG_CLK_ENABLE();
 __HAL_RCC_GPIOM_CLK_ENABLE();
 __HAL_RCC_GPIOD_CLK_ENABLE();
 __HAL_RCC_GPIOB_CLK_ENABLE();
 __HAL_RCC_GPIOF_CLK_ENABLE();
 __HAL_RCC_GPIOC_CLK_ENABLE();
 __HAL_RCC_GPIOA_CLK_ENABLE();

/* USER CODE BEGIN MX_GPIO_Init_2 */
/* USER CODE END MX_GPIO_Init_2 */
}

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
	if(goRunning ==0)
	{
		if (uart_rx_length < UART_BUFF_LEN)
		{
			uart_rx_buffer[uart_rx_length] = uart_rx_byte;
			uart_rx_length++;

			if (uart_rx_byte == '\n')
			{
				goRunning = 1;
			}
		}
		else
		{
			//rt_kprintf("rx len over");
			uart_rx_length = 0;
		}
	}
	HAL_UART_Receive_IT(&huart4, (uint8_t *)&uart_rx_byte, 1);
}

void Uart_send(char * str)
{
	HAL_UART_Transmit(&huart4, (uint8_t *)str, strlen(str),0xffff);
}

static void AI_Init(void)
{
 ai_error err;

 /* Create a local array with the addresses of the activations buffers */
 const ai_handle act_addr[] = { activations };
 /* Create an instance of the model */
 err = ai_network_create_and_init(&network, act_addr, NULL);
 if (err.type != AI_ERROR_NONE) {
 printf("ai_network_create error - type=%d code=%d\r\n", err.type, err.code);
 Error_Handler();
 }
 ai_input = ai_network_inputs_get(network, NULL);
 ai_output = ai_network_outputs_get(network, NULL);
}

static void AI_Run(float *pIn, float *pOut)
{
	char logStr[100];
	int count = 0;
	float max = 0;
 ai_i32 batch;
 ai_error err;

 /* Update IO handlers with the data payload */
 ai_input[0].data = AI_HANDLE_PTR(pIn);
 ai_output[0].data = AI_HANDLE_PTR(pOut);

 batch = ai_network_run(network, ai_input, ai_output);
 if (batch != 1) {
 err = ai_network_get_error(network);
 printf("AI ai_network_run error - type=%d code=%d\r\n", err.type, err.code);
 Error_Handler();
 }
 for (uint32_t i = 0; i < AI_NETWORK_OUT_1_SIZE; i++) {

	 sprintf(logStr,"%d %8.6f\r\n",i,aiOutData[i]);
	 Uart_send(logStr);
	 if(max<aiOutData[i])
	 {
		 count = i;
		 max= aiOutData[i];
	 }
 }
 sprintf(logStr,"current number is %d\r\n",count);
 Uart_send(logStr);
}

void PictureCharArrayToFloat(uint8_t *srcBuf,float *dstBuf,int len)
{
	for(int i=0;i<len;i++)
	{
		dstBuf[i] = srcBuf[i];//==1?0:1;
	}
}
/* USER CODE END 4 */

/**
 * @brief This function is executed in case of error occurrence.
 * @retval None
 */
void Error_Handler(void)
{
 /* USER CODE BEGIN Error_Handler_Debug */
 /* User can add his own implementation to report the HAL error return state */
 __disable_irq();
 while (1)
 {
 }
 /* USER CODE END Error_Handler_Debug */
}

#ifdef USE_FULL_ASSERT
/**
 * @brief Reports the name of the source file and the source line number
 * where the assert_param error has occurred.
 * @PAram file: pointer to the source file name
 * @PAram line: assert_param error line source number
 * @retval None
 */
void assert_failed(uint8_t *file, uint32_t line)
{
 /* USER CODE BEGIN 6 */
 /* User can add his own implementation to report the file name and line number,
 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
 /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

 

Best Regards

2 replies

fauvarque.daniel
ST Employee
September 26, 2024

You probably didn't enable the CRC IP in your application

Regards

FuShenXiaoBest answer
Visitor II
September 30, 2024

I have already enabled the CRC IP by adding "__HAL_RCC_CRC_CLK_ENABLE();" before "AI_Init();" but still have the log "ai_network_create error - type=51 code=65"

The following is a part of my main.c file

 

/* USER CODE BEGIN Header */
/**
 ******************************************************************************
 * @file : main.c
 * @brief : Main program body
 ******************************************************************************
 * @attention
 *
 * Copyright (c) 2024 STMicroelectronics.
 * All rights reserved.
 *
 * This software is licensed under terms that can be found in the LICENSE file
 * in the root directory of this software component.
 * If no LICENSE file comes with this software, it is provided AS-IS.
 *
 ******************************************************************************
 */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "string.h"
#include "ai_platform.h"
#include "network.h"
#include "network_data.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

CRC_HandleTypeDef hcrc;

UART_HandleTypeDef huart4;

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
static void MX_GPIO_Init(void);
static void MX_CRC_Init(void);
static void MX_FLASH_Init(void);
static void MX_UART4_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

int fputc(int ch, FILE *f)
{
 HAL_UART_Transmit(&huart4, (uint8_t *)&ch, 1, 0xffff);
 return ch;
}

int fgetc(FILE *f)
{
 uint8_t ch = 0;
 HAL_UART_Receive(&huart4, &ch, 1, 0xffff);
 return ch;
}

ai_handle network;
float aiInData[AI_NETWORK_IN_1_SIZE];
float aiOutData[AI_NETWORK_OUT_1_SIZE];
ai_u8 activations[AI_NETWORK_DATA_ACTIVATIONS_SIZE];

ai_buffer * ai_input;
ai_buffer * ai_output;

static void AI_Init(void);
static void AI_Run(float *pIn, float *pOut);
void PictureCharArrayToFloat(uint8_t *srcBuf,float *dstBuf,int len);


void Uart_send(char * str);
#define UART_BUFF_LEN 1024
#define ONE_FRAME_LEN 1+784+2
uint16_t uart_rx_length = 0;
uint8_t uart_rx_byte = 0;
uint8_t uart_rx_buffer[UART_BUFF_LEN];
volatile uint8_t goRunning = 0;
/* USER CODE END 0 */

/**
 * @brief The application entry point.
 * @retval int
 */
int main(void)
{

 /* USER CODE BEGIN 1 */

 /* USER CODE END 1 */

 /* MCU Configuration--------------------------------------------------------*/

 /* Update SystemCoreClock variable according to RCC registers values. */
 SystemCoreClockUpdate();

 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
 HAL_Init();

 /* USER CODE BEGIN Init */

 /* USER CODE END Init */

 /* USER CODE BEGIN SysInit */

 /* USER CODE END SysInit */

 /* Initialize all configured peripherals */
 MX_GPIO_Init();
 MX_CRC_Init();
 MX_FLASH_Init();
 MX_UART4_Init();
 /* USER CODE BEGIN 2 */
 __HAL_RCC_CRC_CLK_ENABLE();
 AI_Init();
 memset(uart_rx_buffer,0,784);
 HAL_UART_Receive_IT(&huart4, (uint8_t *)&uart_rx_byte, 1);
 /* USER CODE END 2 */

 /* Infinite loop */
 /* USER CODE BEGIN WHILE */
 while (1)
 {
 /* USER CODE END WHILE */

 /* USER CODE BEGIN 3 */
	 char str[10];
	 if(goRunning>0)
	 {
	 if(uart_rx_length == ONE_FRAME_LEN)
	 {
	 PictureCharArrayToFloat(uart_rx_buffer+1,aiInData,28*28);
	 AI_Run(aiInData, aiOutData);
	 }
	 memset(uart_rx_buffer,0,784);
	 goRunning = 0;
	 uart_rx_length = 0;
	 }
 }
 /* USER CODE END 3 */
}

/**
 * @brief CRC Initialization Function
 * @PAram None
 * @retval None
 */
static void MX_CRC_Init(void)
{

 /* USER CODE BEGIN CRC_Init 0 */

 /* USER CODE END CRC_Init 0 */

 /* USER CODE BEGIN CRC_Init 1 */

 /* USER CODE END CRC_Init 1 */
 hcrc.Instance = CRC;
 hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
 hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
 hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
 hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
 hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
 if (HAL_CRC_Init(&hcrc) != HAL_OK)
 {
 Error_Handler();
 }
 /* USER CODE BEGIN CRC_Init 2 */

 /* USER CODE END CRC_Init 2 */

}

/**
 * @brief FLASH Initialization Function
 * @PAram None
 * @retval None
 */
static void MX_FLASH_Init(void)
{

 /* USER CODE BEGIN FLASH_Init 0 */

 /* USER CODE END FLASH_Init 0 */

 /* USER CODE BEGIN FLASH_Init 1 */

 /* USER CODE END FLASH_Init 1 */
 /* USER CODE BEGIN FLASH_Init 2 */

 /* USER CODE END FLASH_Init 2 */

}

/**
 * @brief UART4 Initialization Function
 * @PAram None
 * @retval None
 */
static void MX_UART4_Init(void)
{

 /* USER CODE BEGIN UART4_Init 0 */

 /* USER CODE END UART4_Init 0 */

 /* USER CODE BEGIN UART4_Init 1 */

 /* USER CODE END UART4_Init 1 */
 huart4.Instance = UART4;
 huart4.Init.BaudRate = 115200;
 huart4.Init.WordLength = UART_WORDLENGTH_8B;
 huart4.Init.StopBits = UART_STOPBITS_1;
 huart4.Init.Parity = UART_PARITY_NONE;
 huart4.Init.Mode = UART_MODE_TX_RX;
 huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
 huart4.Init.OverSampling = UART_OVERSAMPLING_16;
 huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
 huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1;
 huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
 if (HAL_UART_Init(&huart4) != HAL_OK)
 {
 Error_Handler();
 }
 if (HAL_UARTEx_SetTxFifoThreshold(&huart4, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
 {
 Error_Handler();
 }
 if (HAL_UARTEx_SetRxFifoThreshold(&huart4, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
 {
 Error_Handler();
 }
 if (HAL_UARTEx_DisableFifoMode(&huart4) != HAL_OK)
 {
 Error_Handler();
 }
 /* USER CODE BEGIN UART4_Init 2 */

 /* USER CODE END UART4_Init 2 */

}

/**
 * @brief GPIO Initialization Function
 * @PAram None
 * @retval None
 */
static void MX_GPIO_Init(void)
{
 GPIO_InitTypeDef GPIO_InitStruct = {0};
/* USER CODE BEGIN MX_GPIO_Init_1 */
/* USER CODE END MX_GPIO_Init_1 */

 /* GPIO Ports Clock Enable */
 __HAL_RCC_GPIOE_CLK_ENABLE();
 __HAL_RCC_GPIOG_CLK_ENABLE();
 __HAL_RCC_GPIOM_CLK_ENABLE();
 __HAL_RCC_GPIOD_CLK_ENABLE();
 __HAL_RCC_GPIOB_CLK_ENABLE();
 __HAL_RCC_GPIOF_CLK_ENABLE();
 __HAL_RCC_GPIOC_CLK_ENABLE();
 __HAL_RCC_GPIOA_CLK_ENABLE();

/* USER CODE BEGIN MX_GPIO_Init_2 */
/* USER CODE END MX_GPIO_Init_2 */
}

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
	if(goRunning ==0)
	{
		if (uart_rx_length < UART_BUFF_LEN)
		{
			uart_rx_buffer[uart_rx_length] = uart_rx_byte;
			uart_rx_length++;

			if (uart_rx_byte == '\n')
			{
				goRunning = 1;
			}
		}
		else
		{
			//rt_kprintf("rx len over");
			uart_rx_length = 0;
		}
	}
	HAL_UART_Receive_IT(&huart4, (uint8_t *)&uart_rx_byte, 1);
}

void Uart_send(char * str)
{
	HAL_UART_Transmit(&huart4, (uint8_t *)str, strlen(str),0xffff);
}

static void AI_Init(void)
{
 ai_error err;

 /* Create a local array with the addresses of the activations buffers */
 const ai_handle act_addr[] = { activations };
 /* Create an instance of the model */
 err = ai_network_create_and_init(&network, act_addr, NULL);
 if (err.type != AI_ERROR_NONE) {
 printf("ai_network_create error - type=%d code=%d\r\n", err.type, err.code);
 Error_Handler();
 }
 ai_input = ai_network_inputs_get(network, NULL);
 ai_output = ai_network_outputs_get(network, NULL);
}

static void AI_Run(float *pIn, float *pOut)
{
	char logStr[100];
	int count = 0;
	float max = 0;
 ai_i32 batch;
 ai_error err;

 /* Update IO handlers with the data payload */
 ai_input[0].data = AI_HANDLE_PTR(pIn);
 ai_output[0].data = AI_HANDLE_PTR(pOut);

 batch = ai_network_run(network, ai_input, ai_output);
 if (batch != 1) {
 err = ai_network_get_error(network);
 printf("AI ai_network_run error - type=%d code=%d\r\n", err.type, err.code);
 Error_Handler();
 }
 for (uint32_t i = 0; i < AI_NETWORK_OUT_1_SIZE; i++) {

	 sprintf(logStr,"%d %8.6f\r\n",i,aiOutData[i]);
	 Uart_send(logStr);
	 if(max<aiOutData[i])
	 {
		 count = i;
		 max= aiOutData[i];
	 }
 }
 sprintf(logStr,"current number is %d\r\n",count);
 Uart_send(logStr);
}

void PictureCharArrayToFloat(uint8_t *srcBuf,float *dstBuf,int len)
{
	for(int i=0;i<len;i++)
	{
		dstBuf[i] = srcBuf[i];//==1?0:1;
	}
}
/* USER CODE END 4 */

/**
 * @brief This function is executed in case of error occurrence.
 * @retval None
 */
void Error_Handler(void)
{
 /* USER CODE BEGIN Error_Handler_Debug */
 /* User can add his own implementation to report the HAL error return state */
 __disable_irq();
 while (1)
 {
 }
 /* USER CODE END Error_Handler_Debug */
}

#ifdef USE_FULL_ASSERT
/**
 * @brief Reports the name of the source file and the source line number
 * where the assert_param error has occurred.
 * @PAram file: pointer to the source file name
 * @PAram line: assert_param error line source number
 * @retval None
 */
void assert_failed(uint8_t *file, uint32_t line)
{
 /* USER CODE BEGIN 6 */
 /* User can add his own implementation to report the file name and line number,
 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
 /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

 

Best Regards

winkAuthor
Associate
October 3, 2024

I have identified the issue, which is that printf forgot to redirect and the PLL settings generated automatically by cubemx are incorrect. These two errors were mixed together and caused