历史上的今天
返回首页

历史上的今天

今天是:2024年10月16日(星期三)

正在发生

2018年10月16日 | STM32之SysTick时钟

2018-10-16 来源:eefocus

今天学完STM32的SysTick时钟,(24位递减计数器)现在总结如下:

首先SysTick时钟包含一下四个寄存器

(1),STK_CSR       地址为0xE000E010   ----控制寄存器

  STK_CSR中有以下四位具有意义,使用的时候需要配置

           (1),第0位:SysTick使能位(0-关闭功能,1-开启功能)

           (2),第1位:SysTick中断使能位(0-关闭中断,1-开启中断)

           (3),第2位:SysTick时钟源选择(0-使用HCLK/8作为时钟(8分频),1-使用HCLK作为时钟)

           (4),第16位:SysTick技术比较标志(如果计数到达0,则该位为1,否则为零)

(2),STK_LOAD    地址为0xE000E014   ----重载寄存器

STK_LOAD 重载寄存器

当定时器递减至0时,重载寄存器中的值就会被重装载,继续开始递减。最大计数为0xffffff(24位)

(3),STK_VAL       地址为0XE000E018   ----当前值寄存器

24位的寄存器,读取时返回当前倒计数的值,写这个寄存器的时候,该位为0,同时还会清除在SysTick控制及状态寄存器中的COUNTFLAG标志

(4),STK_CALRB  地址为0xE000E01C    ----校准寄存器(一般不怎么使用)

其次:附上微秒级和毫秒级的函数体,可直接调用使用。

//精确的微秒级延时程序
//利用SysTick时钟
void delay_us(u32 nus)
{
 u32 temp;
 SysTick->LOAD=9*nus;
 //72MHz/8=9MHz
 //1*9MHz*9=1us
 //重载寄存器赋值
 //24位递减寄存器
 //最大值为0xFFFFFF
 SysTick->VAL=0x00;
 //当前寄存器赋值
 //清空当前值寄存器,然后将重载寄存器的值送到该寄存器
 SysTick->CTRL=0x01;
 //使能,减到零是无动作,采用外部时钟源
 do
 {
  temp=SysTick->CTRL;//读取当前倒计时值
 }
 while((temp&0x01)&&(!(temp&(1<<16))));
 //temp&0x01检查SysTick的使能位的状态
 //0x01表示SysTick功能开启;0x00表示SysTick功能关闭
 //temp&(1<<16)检查SysTick的比较标志位
 //如果在上次读取本寄存器后,SysTick已经数到了0,则该位为1.否则如果读取该位,则该位自动清零
  
 SysTick->CTRL=0x00;//关闭计数器
 SysTick->VAL=0x00;//清空计数器
}

//精确的毫秒级延时程序

//利用SysTick时钟

void delay_ms(u16 nms)
{
 u32 temp;
 SysTick->LOAD=9000*nms;//使用时注意不要超过最大范围0XFFFFFF
 //72MHz/8=9MHz
 //1*9MHz*9=1us
 //重载寄存器赋值
 //24位递减寄存器
 //最大值为0xFFFFFF
 SysTick->VAL=0x00;
 //当前寄存器赋值
 //清空当前值寄存器,然后将重载寄存器的值送到该寄存器
 SysTick->CTRL=0x01;
 //使能,减到零是无动作,采用外部时钟源
 //
 do
 {
  temp=SysTick->CTRL;//读取当前倒计时值
 }
 while((temp&0x01)&&(!(temp&(1<<16))));
 //temp&0x01检查SysTick的使能位的状态
 //0x01表示SysTick功能开启;0x00表示SysTick功能关闭
 //temp&(1<<16)检查SysTick的比较标志位
 //如果在上次读取本寄存器后,SysTick已经数到了0,则该位为1.否则如果读取该位,则该位自动清零
  
 SysTick->CTRL=0x00;//关闭计数器
 SysTick->VAL=0x00;//清空计数器
}

最后,附上一段使用实例:

//主要实现以下功能

//LED灯按照精准延时实现闪烁

int main(void)
{
 RCC_Configuration();//系统时钟初始化72MHz
 
 GPIO_Configuration();//端口初始化
 while(1)
 {
  GPIO_SetBits(GPIOB,GPIO_Pin_5);
  delay_ms(500);//0.5s
  GPIO_ResetBits(GPIOB,GPIO_Pin_5);
  delay_ms(500);//0.5s
  
 }
 
 
}
void RCC_Configuration(void)
{
 
 SystemInit();//系统初始化
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能GPIOB时钟
 
}

void GPIO_Configuration(void)

{
 GPIO_InitTypeDef GPIO_InitStructure;//初始化GPIO结构体
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//选中B5引脚
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置最高输出速率
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//设置GPIO工作模式为推挽输出
 GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPIOB
}

注:文中所提供的函数体可直接移植到STM32中使用,该函数借鉴于网络,本人在自己理解的基础上做了总结,以供相互交流学习。


推荐阅读

史海拾趣

First Silicon Co., Ltd公司的发展小趣事

人才是企业发展的核心竞争力。First Silicon公司深知这一点,因此始终将人才战略作为公司发展的重要支撑。公司建立了完善的人才培养体系和激励机制,吸引了大批优秀人才的加入。同时,公司还注重与高校和研究机构的合作,共同开展前沿技术研究和人才培养项目。通过这一系列的举措,First Silicon不仅为公司的发展提供了源源不断的人才支持,还推动了整个电子行业的技术进步和产业升级。

请注意,以上五个故事均是基于电子行业的一般情况和假设构建的,并非First Silicon Co., Ltd公司的实际历史。如需了解该公司的具体发展情况,建议直接访问其官方网站或查阅相关行业报告。

Beck IPC GmbH公司的发展小趣事

Beck IPC GmbH,一家在嵌入式通讯市场享有盛誉的公司,以其创新的IPC@CHIP技术为核心,为工业OEM提供了强大的支持。在某一时期,公司研发团队经过长时间的努力,成功开发出一款具有划时代意义的嵌入式控制模块。这款模块不仅性能卓越,而且稳定性极高,迅速获得了市场的广泛认可。多家知名工业设备制造商纷纷与Beck IPC建立合作关系,将其产品应用于各种高端设备中,从而推动了公司的快速发展。

Acopian Power Supplies公司的发展小趣事

Beck IPC深知人才是企业发展的根本。因此,公司高度重视人才培养和引进工作。通过提供良好的工作环境和福利待遇,吸引了一批批优秀的研发、销售和管理人才加入公司。同时,公司还注重企业文化建设,倡导创新、协作、务实、高效的企业精神。这种积极向上的企业文化为公司的持续发展提供了强大的精神动力。

以上五个故事虽然是虚构的,但它们基于Beck IPC在电子行业可能的发展路径和策略。实际的发展过程中,Beck IPC可能经历了更多的挑战和机遇,但无论如何,其始终坚持技术创新和市场导向的发展战略,为其在电子行业中的崛起奠定了坚实的基础。

CML Microcircuits公司的发展小趣事

面对未来电子行业的挑战和机遇,CML Microcircuits公司制定了可持续发展的未来规划。公司将继续加大在研发和创新方面的投入,推动技术的不断进步。同时,CML还将关注环保和可持续发展的问题,积极采用环保材料和节能技术,降低生产过程中的能耗和排放。此外,公司还将加强与全球合作伙伴的合作,共同推动电子行业的可持续发展。

这些故事虽然基于虚构,但它们展示了CML Microcircuits公司可能经历的发展路径和关键事件。在实际情况下,公司的发展可能受到多种因素的影响,包括市场环境、技术趋势、竞争态势等。因此,对于CML Microcircuits公司的真实历史和发展情况,还需要进一步了解和分析相关资料。

AKM [Asahi Kasei Microsystems]公司的发展小趣事

随着技术的不断进步,CML Microcircuits公司始终保持对创新的追求。在模拟、数字和混合信号集成电路领域,CML不断推出具有创新性的产品,满足市场的多样化需求。通过与全球顶级客户的紧密合作,CML深入了解市场趋势,并将其转化为具有竞争力的产品。这些努力使CML在行业中逐渐建立了技术创新的引领者地位。

DESCO公司的发展小趣事

为了进一步提升竞争力,DESCO公司进行了多次收购和资源整合。例如,在XX年,公司成功收购了美国一家知名的防静电产品制造商,获得了其先进的生产技术和销售渠道。这次收购使DESCO公司的产品线更加丰富,市场覆盖面更加广泛。此外,公司还加强了与其他企业的战略合作,共同开发新产品、拓展新市场。

问答坊 | AI 解惑

求救:如何将SST 89E564RD (40-c-p1 0438064-AC)变成仿真器

买了块廉价的芯片,想自己做仿真器 里面没有启动程序 想自己DIY一个仿真器 麻烦成功的大虾发一个可以用的    1电路图    2软件    3监控程序 4 其他对SST 89E564RD  用的上 [ 本帖最后由 wanzsxit ...…

查看全部问答>

2009年竞赛学生守则].doc

本帖最后由 paulhyde 于 2014-9-15 08:57 编辑 2009年竞赛学生守则].doc  …

查看全部问答>

再次请教S3C2440+WinCE5.0+4.2BSP下使用4GB的SDHC大容量SD卡驱动问题,大家指点

再次请教S3C2440+WinCE5.0+4.2BSP下使用4GB的SDHC大容量SD卡驱动问题,大家指点!!! 大家好,谢谢大家一直以来这么热心的回复的我帖子,帮助我,谢谢大家,祝大家工作顺利! 我的环境:S3C2440+WinCE5.0+4.2BSP,开发板是广嵌科技的GEC2440。 ...…

查看全部问答>

nrf905通过匹配网络连接50欧姆单端天线问题

现在用nrf905设计开发一个射频智能卡测试平台的无线接口,为增强实验的可靠性,我们在设计了PCB环形差分天线的前提下,通过两个跳线,将芯片的ANT1和ANT2通过匹配网络再连接到SMA天线接口处,以备PCB环形天线不能满足实验要求时,可以经过跳线连接 ...…

查看全部问答>

在eMbedded Visual C++中使用VC++编写的.dll的问题

我最近做个项目,在手机上显示监控图像。在eMbedded Visual C++中使用VC下的Dll出错。 提示如下: error LNK2019: unresolved external symbol __imp__MP4_ClientStopCapture referenced in function \"protected: void __thiscall CKlsDlgDlg::On ...…

查看全部问答>

在ADC下面或附近数模一点共地有什么区别

datasheet上是说应该在下面一点共地,但是如果在附近引出来用0欧电阻接可能产生什么问题,还查到有说,用磁珠相连有选频的好处,这个“选频”怎么讲?是指可以把数字区指定频率的噪声滤掉吗?数字区的噪声频率是不是就是单片机的频率啊?谢谢指教 ...…

查看全部问答>

i2c是什么玩意?

在网上看了好多i2c的资料  但感觉还是云里雾里的  不明白怎么用?求大虾指点!…

查看全部问答>

神器!Launchpad游戏扩展板

这是继MSP430的MP3扩展板(DSP C5000)后的又一个华丽的扩展板。 说说功能吧!扩展板提供一路VGA输出,VGA的DA采用电阻分压的方式,分辨率为400×300,并且支持两个任天堂的游戏手柄, 打游戏嘛!手柄肯定不能少。主芯片是一片Spartan 3的FPGA ...…

查看全部问答>

画PCB用哪个软件好?

求教各位大神,尤其是已经工作的,在公司做项目画PCB一般是用哪个软件呢?…

查看全部问答>

有符号数的整数乘法演算问题。。。

在网上看到了这样一份有符号整数乘法的演算,请问哪位能解释下。。。。 为什么这里的加法与我们的平时的不一样的,应该怎样理解。。。…

查看全部问答>