STM32的系统滴答定时器(Systick)

发布者:WhisperingWave最新更新时间:2018-12-24 来源: eefocus关键字:STM32  系统滴答定时器  Systick 手机看文章 扫描二维码
随时随地手机看文章

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();


}


关键字:STM32  系统滴答定时器  Systick 引用地址:STM32的系统滴答定时器(Systick)

上一篇:stm32F407的Systick的问题
下一篇:STM32—SysTick使用方法

推荐阅读最新更新时间:2024-03-16 16:21

STM32开发笔记62: 使用MicroLIB
单片机型号:STM32F407VGT6 microLIB 是缺省 C 库的备选库,它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用。LwIP中使用了microLIB,如果不勾选microLIB选项,则程序不能够正常运行,其主要原因在于LwIP使用了microLIB提供的标准输入和输出函数。本文对microLIB做详细介绍。 1、microLIB介绍 Microlib is an alternative library to the default C library. It is intended for use with deeply embedded applications that must fit
[单片机]
<font color='red'>STM32</font>开发笔记62: 使用MicroLIB
STM32 Nor Flash DFU
次要讲讲怎么实现Nor Flash的升级。 Nor Flash的DFU工程还是基于之前的flash DFU的工程上修改而来。工程的目录如下: STM32 Nor Flash DFU - ziye334 - ziye334的博客 我使用的Nor Flash芯片是M29W128F, 该芯片共有128Mb的空间,通过FSMC挂接在BANK0。 正好在UBS的官方程序里也有使用芯片的例子,所以也就是说管方的Nor Flash的驱动代码是使用 M29W128F这款芯片的。所以我们需要从拷贝fsmc_nor.c和fsmc_nor,h这两个文件添加到我们的USB_User这个组中。还要讲我们之前的flash_if文件修改为nor_if名。这
[单片机]
STM32之CAN控制器
1、CAN只具有CAN_High和CAN_Low两条信号线,CAN是以差分信号的形式进行通信的; 2、CAN通信有两种网络:一种是遵循ISO11898标准的高速短距离闭环网络,它的总线最大长度为40m,通信速度最高位1Mbit/s;另外一种是遵循ISO11519-2标准的低速远距离开环网络,最大传输距离为1km,最高通信速率为125kbit/s。 3、CAN的通信节点由一个CAN控制器、一个CAN接收器组成;STM32的CAN接口即为CAN控制器,为了构成完整的节点,还要外接一个CAN收发器。 4、差分信号,即信号的逻辑0和逻辑1由两根差分信号线的电压差来表示。 ISO11898规定CAN协议中处于逻辑1(隐性电平)时,CAN_H
[单片机]
STM32的DMA串口直通
搞这个,起因呢,公司产品里ZigBee模块固件版本不对,一大批产品需要二次升级。 需要升级的ZigBee模块是直接与stm32相连的,没有引出升级口,所以得搞个串口直通程序,通过232转MCU再转ZigBee,来进行升级。 一开始直接中断互通,结果呢,通倒是可以通,一升级固件就不行了,大概是因为数据量较大吧。 所以用了DMA,之前也没用过DMA,就慢慢学慢慢模仿着改呗。 这里要涉及到一个点,DMA的外设到外设,经常写的是,DMA只有外设到内存、内存到外设、内存到内存三种模式。 实际上,DMA是可以外设直接到外设的,而且用法非常非常简单,直接设置成外设到内存或内存到外设模式,然后把内存直接改成外设的地址,就可以了。
[单片机]
<font color='red'>STM32</font>的DMA串口直通
STM32自己总结如何正确创建一个工程
1、建立好文件夹,文件夹中有相应的库函数和头文件等等 以上通过我的G盘里面的建立工程模板解压即可得到 2、通过keil创建test_creat.uvproj到以目录 选择完芯片以后,弹出窗口一定要选择“否” 3、添加文件,只用添加C文件进去 添加完成以后会看到: 4、头文件路径的添加 stm32f10x_it.h ,stm32f10x.h, stm32f10x_conf.h ,core_cm3.h, system_stm32f10x.h 主要添加以上的头文件位置还有各种ppp外设头文件的位置也就是src文件夹 5.编译会出现的问题及解决方法 1、去掉STM32F10
[单片机]
<font color='red'>STM32</font>自己总结如何正确创建一个工程
stm32低功耗实验之待机模式
一 待机模式简介 在stm32的低功耗模式中,待机模式可以实现系统的最低功耗,在这种模式下,只需要2uA左右的电流。 三 待机唤醒程序分析 实验现象: 将程序下载到开发板上后,LED灯会不断地亮灭,当按下KEY2键超过3s时,LED灯灭,标志着单片机进入待机模式,再按下KEY1键,这时唤醒单片机,LED又开始不断地亮灭亮灭。 程序中用到的一些宏定义 #define macEXTI_GPIO_CLK (RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO) #define macEXTI_GPIO_PORT
[单片机]
<font color='red'>stm32</font>低功耗实验之待机模式
采用STM32 单片机的太阳能LED街灯解决方案
  随着化石类能源的日益减少,以及温室气体的过度排放导致全球变暖问题越来越受到重视,人们一方面在积极开发各类可再生新能源,另一方面也在倡导节能减排的绿色环保技术。太阳能作为取之不尽、用之不竭的清洁能源,成为众多可再生能源的重要代表;而在照明领域,寿命长、节能、安全、绿色环保、色彩丰富、微型化的LED固态照明也已被公认为世界一种节能环保的重要途径。太阳能-LED街灯同时整合了这两者的优势,利用清洁能源以及高效率的LED实现绿色照明。   本文介绍的太阳能-LED街灯方案,能自动检测环境光以控制路灯的工作状态,最大功率点追踪(MPPT)保证最大太阳能电池板效率,恒电流控制LED,并带有蓄电池状态输出以及用户可设定LED工作时间等功
[电源管理]
采用<font color='red'>STM32</font> 单片机的太阳能LED街灯解决方案
STM32的 USART1 用 DMA 方式发送与接收
USART1的DMA发送比较简单,在要发送之前,重新设置好DMA_BufferSize的大小,然后启动DMA就行了。不过在设置这一值时,得先关闭DMA通道。代码如下: DMA_ClearFlag(DMA1_FLAG_TC4); //清DMA发送完成标志 DMA_Cmd(DMA1_Channel4, DISABLE); //停止DMA DMA1_Channel4- CNDTR = sizeof(TxBuffer1) / sizeof(TxBuffer1 );//重设传输长度 DMA_Cmd(DMA1_Channel4, ENABLE); //启动DMA USART1的DMA接收:如果向USART1发
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved