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

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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版