你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F407VET6 上电启动要1.3秒 是什么问题?

[复制链接]
a838899 提问时间:2018-2-12 09:56 /
程序就是下面的:
int main(void)
{


  HAL_Init();
  SystemClock_Config();
//到这一步要1.2S。。
  MX_GPIO_Init();


麻烦高手看看 怎么加快启动速度最好500MS以内能到。谢谢高手。。。。

收藏 评论11 发布时间:2018-2-12 09:56

举报

11个回答
a838899 回答时间:2018-2-12 13:28:43
果然是复位芯片造成的 去掉后就好了。 启动1.jpg

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结帖奖励

查看全部评分

a838899 回答时间:2018-2-12 09:59:39
启动S.jpg
黄色是芯片供电的
蓝色的是IO口输出的,中间差了1.3S  麻烦看看是什么原因?
回答时间:2018-2-12 10:11:12
楼主,RCC初始化了哪些时钟?我看代码这里初始化的时候会有一些延时等待初始完成。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

toofree 回答时间:2018-2-12 10:28:27
本帖最后由 toofree 于 2018-2-12 10:30 编辑

上原理图和完整的程序吧,你的复位管脚怎么接的?
时间长,一般有三种可能:复位时间长,配置外置时钟等待准备好,程序延时。
你的程序只有个名字,不知道里面你干什么了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

Angel_YY 回答时间:2018-2-12 10:57:50
可以通过示波器测量系统上电到外部晶振起震的时间长度,如果这个过程占用时间很长的话,重点排查硬件电路,尤其是电源和晶振电路。如果这个过程时间很短的话重点排查软件部分,是否延时函数或者IO初始化和输出时延时过长。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

a838899 回答时间:2018-2-12 11:04:47
本帖最后由 a838899 于 2018-2-12 11:22 编辑

主要是程序就执行  HAL_Init(); @retval HAL status
  */
HAL_StatusTypeDef HAL_Init(void)
{
  /* Configure Flash prefetch, Instruction cache, Data cache */
#if (INSTRUCTION_CACHE_ENABLE != 0U)
   __HAL_FLASH_INSTRUCTION_CACHE_ENABLE();
#endif /* INSTRUCTION_CACHE_ENABLE */

#if (DATA_CACHE_ENABLE != 0U)
   __HAL_FLASH_DATA_CACHE_ENABLE();
#endif /* DATA_CACHE_ENABLE */

#if (PREFETCH_ENABLE != 0U)
  __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
#endif /* PREFETCH_ENABLE */

  /* Set Interrupt Group Priority */
  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);

  /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */
  HAL_InitTick(TICK_INT_PRIORITY);

  /* Init the low level hardware */
  HAL_MspInit();

  /* Return function status */
  return HAL_OK;
}





  SystemClock_Config();   用的STM32CubeMX  生成的代码,两句时间太久 ,复位普通的阻容 10K+0.1复位脚。。/** System Clock Configuration
*/
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

    /**Configure the main internal regulator output voltage
    */
  __HAL_RCC_PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  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 = 7;
  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_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != 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);
}

这个是下面的这句:
void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOE_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
        
        /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = WDI_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  HAL_GPIO_Init(WDI_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pin Output Level */
        HAL_GPIO_WritePin(GPIOC, WDI_Pin, GPIO_PIN_RESET);

nyszx 回答时间:2018-2-12 11:07:29
这种现象很可能是RCC时钟配置失败导致的。楼主是不是启用外部晶振后但外部晶振失效,系统RCC等待HSE超时了然后切内部HSI导致的延时出现呀。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

x5y4z3 回答时间:2018-2-12 11:07:57
能否在 HAL_Init(); 之前设一个 Debug 的断点或设置一个 GPIO 啥的,好更进一步来做分析?!

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wenyangzeng 回答时间:2018-2-12 11:30:36
本帖最后由 wenyangzeng 于 2018-2-12 11:38 编辑
a838899 发表于 2018-2-12 11:04
主要是程序就执行  HAL_Init(); @retval HAL status
  */
HAL_StatusTypeDef HAL_Init(void)

F407主频是168MHZ,如果晶振是8MHZ,配置应该如下:
RCC_OscInitStruct.PLL.PLLM = 4;
  RCC_OscInitStruct.PLL.PLLN = 168;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;

如果晶振是25MHZ,应该如下配置:
RCC_OscInitStruct.PLL.PLLM =25;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;
无标题.png

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版