Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* USER CODE BEGIN Header */
- /**
- ******************************************************************************
- * @file : main.c
- * @brief : Main program body
- ******************************************************************************
- * @attention
- *
- * <h2><center>© Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
- /* USER CODE END Header */
- /* Includes ------------------------------------------------------------------*/
- #include "main.h"
- #include "cmsis_os.h"
- /* Private includes ----------------------------------------------------------*/
- /* USER CODE BEGIN Includes */
- #include "atraso.h"
- #include "defPrincipais.h"
- #include "NOKIA5110_fb.h"
- #include "figuras.h"
- #include "PRNG_LFSR.h"
- //#include "sound.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 ---------------------------------------------------------*/
- ADC_HandleTypeDef hadc1;
- DMA_HandleTypeDef hdma_adc1;
- TIM_HandleTypeDef htim2;
- TIM_HandleTypeDef htim3;
- osThreadId defaultTaskHandle;
- /* USER CODE BEGIN PV */
- /* Private variables ---------------------------------------------------------*/
- uint32_t score;
- //flags joy
- uint32_t joystick_pos[4];
- uint32_t ADC_buffer[2];
- uint32_t valor_ADC[2];
- uint32_t counter;
- TaskHandle_t GameHandle;
- //TaskHandle_t CriaSetaHandle;
- //TaskHandle_t SoundSHandle;
- //TaskHandle_t DeslocaHandle;
- TaskHandle_t JoyHandle; // Para excluir uma task(que não se auto exclui) é necessário o Handler
- //xQueueHandle xSound;
- /* USER CODE END PV */
- /* Private function prototypes -----------------------------------------------*/
- void SystemClock_Config(void);
- static void MX_GPIO_Init(void);
- static void MX_DMA_Init(void);
- static void MX_ADC1_Init(void);
- static void MX_TIM3_Init(void);
- static void MX_TIM2_Init(void);
- void StartDefaultTask(void const * argument);
- /* USER CODE BEGIN PFP */
- /* Private function prototypes -----------------------------------------------*/
- void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc);
- void change_note (TIM_HandleTypeDef *htim, int nota);
- //- Tasks do jogo
- void vT_Create_Game (void *pv);
- void vT_Game (void * pv);
- //void vT_Sound(void *pv);
- void vT_Joy(void *pv);
- void vT_Restart (void * pv);
- /* USER CODE END PFP */
- /* Private user code ---------------------------------------------------------*/
- /* USER CODE BEGIN 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--------------------------------------------------------*/
- /* 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();
- /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_DMA_Init();
- MX_ADC1_Init();
- MX_TIM3_Init();
- MX_TIM2_Init();
- /* USER CODE BEGIN 2 */
- //LCD 5110
- inic_LCD();
- limpa_LCD();
- /* escreve2fb( (unsigned char *) intro);
- imprime_LCD();
- while(1){
- }
- */
- //ADC Joystick
- HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADC_buffer,2);
- HAL_ADC_Start_IT(&hadc1);
- //PWM Buzzer
- HAL_TIM_Base_Start(&htim3);
- HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);
- /* USER CODE END 2 */
- /* USER CODE BEGIN RTOS_MUTEX */
- /* add mutexes, ... */
- /* USER CODE END RTOS_MUTEX */
- /* USER CODE BEGIN RTOS_SEMAPHORES */
- //xSound = xQueueCreateCountingSemaphore(10, sizeof(long));
- // xSound = xQueueCreateCountingSemaphore(16,0);
- //xQueueCreateCountingSemaphore()
- //xSound = xQueueCreate(16, sizeof(uint32_t));
- /* USER CODE END RTOS_SEMAPHORES */
- /* USER CODE BEGIN RTOS_TIMERS */
- /* start timers, add new ones, ... */
- /* USER CODE END RTOS_TIMERS */
- /* USER CODE BEGIN RTOS_QUEUES */
- /* add queues, ... */
- /* USER CODE END RTOS_QUEUES */
- /* Create the thread(s) */
- /* definition and creation of defaultTask */
- // osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
- // defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
- /* USER CODE BEGIN RTOS_THREADS */
- /* add threads, ... */
- uint32_t vT_Create = pdTRUE;
- vT_Create = xTaskCreate(vT_Create_Game, "Create", 64, NULL, 3, NULL);
- if (vT_Create == pdFALSE){
- //abort
- string_LCD("Erro ao criar tarefas");
- imprime_LCD();
- while(1);
- }
- /* USER CODE END RTOS_THREADS */
- /* Start scheduler */
- osKernelStart();
- /* We should never get here as control is now taken by the scheduler */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }
- /**
- * @brief System Clock Configuration
- * @retval None
- */
- void SystemClock_Config(void)
- {
- RCC_OscInitTypeDef RCC_OscInitStruct = {0};
- RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
- RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
- /** Initializes the CPU, AHB and APB busses clocks
- */
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
- RCC_OscInitStruct.HSEState = RCC_HSE_ON;
- RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
- RCC_OscInitStruct.HSIState = RCC_HSI_ON;
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
- RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
- if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
- {
- Error_Handler();
- }
- /** Initializes the CPU, AHB and APB busses clocks
- */
- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
- |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
- RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
- RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
- if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
- {
- Error_Handler();
- }
- PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
- PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
- if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
- {
- Error_Handler();
- }
- }
- /**
- * @brief ADC1 Initialization Function
- * @param None
- * @retval None
- */
- static void MX_ADC1_Init(void)
- {
- /* USER CODE BEGIN ADC1_Init 0 */
- /* USER CODE END ADC1_Init 0 */
- ADC_ChannelConfTypeDef sConfig = {0};
- /* USER CODE BEGIN ADC1_Init 1 */
- /* USER CODE END ADC1_Init 1 */
- /** Common config
- */
- hadc1.Instance = ADC1;
- hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
- hadc1.Init.ContinuousConvMode = ENABLE;
- hadc1.Init.DiscontinuousConvMode = DISABLE;
- hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
- hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
- hadc1.Init.NbrOfConversion = 2;
- if (HAL_ADC_Init(&hadc1) != HAL_OK)
- {
- Error_Handler();
- }
- /** Configure Regular Channel
- */
- sConfig.Channel = ADC_CHANNEL_1;
- sConfig.Rank = ADC_REGULAR_RANK_1;
- sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /** Configure Regular Channel
- */
- sConfig.Channel = ADC_CHANNEL_2;
- sConfig.Rank = ADC_REGULAR_RANK_2;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN ADC1_Init 2 */
- /* USER CODE END ADC1_Init 2 */
- }
- /**
- * @brief TIM2 Initialization Function
- * @param None
- * @retval None
- */
- static void MX_TIM2_Init(void)
- {
- /* USER CODE BEGIN TIM2_Init 0 */
- /* USER CODE END TIM2_Init 0 */
- TIM_MasterConfigTypeDef sMasterConfig = {0};
- TIM_OC_InitTypeDef sConfigOC = {0};
- /* USER CODE BEGIN TIM2_Init 1 */
- /* USER CODE END TIM2_Init 1 */
- htim2.Instance = TIM2;
- htim2.Init.Prescaler = 0;
- htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim2.Init.Period = TIM_COUNT;
- htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
- if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
- {
- Error_Handler();
- }
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
- if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
- sConfigOC.Pulse = 900;
- sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
- if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN TIM2_Init 2 */
- /* USER CODE END TIM2_Init 2 */
- HAL_TIM_MspPostInit(&htim2);
- }
- /**
- * @brief TIM3 Initialization Function
- * @param None
- * @retval None
- */
- static void MX_TIM3_Init(void)
- {
- /* USER CODE BEGIN TIM3_Init 0 */
- /* USER CODE END TIM3_Init 0 */
- TIM_MasterConfigTypeDef sMasterConfig = {0};
- TIM_OC_InitTypeDef sConfigOC = {0};
- /* USER CODE BEGIN TIM3_Init 1 */
- /* USER CODE END TIM3_Init 1 */
- htim3.Instance = TIM3;
- htim3.Init.Prescaler = 0;
- htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim3.Init.Period = TIM_COUNT;
- htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
- if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
- {
- Error_Handler();
- }
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
- if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
- sConfigOC.Pulse = 900;
- sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
- if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN TIM3_Init 2 */
- /* USER CODE END TIM3_Init 2 */
- HAL_TIM_MspPostInit(&htim3);
- }
- /**
- * Enable DMA controller clock
- */
- static void MX_DMA_Init(void)
- {
- /* DMA controller clock enable */
- __HAL_RCC_DMA1_CLK_ENABLE();
- /* DMA interrupt init */
- /* DMA1_Channel1_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
- }
- /**
- * @brief GPIO Initialization Function
- * @param None
- * @retval None
- */
- static void MX_GPIO_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- /* GPIO Ports Clock Enable */
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOD_CLK_ENABLE();
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6
- |GPIO_PIN_7, GPIO_PIN_RESET);
- /*Configure GPIO pin : Botao_Pin */
- GPIO_InitStruct.Pin = GPIO_PIN_15;
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- HAL_GPIO_Init(Botao_GPIO_Port, &GPIO_InitStruct);
- /*Configure GPIO pins : PA3 PA4 PA5 PA6
- PA7 */
- GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6
- |GPIO_PIN_7;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
- /* USER CODE BEGIN 4 */
- // Protótipo funções
- void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
- {
- if(hadc->Instance == ADC1)
- {
- valor_ADC[0]=ADC_buffer[0];
- valor_ADC[1]=ADC_buffer[1];
- }
- }
- void change_note (TIM_HandleTypeDef *htim, int nota){
- uint32_t prescaler;
- if (nota>0)
- prescaler = SystemCoreClock/(TIM_COUNT*nota);
- else
- prescaler =0;
- __HAL_TIM_SET_PRESCALER(htim, prescaler);
- }
- void vT_Create_Game(void * pv){
- uint32_t seed = 1;
- uint32_t count = 0;
- score = 0;
- //TELA DE INICIO
- while(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_15)){ // enquando nao pressionar joystick fica travado
- seed++; // semente para o gerador de números pseudoaleatorios
- if(count == 0)
- {
- escreve2fb((unsigned char *)intro);
- }
- if(count == 300)
- {
- escreve2fb((unsigned char *)intro2);
- }
- count++;
- if(count == 600)
- {
- count = 0;
- }
- imprime_LCD();
- vTaskDelay(5);
- }
- init_LFSR(seed); // inicializacao para geracao de numeros pseudoaleatorios
- uint32_t vT_Create = pdTRUE;
- vT_Create = xTaskCreate(vT_Game, "Game", 64, NULL,1, &GameHandle);
- vT_Create = xTaskCreate(vT_Joy, "Joy", 64, NULL,1, &JoyHandle);
- //vT_Create = xTaskCreate(vT_Sound, "Som", 128, NULL,1, &SoundSHandle);
- if (vT_Create != pdPASS){
- //abort
- string_LCD("Erro ao criar tarefas");
- imprime_LCD();
- while(1);
- }
- //delete task - somente executar uma vez
- vTaskDelete(NULL);
- while(1){
- }
- }
- uint8_t vect_rand[256];
- uint32_t but_count = 0;
- uint32_t i;
- void vT_Game(void *pv) {
- while(but_count < 256) {
- vect_rand[but_count] = rand()%4; // preenche o vetor com os valores das direções (0 à 3)
- but_count++;
- for( i = 0; i < but_count; i++) {
- if(vect_rand[i] == 0) {
- escreve2fb((unsigned char *)pisca_up);
- }
- if(vect_rand[i] == 1) {
- escreve2fb((unsigned char *)pisca_right);
- }
- if(vect_rand[i] == 2) {
- escreve2fb((unsigned char *)pisca_down);
- }
- if(vect_rand[i] == 3) {
- escreve2fb((unsigned char *)pisca_left);
- }
- imprime_LCD();
- vTaskDelay(1500);
- escreve2fb((unsigned char *)jogo);
- imprime_LCD();
- vTaskDelay(500);
- }
- for( i = 0; i < but_count; i++) {
- while(!(joystick_pos[UP] || joystick_pos[RIGHT] || joystick_pos[DOWN] || joystick_pos[LEFT])) // enquanto nenhuma direção estiver em 1
- if(joystick_pos[UP]){
- if(vect_rand[i] == UP){
- escreve2fb((unsigned char *)pisca_up);
- imprime_LCD();
- vTaskDelay(1500);
- escreve2fb((unsigned char *)jogo);
- imprime_LCD();
- vTaskDelay(500);
- score++;
- }
- else
- but_count = End_Game; // perdeu o jogo -> sai do while
- }
- if(joystick_pos[RIGHT]){
- if(vect_rand[i] == RIGHT){
- escreve2fb((unsigned char *)pisca_right);
- imprime_LCD();
- vTaskDelay(1500);
- escreve2fb((unsigned char *)jogo);
- imprime_LCD();
- vTaskDelay(500);
- score++;
- }
- else
- but_count = End_Game; // perdeu o jogo -> sai do while
- }
- if(joystick_pos[DOWN]){
- if(vect_rand[i] == DOWN){
- escreve2fb((unsigned char *)pisca_down);
- imprime_LCD();
- vTaskDelay(1500);
- escreve2fb((unsigned char *)jogo);
- imprime_LCD();
- vTaskDelay(500);
- score++;
- }
- else
- but_count = End_Game; // perdeu o jogo -> sai do while
- }
- if(joystick_pos[LEFT]){
- if(vect_rand[i] == LEFT){
- escreve2fb((unsigned char *)pisca_left);
- imprime_LCD();
- vTaskDelay(1500);
- escreve2fb((unsigned char *)jogo);
- imprime_LCD();
- vTaskDelay(500);
- score++;
- }
- else
- but_count = End_Game; // perdeu o jogo -> sai do while
- }
- }
- }
- escreve2fb((unsigned char *)placar);
- escreve_Nr_Peq(34, 20, score, 0);
- imprime_LCD();
- vTaskDelay(3500);
- xTaskCreate(vT_Restart, "Restart", 64, NULL,3, NULL);
- }
- /*void vT_Sound(void *pv){
- int pos;
- while(1)
- {
- xQueueReceive(xSound,&pos,osWaitForever);
- //vTaskDelay(MS(60*(48/passo)));
- change_note(&htim3, song[pos]);
- vTaskDelay(MS(song[pos+1]));
- change_note(&htim3, 0);
- vTaskDelay(MS(3)); //
- }
- }
- */
- void vT_Joy(void *pv){
- while(1){
- if (valor_ADC[0]<MIN_JOY){
- joystick_pos[DOWN]= 1;
- } else{
- joystick_pos[DOWN]= 0;
- }
- if (valor_ADC[0]>MAX_JOY){
- joystick_pos[UP]= 1;
- } else{
- joystick_pos[UP]= 0;
- }
- if (valor_ADC[1]<MIN_JOY){
- joystick_pos[RIGHT]= 1;
- } else{
- joystick_pos[RIGHT]= 0;
- }
- if (valor_ADC[1]>MAX_JOY){
- joystick_pos[LEFT]= 1;
- } else{
- joystick_pos[LEFT]= 0;
- }
- vTaskDelay(MS(100));
- }
- }
- void vT_Restart (void * pv){
- limpa_LCD();
- //desenha tela de jogar novamente
- escreve2fb((unsigned char *)restart);
- imprime_LCD();
- vTaskDelete(GameHandle);
- //vTaskDelete(SoundSHandle);
- vTaskDelete(JoyHandle);
- while(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_15)){ // enquanto não pressionar joystick fica travado
- }
- HAL_Delay(1000);
- xTaskCreate(vT_Create_Game,"Create",64, NULL, 4, NULL);
- //delete task - somente executar uma vez
- vTaskDelete(NULL);
- while(1){
- }
- }
- /* USER CODE END 4 */
- /* USER CODE BEGIN Header_StartDefaultTask */
- /**
- * @brief Function implementing the defaultTask thread.
- * @param argument: Not used
- * @retval None
- */
- /* USER CODE END Header_StartDefaultTask */
- void StartDefaultTask(void const * argument)
- {
- /* USER CODE BEGIN 5 */
- /* Infinite loop */
- for(;;)
- {
- osDelay(1);
- }
- /* USER CODE END 5 */
- }
- /**
- * @brief Period elapsed callback in non blocking mode
- * @note This function is called when TIM1 interrupt took place, inside
- * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
- * a global variable "uwTick" used as application time base.
- * @param htim : TIM handle
- * @retval None
- */
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
- {
- /* USER CODE BEGIN Callback 0 */
- /* USER CODE END Callback 0 */
- if (htim->Instance == TIM1) {
- HAL_IncTick();
- }
- /* USER CODE BEGIN Callback 1 */
- /* USER CODE END Callback 1 */
- }
- /**
- * @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 */
- 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,
- tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- /* USER CODE END 6 */
- }
- #endif /* USE_FULL_ASSERT */
- /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement