OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2317|回复: 10

用过使STM32CUBE的大佬看下我的问题

[复制链接]

2

主题

10

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-8-7
在线时间
6 小时
发表于 2018-8-7 09:38:48 | 显示全部楼层 |阅读模式
1金钱
如图是我的时钟配置图,调用HAL_Delay(1)毫秒延时函数,实际延时达到了3.2ms,按照原子哥的思路,写的微秒延时函数,实际延时也过大,大概3.2us左右,用定时器做的延时函数,也一样的在3.2us左右。下面是STM32CUBE生成的时钟配置函数
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

    /**Configure the main internal regulator output voltage
    */
  __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.HSICalibrationValue = 16;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
  RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;
  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_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

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

最佳答案

查看完整内容[请看2#楼]

貌似MDK仿真看延时不准的。。。 我以前试过仿真调延时函数,显示7.2S实际上是1S 你设置定时2S,然后实际观察看看会不会变成7秒,就知道有没有问题了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
金钱
1032
注册时间
2017-7-26
在线时间
275 小时
发表于 2018-8-7 09:38:49 | 显示全部楼层
zxb2018 发表于 2018-8-7 10:26
另外,我调试时是通过在延时函数前后设断点,在MDK的register窗口,查看前后断点的时间差,来推断延时效 ...

貌似MDK仿真看延时不准的。。。
我以前试过仿真调延时函数,显示7.2S实际上是1S

你设置定时2S,然后实际观察看看会不会变成7秒,就知道有没有问题了
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-8-7
在线时间
6 小时
 楼主| 发表于 2018-8-7 09:40:21 | 显示全部楼层
C:\Users\lq\Desktop
0.png
回复

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
金钱
1032
注册时间
2017-7-26
在线时间
275 小时
发表于 2018-8-7 09:41:21 | 显示全部楼层
直接贴cubemx的配置图,代码压根不想看
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-8-7
在线时间
6 小时
 楼主| 发表于 2018-8-7 09:41:51 | 显示全部楼层
a3748622 发表于 2018-8-7 09:41
直接贴cubemx的配置图,代码压根不想看

图片在二楼
回复

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
金钱
1032
注册时间
2017-7-26
在线时间
275 小时
发表于 2018-8-7 10:05:59 | 显示全部楼层

你直接生成代码后,用HAL_Delay();也是1毫秒变成3.2毫秒吗?
看配置图没啥问题,你仿真的话会不会进入_Error_Handler呢?
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-8-7
在线时间
6 小时
 楼主| 发表于 2018-8-7 10:20:50 | 显示全部楼层
a3748622 发表于 2018-8-7 10:05
你直接生成代码后,用HAL_Delay();也是1毫秒变成3.2毫秒吗?
看配置图没啥问题,你仿真的话会不会进 ...

嗯嗯,生成代码,直接在main函数中调用;硬件仿真不会进入_Erro_Handler,但是软件仿真会,引发的位置在HAL_RCC_OscConfig()的PLL配置中,原因是HAL_TIMEOUT
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-8-7
在线时间
6 小时
 楼主| 发表于 2018-8-7 10:26:58 | 显示全部楼层
a3748622 发表于 2018-8-7 10:05
你直接生成代码后,用HAL_Delay();也是1毫秒变成3.2毫秒吗?
看配置图没啥问题,你仿真的话会不会进 ...

另外,我调试时是通过在延时函数前后设断点,在MDK的register窗口,查看前后断点的时间差,来推断延时效果的
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-8-7
在线时间
6 小时
 楼主| 发表于 2018-8-7 11:17:12 | 显示全部楼层
a3748622 发表于 2018-8-7 10:54
貌似MDK仿真看延时不准的。。。
我以前试过仿真调延时函数,显示7.2S实际上是1S

谢谢大佬,我试了一下,定时2s,MDK显示大概在6.4s,但是我自己估计了一下程序运行时间,绝逼没有6s,我又用手机开了秒表,大概测了一下,实际运行时间是在2S左右,虽然测的不准确,但至少说明6.2s肯定是错误的。继续开10s测试,手机记录10s左右,MDK显示32s。看来是大佬说的情况,MDK的时间是有问题的
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-8-7
在线时间
6 小时
 楼主| 发表于 2018-8-7 11:17:42 | 显示全部楼层
a3748622 发表于 2018-8-7 10:54
貌似MDK仿真看延时不准的。。。
我以前试过仿真调延时函数,显示7.2S实际上是1S

再次感谢大佬
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-8-7
在线时间
6 小时
 楼主| 发表于 2018-8-7 11:20:57 | 显示全部楼层
a3748622 发表于 2018-8-7 10:54
貌似MDK仿真看延时不准的。。。
我以前试过仿真调延时函数,显示7.2S实际上是1S

你的7.2倍可能是因为系统时钟为72M,我这儿3.2倍,可能是因为系统时钟是32M;MDK显示的运行时间,除以倍数可能就是实际运行时间。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 01:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表