正点原子阿波罗的delay函数库是通用的吗?

2019-07-20 05:27发布

我手上有一块F409的板子,用HAL库进行开发,然后将阿波罗F4上的Demo里面的delay函数库复制过来,并且在STM32CubeMX上配好了时钟等外设,然后在主函数里面初始化了delay,参数是168,但是延时不准确..
以下是我的主函数:
[mw_shl_code=c,true]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();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_WWDG_Init();
        delay_init(168);
  /* USER CODE BEGIN 2 */
        printf("System ready ");
        HAL_WWDG_Start_IT(&hwwdg);
        HAL_UART_Receive_IT(&huart1,USART1_RX_BUF,1);
  /* USER CODE END 2 */

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

  /* USER CODE BEGIN 3 */
                if(USART1_STA & 0X8000)
                {
                        printf("data:%s ",USART1_RX_Data);
                        printf("len:%d ",USART1_STA&0x7fff);
                        USART1_STA = 0;
                }
                else
                {
                        printf("F4:Hello ");
                        delay_ms(500);
                        continue;
                }
       

  }
  /* USER CODE END 3 */

}[/mw_shl_code]
一下是初始化时钟的函数
[mw_shl_code=c,true]/** System Clock Configuration
*/
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

  __HAL_RCC_PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 25;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  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_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);

  HAL_RCC_EnableCSS();

  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}[/mw_shl_code]
我在程序中只用了一个延时函数:delay_ms(500),可是实际上延时了大约5s....

求大佬协助



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。