历史上的今天
返回首页

历史上的今天

今天是:2024年12月11日(星期三)

正在发生

2019年12月11日 | STM32 SysTick定时器应用【worldsing笔记】

2019-12-11 来源:eefocus

SysTick是CM内核独立的定时器,时钟可以用内核内部的,也可以用芯片厂家(ST)的时钟,参考《Cortex-M3权威指南》的第13章:

image 
另外也可以考《STM32F10xxx Cortex-M3 programming manual.pdf》第4章CM3系统外设,从手册来看,ST应该只提供了内核外部时钟,而外部时钟又分成两种:HCLK/8 和 HCLK, 
image 
ST官方提供了库直接可以操作SYSTICK,但不同的版本使用起来有些区别: 
在V2.0的版本中对SysTick的操作是使用的stm32f10x_systick.c和stm32f10x_systick.h 
void SysTick_CLKSourceConfig(u32 SysTick_CLKSource); 
void SysTick_SetReload(u32 Reload); 
void SysTick_CounterCmd(u32 SysTick_Counter); 
void SysTick_ITConfig(FunctionalState NewState); 
u32 SysTick_GetCounter(void); 
FlagStatus SysTick_GetFlagStatus(u8 SysTick_FLAG); 
image 
但是在V3.0中取消了stm32f10x_systick.c和stm32f10x_systick.h文件直接在core_cm3.h文件定义成内联函数 
/* ##################################    SysTick function  ############################################ */ 
#if (!defined (__Vendor_SysTickConfig)) || (__Vendor_SysTickConfig == 0) 
/** 
* @brief  Initialize and start the SysTick counter 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 for Cortex-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 
而且是默认使用的AHB总线的时钟HCLK 
 
宗合上述如果使用V3版本SysTick的话可以做以下操作,在不知道AHB总线的时钟的频下也可以直接算出加载值: 
void SysTickInit(u16 Frequency) 

RCC_ClocksTypeDef  RccClocks; 
RCC_GetClocksFreq(&RccClocks); 
SysTick_Config(RccClocks.HCLK_Frequency / Frequency); 

//systick.c文件 
#include "stm32f10x_rcc.h" 
#include "systick.h" 
u8 SysTickTimes[SYS_TICK_TIME_SIZE]; 
void SysTickInit(u16 Frequency) 

u8 i; 
RCC_ClocksTypeDef  RccClocks; 
for(i = 0; i < SYS_TICK_TIME_SIZE; i++) 
SysTickTimes = 0; 
RCC_GetClocksFreq(&RccClocks); 
SysTick_Config(RccClocks.HCLK_Frequency / Frequency); 

void SysTick_Handler(void) 

u8 i; 
for(i = 0; i < SYS_TICK_TIME_SIZE; i++) 
if(SysTickTimes) 
SysTickTimes--; 

/** 
  ****************************************************************************** 
  * @file    systick.h 
  * @author  onsunsl 
  * @version V0.1 
  * @date    11-March-2013 
  * @brief   define the zx240160m1a option cmd 
  ****************************************************************************** 
  */ 
#ifndef __SYSTICK__H 
#define __SYSTICK__H 
void SysTickInit(u16 Frequency); 
#define SYS_TICK_TIME_SIZE    10 
#endif 
/******************* (C) COPYRIGHT 2013 LCJCTEC *****END OF FILE***************/


推荐阅读

史海拾趣

Chauvin Arnoux公司的发展小趣事

在1905年,Chauvin Arnoux公司推出了带有曲柄电感的欧姆表,这一创新为电气测量领域带来了突破性的进展。随后,在1923年,公司进一步发展了这一技术,使得欧姆表的测量不再受到曲柄速度的影响,大大提高了测量的准确性和稳定性。这一系列的创新使得Chauvin Arnoux在电气测量领域确立了领先地位,为后续的发展奠定了坚实的基础。

Dynachip Corp公司的发展小趣事

Dynachip Corp始终将创新作为公司发展的核心动力。他们不断投入研发资源,探索新的技术方向和应用场景。同时,他们还积极关注行业动态和市场趋势,及时调整产品策略和市场布局。这种持续创新的精神使Dynachip Corp能够保持在行业中的领先地位,并为未来的发展奠定了坚实的基础。展望未来,Dynachip Corp将继续秉承创新、品质、合作的理念,致力于成为全球领先的半导体企业。

德立电子(DDY)公司的发展小趣事

随着电子行业的快速发展,德立电子意识到技术创新的重要性。公司加大研发投入,不断推出高频贴片绕线电感、立式电感、磁环电感等新产品,满足市场多样化需求。同时,德立电子还注重知识产权保护,申请多项专利,确保技术领先。

Arcolectric公司的发展小趣事

Arcolectric始终坚持品质至上的原则,对产品的每一个环节都进行严格的质量控制。公司不仅通过国际制造架构的合作来确保产品的高品质,还积极引进先进的生产设备和技术人才,不断提升产品的性能和可靠性。这种对品质的执着追求使得Arcolectric的产品在全球范围内得到了广泛的认可和赞誉。

强盛电子(AEC)公司的发展小趣事

强盛电子(AEC)自成立以来,一直致力于电子技术的研发与创新。公司研发团队经过数年的努力,成功开发出一款具有颠覆性的新型芯片,这款芯片在性能上远超当时的同类产品,引起了市场的广泛关注。随着这款芯片的量产和上市,AEC的市场份额迅速扩大,成为行业内的佼佼者。

EOZ Secme公司的发展小趣事

随着国内市场的饱和,EOZ Secme开始积极寻求海外市场的拓展。公司制定了详细的国际化战略,通过参加国际展会、建立海外销售渠道等方式,逐步打开了国际市场的大门。同时,EOZ Secme还积极与国际知名企业开展合作,共同研发新产品,拓展业务领域。这些努力使得EOZ Secme在国际市场上的影响力不断增强。

问答坊 | AI 解惑

不需零线的三相交流源相序检测保护器集成电路TH221A

介绍了不需零线的三相交流电源相序检测保护集成电路TH221A的内部结构,引脚功能,设计特点和参数限制.给出了由两只TH221A组成的三相二重逆变桥输出的缺相和错相保护电路. …

查看全部问答>

RISC单片机的特点

作者:邓宏杰先生 在MCU开发方面,以架构而言,可分为两大主流;RISC(Reduced Instruction Set Computer)与CISC(Complex Instruction Set Computer), RISC代表MCU的所有指令都是利用一些简单的指令组成的,简单的指令代表 MCU 的线路可以尽量做到最佳 ...…

查看全部问答>

关于薄膜键盘接口

我们订做了一个薄膜键盘,有N多线出来,怎么把这些线转换为PS/2接口?需要加什么东西么?…

查看全部问答>

c# 汉字 内码

c#下: array[0] = (byte)t1; string ch = System.Text.Encoding.Default.GetString(array); //字节解码成汉字... wince下 没有GetString()方法; 请问一下,wince下怎么将内码转换成汉字??…

查看全部问答>

崩溃了,这没有串口的笔记本编程咋整啊?

笔记本没串口,要向板子写程序,买了根USB转串口的线。 烧51程序时,直接接在板子的9针串口没问题。但一块板子是用PS/2的,于是多接一根,USB-232  232-PS/2,烧写就失败了。 还有,用超级终端和一块ARM板通信时,返回的都是乱码,到 ...…

查看全部问答>

单片机初学者必读

   单片机是一门实践性非常强的学科,没有实践一切都是“空中楼阁”,花点钱买块开发板是非常必要的。(“开发板就好比农民种地的种子,只要能合理利用,它便会生根发芽,最后定能收获丰盛的果实。想要种好地,不要不舍得去买好种子”。 ...…

查看全部问答>

请问在大连目前这些嵌入式系统学习哪个比较好找工作?

   我是做APS.Net的,用的是C#,但是我对嵌入式系统的开发产生了浓厚的兴趣,想转投这个行业,看了看有C、C++、WinCE、嵌入式Linux、VxWorks等,请问这些哪个比较容易上手?在大连搞嵌入式开发的公司里面用哪个的比较多一些?…

查看全部问答>

WINCE下SHFileOperation支持多文件复制吗?

如题,要做个类似资源管理器的程序 实现一些文件操作 当多选文件进行复制时,SHFileOperation还支持吗 有做过的指点下. 顺便问下  复制时好像阻塞在那,不能进行其他操作 怎么回事呢…

查看全部问答>

有谁研究过歌乐CD机I2C通信协议,请求交流~~~~~~~~~~~~~~~~

有谁研究过歌乐CD机I2C通信协议,请求交流~~~~~~~~~~~~QQ :31498421…

查看全部问答>

烧写2812 FLASH 遇到问题

我现在烧写2812 CE 的FLASH时,MC/MP置1,SCITXDA=1, 烧写FLASH 时,但烧写界面的右半面灰掉,无法选中进行烧些,左面的加密,部分界面却可以进行操作 ,只有UNLOCK键灰掉无法使用,但按UNLOCK键,总提示UNLOCK 失败,请问是什么原因?是否需要在插 ...…

查看全部问答>