历史上的今天
返回首页

历史上的今天

今天是:2024年12月24日(星期二)

正在发生

2018年12月24日 | STM32的系统滴答定时器(Systick)

2018-12-24 来源:eefocus

1.systick时钟来源


2.SysTick库函数



3.源码

 


/**


  *@}


 */


 


/** @defgroup SysTick_clock_source


  *@{


 */


 


#define SysTick_CLKSource_HCLK_Div8    ((uint32_t)0xFFFFFFFB)


#define SysTick_CLKSource_HCLK         ((uint32_t)0x00000004)


#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SysTick_CLKSource_HCLK) || \


                                       ((SOURCE) == SysTick_CLKSource_HCLK_Div8))


 


 


/**


  *@brief  Configures the SysTick clocksource.


  *@param  SysTick_CLKSource: specifies theSysTick clock source.


 *   This parameter can be one ofthe following values:


 *     @argSysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clocksource.


 *     @arg SysTick_CLKSource_HCLK:AHB clock selected as SysTick clock source.


  *@retval None


  */


void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)


{


  /* Check the parameters */


  assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));


  if (SysTick_CLKSource == SysTick_CLKSource_HCLK)


  {


   SysTick->CTRL |= SysTick_CLKSource_HCLK;


  }


  else


  {


   SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;


  }


}


 


 


/*##################################   SysTick function ############################################ */


 


#if (!defined (__Vendor_SysTickConfig)) || (__Vendor_SysTickConfig == 0)


 


/**


 *@brief  Initialize and start the SysTickcounter and its interrupt.


 *


 *@param   ticks   number of ticks between two interrupts


 *@return  1 = failed, 0 = successful


 *


 *Initialise the system tick timer and its interrupt and start the


 *system tick timer / counter in free running mode to generate


 *periodical interrupts.


 */


static __INLINE uint32_t SysTick_Config(uint32_t ticks)


{


  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */


                                                              


  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      /* set reload register */


  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority forCortex-M0 System Interrupts */


  SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */


  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |


                   SysTick_CTRL_TICKINT_Msk   |


                   SysTick_CTRL_ENABLE_Msk;                   /* Enable SysTick IRQ and SysTick Timer*/


  return (0);                                                 /* Function successful */


}


 


#endif


 


 


#ifdefSYSCLK_FREQ_HSE


  uint32_t SystemCoreClock         = SYSCLK_FREQ_HSE;        /*!


#elif defined SYSCLK_FREQ_24MHz


  uint32_t SystemCoreClock         = SYSCLK_FREQ_24MHz;        /*!< System Clock Frequency (Core Clock) */


#elif defined SYSCLK_FREQ_36MHz


  uint32_t SystemCoreClock         = SYSCLK_FREQ_36MHz;        /*!


#elif defined SYSCLK_FREQ_48MHz


  uint32_t SystemCoreClock         = SYSCLK_FREQ_48MHz;        /*!


#elif defined SYSCLK_FREQ_56MHz


  uint32_t SystemCoreClock         = SYSCLK_FREQ_56MHz;        /*!


#elif defined SYSCLK_FREQ_72MHz


  uint32_t SystemCoreClock         = SYSCLK_FREQ_72MHz;        /*!


#else /*!< HSI Selected as System Clock source */


  uint32_t SystemCoreClock         = HSI_VALUE;        /*!< System Clock Frequency (Core Clock) */


#endif


 


 ///////////////////////////////


   /* Configure the SysTick */


SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);//8000000/1000=>1ms


 


/**


 *This is the timer interrupt service routine.


 *


 */


void SysTick_Handler(void)


{


   /* enter interrupt */


   rt_interrupt_enter();


   rt_tick_increase();


   /* leave interrupt */


   rt_interrupt_leave();


}


推荐阅读

史海拾趣

东晨(DC)公司的发展小趣事

东晨(DC)公司深知市场需求的重要性,因此制定了精准的市场策略。公司通过深入研究消费者需求,不断推出符合市场趋势的新产品。同时,东晨(DC)公司还注重与渠道商的合作,通过建立稳定的销售渠道,将产品快速推向市场。此外,公司还积极参与各种展会和论坛,展示最新技术和产品,赢得了客户和业界的广泛赞誉。

Datalogic公司的发展小趣事

随着电动汽车行业的兴起,汽车行业对零部件的标记和追踪要求也日益严格。Datalogic凭借其强大的技术实力,成功开发出3W固态激光打标机Vlase UV 3,该产品能够在橙色部件上实现高度可见、稳定和持久的对比度标记,解决了电动汽车生产中的一大难题。这一创新不仅展示了Datalogic的技术实力,也进一步巩固了其在电子行业中的领先地位。

辰颐电子公司的发展小趣事

