4901|7

1万

帖子

16

TA的资源

版主

楼主
 

【晒心得】systick函数 [复制链接]

自从有了STM32我觉得最方便的就是这个函数啦!!!

比如:我们以前延时函数总是用for循环,准不准另码说,总觉得有点“胡弄”。现在好了,准确无误。

该函数有几点注意:

1.
    1.该函数是CMSIC函数,就是娘胎里自带,可以延时从US到MS甚至S
       函数直接调用SysTick_Config()函数配置。
      
    2.

       可以配置分频,要分频可以调函数SysTick_CLKSourceConfig(),在stm32f0xx_misc.c

    3.

      它的优先级在SysTick_Config()函数中被调用,对编程者来说这些都不用管

    4.
        编程者只要管
        重装值 =  SysTick 定时频率(HZ) * 想要延时的时间


以下是实例:

对STM32的时钟我想不必太深究,为什么呢,就是外部时钟,原因很简单,保证时钟准确无误给后边串口,SPI,I2C
有个时钟准确的保证。在这样的前提下,我想不用过多考虑时钟用什么不用什么,就是外部时钟

这个定义在

在system_stm32f0xx.c   文件中

#define PLL_SOURCE_HSI        // HSI (~8MHz) used to clock the PLL, and the PLL is used as system clock source

有看官会问,我做系统也用外部么,我的答案是的,且代码都不用改^_^

然后是真证的实现

#if defined (PLL_SOURCE_HSI)
  /* At this stage the HSI is already enabled */

  /* Enable Prefetch Buffer and set Flash Latency */
  FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;

  /* HCLK = SYSCLK */
  RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

  /* PCLK = HCLK */
  RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;

  /* PLL configuration = (HSI/2) * 12 = ~48 MHz */
  RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
  RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI_Div2 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL12);

  /* Enable PLL */
  RCC->CR |= RCC_CR_PLLON;

  /* Wait till PLL is ready */
  while((RCC->CR & RCC_CR_PLLRDY) == 0)
  {
  }

  /* Select PLL as system clock source */
  RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
  RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;   

  /* Wait till PLL is used as system clock source */
  while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)
  {
  }

最后为了编程定义一个宏

uint32_t SystemCoreClock    = 48000000;

实现起来方便很只要定义两个函数

void Delay(__IO uint32_t nTime)
{
  TimingDelay = nTime;

  while(TimingDelay != 0);
}

void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  {
    TimingDelay--;
  }

在中断文件:stm32F0xx_it.c声明一下

void SysTick_Handler(void)
{
  TimingDelay_Decrement();
}

即可,至于更大时间延时,用户可在此自行编写。这个延时是毫秒级。也可微秒级,秒级
以下是图片



[ 本帖最后由 ddllxxrr 于 2013-11-21 17:38 编辑 ]

IMG_0314.jpg (2.69 MB, 下载次数: 0)

IMG_0314.jpg
此帖出自stm32/stm8论坛

最新回复

#define PLL_SOURCE_HSI        // HSI (~8MHz) used to clock the PLL, and the PLL is used as system clock source是这个定义  详情 回复 发表于 2013-11-21 17:44
点赞 关注
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 

回复
举报

2781

帖子

419

TA的资源

五彩晶圆(中级)

沙发
 

我在这个版本的函数库中没有找到相应的宏定义?请问你用的是什么版本?
此帖出自stm32/stm8论坛
 
个人签名
 

回复

1万

帖子

16

TA的资源

版主

板凳
 

额,那个是在程序中定义地,不论什么版本

此帖出自stm32/stm8论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 

回复

2781

帖子

419

TA的资源

五彩晶圆(中级)

4
 
system_stm32f0xx.c (12.12 KB, 下载次数: 0)

这里没有定义的啊
此帖出自stm32/stm8论坛

点评

/** @addtogroup STM32F0xx_System_Private_Variables * @{ */ uint32_t SystemCoreClock = 48000000; __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; /**  详情 回复 发表于 2013-11-21 17:30
 
个人签名
 
 

回复

1万

帖子

29

TA的资源

裸片初长成(高级)

5
 
使用内部和外部时钟还是有区别的,

如它的static void SetSysClock(void)函数中,有关于它的设置:

#if defined (PLL_SOURCE_HSI)
  /* At this stage the HSI is already enabled */
   …………
#else
#if defined (PLL_SOURCE_HSE)
  /* Enable HSE */   
  …………
#endif

手册《DM00091010》中说明了,如果使用外部时钟HSE,在外部时钟不起作用时,自动切换到内部时钟HSI。

所以,虽然都能工作,但还是有区别的。
此帖出自stm32/stm8论坛

点评

恩,但我就用外部时钟准成:kiss:  详情 回复 发表于 2013-11-21 17:31
 
 
 

回复

1万

帖子

16

TA的资源

版主

6
 

回复 4楼qinkaiabc 的帖子

/** @addtogroup STM32F0xx_System_Private_Variables
  * @{
  */
uint32_t SystemCoreClock    = 48000000;
__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};

/**
  *
就在那里唉
此帖出自stm32/stm8论坛

点评

#define PLL_SOURCE_HSI // HSI (~8MHz) used to clock the PLL, and the PLL is used as system clock source是这个定义  详情 回复 发表于 2013-11-21 17:44
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

1万

帖子

16

TA的资源

版主

7
 

回复 5楼dontium 的帖子

恩,但我就用外部时钟准成
此帖出自stm32/stm8论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

2781

帖子

419

TA的资源

五彩晶圆(中级)

8
 

回复 6楼ddllxxrr 的帖子

#define PLL_SOURCE_HSI        // HSI (~8MHz) used to clock the PLL, and the PLL is used as system clock source是这个定义
此帖出自stm32/stm8论坛
 
个人签名
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表