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

cube产生代码,初始化不成功

[复制链接]
uwyciw100 提问时间:2017-2-17 09:12 /
用cube产生一份代码,在初始化配制阶段,会死在下面这段代码中:
  1. if (SysTick_Config((uint32_t)(SystemCoreClock * 90e-3))) {
  2.     /* Capture error */
  3.     while (1) ;
  4.   }
复制代码

在工程中,查找到涉及到的几个定义和变量,如下:
  1. uint32_t SystemCoreClock = 16000000;

  2. #define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)  

  3. _STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
  4. {
  5.   if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
  6.   {
  7.     return (1UL);                                                   /* Reload value impossible */
  8.   }

  9.   SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
  10.   NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
  11.   SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */
  12.   SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
  13.                    SysTick_CTRL_TICKINT_Msk   |
  14.                    SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
  15.   return (0UL);                                                     /* Function successful */
  16. }
复制代码
请问,第一个函数开头的比较用意何在?
谢谢!!!
收藏 1 评论9 发布时间:2017-2-17 09:12

举报

9个回答
creep 回答时间:2017-2-17 09:31:43
是不是超过了systick的24bit的存储范围了。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

uwyciw100 回答时间:2017-2-17 09:59:26
creep 发表于 2017-2-17 09:31
是不是超过了systick的24bit的存储范围了。

跟踪代码执行,在运行第一个函数时,SystemCoreClock 变为216000000(系统时钟),看来是超了systick。请问想使能systick,只需要在configureation->NVIC->code generation中勾选time base:system tick timer就可以了吗?systick的中断频率在哪里设置呢?
谢谢!
creep 回答时间:2017-2-17 10:23:21
uwyciw100 发表于 2017-2-17 09:59
跟踪代码执行,在运行第一个函数时,SystemCoreClock 变为216000000(系统时钟),看来是超了systick。请 ...

你先看下  HAL_Init(); 这个函数吧。
uwyciw100 回答时间:2017-2-17 10:25:15
creep 发表于 2017-2-17 10:23
你先看下  HAL_Init(); 这个函数吧。

希望是在cubemx中直接配置最好不过了,找了半天,没找到在哪配制。
ddllxxrr 回答时间:2017-2-17 11:49:08
是不是 SysTick那块没有设对,一般来请设对了不会出现这种情况

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

海迹天涯 回答时间:2017-2-17 11:58:19
我就看看不说话
uwyciw100 回答时间:2017-2-17 13:41:19
ddllxxrr 发表于 2017-2-17 11:49
是不是 SysTick那块没有设对,一般来请设对了不会出现这种情况

systick有哪些对应的设置项吗?我想设置周期,没找到
zoomdy 回答时间:2017-2-17 20:25:30
假设:SystemCoreClock = 216000000
那么:SystemCoreClock * 90e-3 = 19440000 = 0x128a180
传递给SysTick_Config函数的参数值为0x128a180,超出了可接受的最大值0xffffff,因此函数内的第一个return起作用了。
  1.   if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
  2.   {
  3.     return (1UL);                                                   /* Reload value impossible */
  4.   }
复制代码

检查你的时钟设置,降低HCLK频率,或者选择其他频率更低的时钟作为SysTick的输入时钟源。
如果你说明了你的MCU型号,可以帮你试试生成的代码,你没说,也就没法试了。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

uwyciw100 回答时间:2017-2-20 09:37:58
zoomdy 发表于 2017-2-17 20:25
假设:SystemCoreClock = 216000000
那么:SystemCoreClock * 90e-3 = 19440000 = 0x128a180
传递给SysTick ...

我把sysclk设置成108m是可以的,我用的是stm32f767,代码是使用simulink和stm32cube共同产生的,如果只使用stm32cube产生代码,没有这个问题。

所属标签

相似问题

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