在辰颐电子公司的发展过程中,他们意识到单打独斗很难在市场中取得优势。因此,公司开始注重产业链的整合和协同发展。他们与上游供应商建立了紧密的合作关系,确保原材料的稳定供应和质量保证;与下游客户建立了长期的合作伙伴关系,提供定制化的解决方案和优质的服务。此外,公司还积极参与行业协会和组织的活动,加强与同行业企业的交流与合作,共同推动整个电子行业的发展。

Excel Cell Electronic Co Ltd公司的发展小趣事

为了拓展海外市场,ECE公司制定了国际化战略。公司积极参与国际电子展会,与国际知名企业建立合作关系,不断提升品牌知名度和国际影响力。同时,ECE公司在海外设立分支机构,加强与国际市场的联系和沟通,进一步拓展市场份额。这些努力使ECE公司的产品成功进入欧洲、北美等发达地区市场,实现了全球化布局。

昆泰芯微电子(CONNTEK)公司的发展小趣事

昆泰芯微电子坚持以人为本,践行合作共赢的企业文化。公司注重员工的个人发展和团队协作,鼓励员工积极参与公司的各项活动和决策。同时,公司也积极与合作伙伴建立良好的合作关系,共同推动行业的发展。公司以正直、求实、进取、创新、协同、分享的十二字箴言作为公司从上至下贯彻的做人做事理念,让员工和企业共同成长,共创前程,共享收获。

以上五个故事概述了昆泰芯微电子在电子行业中的重要发展历程和成就。这些故事不仅展现了公司的技术实力和市场竞争力,也体现了公司的企业文化和发展理念。

Anderson Power Products公司的发展小趣事

昆泰芯微电子实行立体作战的研发模式,整合了芯片设计、电子应用设计、工业设计等多家专业设计公司。这种研发模式不仅为公司带来了更多的创新机会,也为工程师们提供了更多的挑战和成长机遇。公司注重员工的培训和发展,有专员负责新人的岗前培训,进行岗位知识的输送以及疑难问题的解答。同时,公司也鼓励员工参与实际项目,由专业领域的前辈进行引领,让员工在实践中快速成长。

问答坊 | AI 解惑

用于高灵敏度器件的交流与直流测量方法

用于高灵敏度器件的交流与直流测量方法…

查看全部问答>

新手请教一个shell问题

小弟现在在启动系统的时候出现shell不能正常运行的情况,感觉是没有shell fdIn = ioGlobalStdGet (STD_IN);     fdOut = ioGlobalStdGet (STD_OUT);     fdErr = ioGlobalStdGet (STD_ERR);     #endif /* SHEL ...…

查看全部问答>

关于U-BLOX 5S的GPS模块在接收数据上分析的问题

小弟最近调试GPS模块,通过单片机串口已经能够接收GPS模块发来的信息了,但是在接收$GPMRC消息的时候,总是有时间信息,后面的定位信息总是V,看手册说V是无法定位,只有A后面才是有效数据,但是总是收不到A,为什么还能收到时间呢?…

查看全部问答>

wince下用什么函数可代替getenv()???

wince下用什么函数可代替getenv()?希望知道的高手告诉一下…

查看全部问答>

求助!信号处理问题

我做一个多参数测试仪,现在有一个复合信号,怎么样分离出交流分量和直流分量. …

查看全部问答>

3D洗衣机 今天你凭什么牛气冲天?

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 3D智能控制技术,小身材大容量的秘密   过去,人们不得不在洗衣机占位和洗衣效率之间做出选择,要么牺牲精致装修的效果,选择庞然大物;要么牺牲洗衣效率,忍受多次洗衣的繁琐。现在,为了调 ...…

查看全部问答>

请教版主STM32的抗干扰问题

                                 我用STM32做了一个光源控制器,下面有个驱动板。用STM32引脚中的PD8,9,10接1K电阻直接驱动一个指示用LED,一切正常 ...…

查看全部问答>

【晒经典】晒晒我设计的家用煤气报警器

这个从PCB到程序都是本楼主一人完成,现晒晒原理哈,这个老好了,重来就不误报呵呵       这个报警器可不是一般的报警器它可控制电磁阀。直接就关了煤气,等人回来后再把电磁阀拨出来。又重新使用,这个可以挂在家里煤气的 ...…

查看全部问答>

AVR单片机矩阵键盘控制电机

AVR单片机矩阵键盘控制电机,PE口接键盘,pc口接电机,电机正转是0x28,我不知道哪里有问题,求帮忙#include <iom128v.h> #define uchar unsigned char #define uint unsigned int uchar tab[]={0x28,0x28,0x28,0x28}; void delay(uint k) ...…

查看全部问答>

入门贴虚拟机+ubuntu 12.04 环境搭建教程

http://wenku.baidu.com/view/734ae36148d7c1c708a14530.html…

查看全部问答>