STM32F303C8代码未进入while循环

STM32F303C8代码未进入while循环,stm32,cortex-m3,cubemx,Stm32,Cortex M3,Cubemx,我什么都试过了,在这里我真的不知所措 问题陈述: 代码不进入while循环 1.在STM32F303C8上工作 2.我有三个董事会: Nucleo F303RE Nucleo F303K8 Custom board. 它们都有相同的IC,并给出相同的问题。因此,问题一定与软件有关 我已经在BitBucket上发布了整个代码和cubeMX文件。请在此处找到链接: 编辑1:此处的相关代码 #include "main.h" #include "stm32f3xx_hal.h" #include

我什么都试过了,在这里我真的不知所措

问题陈述: 代码不进入while循环

1.在STM32F303C8上工作

2.我有三个董事会:

Nucleo F303RE
Nucleo F303K8
Custom board.
它们都有相同的IC,并给出相同的问题。因此,问题一定与软件有关

  • 我已经在BitBucket上发布了整个代码和cubeMX文件。请在此处找到链接:
  • 编辑1:此处的相关代码

    #include "main.h"
    #include "stm32f3xx_hal.h"
    #include "i2c.h"
    #include "iwdg.h"
    #include "spi.h"
    #include "tim.h"
    #include "usart.h"
    #include "gpio.h"
    #include "arm_math.h"
    
    
    /* USER CODE BEGIN Includes */
    unsigned int uiCntr;
    /* USER CODE END Includes */
    
    /* Private variables ---------------------------------------------------------*/
    
    /* USER CODE BEGIN PV */
    /* Private variables ---------------------------------------------------------*/
    
    /* USER CODE END PV */
    
    /* Private function prototypes -----------------------------------------------*/
    void SystemClock_Config(void);
    static void MX_NVIC_Init(void);
    
    /* USER CODE BEGIN PFP */
    /* Private function prototypes -----------------------------------------------*/
    
    /* USER CODE END PFP */
    
    /* USER CODE BEGIN 0 */
    
    /* USER CODE END 0 */
    
    /**
      * @brief  The application entry point.
      *
      * @retval None
      */
    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_I2C1_SMBUS_Init();
      MX_SPI1_Init();
      MX_TIM6_Init();
      MX_USART2_UART_Init();
      MX_IWDG_Init();
    
      /* Initialize interrupts */
      //MX_NVIC_Init();
      /* USER CODE BEGIN 2 */
      while(1){
          uiCntr++;
      }
      /* USER CODE END 2 */
    
      /* 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;
      RCC_ClkInitTypeDef RCC_ClkInitStruct;
      RCC_PeriphCLKInitTypeDef PeriphClkInit;
    
        /**Initializes the CPU, AHB and APB busses clocks 
        */
      RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI;
      RCC_OscInitStruct.HSIState = RCC_HSI_ON;
      RCC_OscInitStruct.HSICalibrationValue = 16;
      RCC_OscInitStruct.LSIState = RCC_LSI_ON;
      RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
      if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
      {
        _Error_Handler(__FILE__, __LINE__);
      }
    
        /**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_HSI;
      RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
      RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
      RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    
      if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
      {
        _Error_Handler(__FILE__, __LINE__);
      }
    
      PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_I2C1;
      PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_HSI;
      if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
      {
        _Error_Handler(__FILE__, __LINE__);
      }
    
        /**Configure the Systick interrupt time 
        */
      HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
    
        /**Configure the Systick 
        */
      HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
    
      /* SysTick_IRQn interrupt configuration */
      HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
    }
    
    /**
      * @brief NVIC Configuration.
      * @retval None
      */
    static void MX_NVIC_Init(void)
    {
      /* TIM6_DAC1_IRQn interrupt configuration */
      HAL_NVIC_SetPriority(TIM6_DAC1_IRQn, 0, 0);
      HAL_NVIC_EnableIRQ(TIM6_DAC1_IRQn);
    }
    
    /* USER CODE BEGIN 4 */
    
    /* USER CODE END 4 */
    
    /**
      * @brief  This function is executed in case of error occurrence.
      * @param  file: The file name as string.
      * @param  line: The line in file as a number.
      * @retval None
      */
    void _Error_Handler(char *file, int line)
    {
      /* 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 */`
    
  • 代码只是拒绝进入while循环
  • 如果删除了IWDG init函数,则代码仍停留在序列中的最后一个init函数调用处。若对IWDG进行了注释,它将跳回代码的开头,并一直执行到while循环的开头
  • 可能是启动文件吗
  • 提前感谢您的支持

    亲切问候,,
    Aditya Ayachit

    我能够解决这个问题。 这很傻,但可能对刚开始使用HAL的人有所帮助。 正如old_timer所回应的,这个问题确实与时基有关

    根本原因是: 计时器6正在初始化,但其计时器基数需要单独初始化。 解决方案: 调用函数
    MX\u TIM6\u Init
    后,集成函数
    HAL\u TIM\u Base\u Start\u IT(&htim6)
    。 这就解决了问题。还要注意的是,由于我在中断模式下使用定时器6,我需要HAL_TIM_Base_Start_IT功能。否则,您应该调用
    HAL\u TIM\u Base\u Start
    函数

    亲切问候,


    Aditya Ayachit

    请发布相关代码,而不是链接。您确认正在通话的外围设备已启用时钟?如果您试图以重置或门控时钟方式访问外设,它可能不会响应,并可能挂起处理器。