完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
二、系统滴答定时器SYStiCK 学习了cm3系统的系统滴答定时器,开始学习STM32时,看到系统滴答定时器,就跑到STM32的数据手册上狂找,结果,毛也没找到,最后才发现,原来这个SYSTICK是M3内核的,ARM公司就带过来的,提供的一个作为操作系统的时间基准,也就是说M3有,M4也有.... 这是复制了CM3的权威指南里面的一个队SYSTICK的介绍“ SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律 ” SYSTICK包含了4个寄存器, 1、SysTick控制及状态寄存器(地址:0xE000_E010) 2、SysTick重装载数值寄存器(地址:0xE000_E014) 3、SysTick当前数值寄存器(地址:0xE000_E018) 4、SysTick校准数值寄存器(地址:0xE000_E01C) 也即是说,我们只要操作这四个寄存器,即可控制SYSTICK,在不使用系统的时候,用SYSTICK作精确延时最为合适 在这里我们只使用前三个寄存器, 首先需要配置的自然就是时钟源,SYSTICK的时钟源可以来自HCLK,或则是HCLK/8 接着是设置从装载的值到ysTick重装载数值寄存器,这里系统会自动的把重装载中的值放到当前数值寄存器中 第三步便是启动定时器倒数了,启动定时器倒数之后,SysTick当前数值寄存器中的数便会随着脉冲开始一个一个的减少 最后就是等待并且判断倒数为0,此时,状态寄存器中的COUNTFLAG位就会置位 具体编程 SysTick->CTRL&=0XFFFFFFFB; //SysTick选择外部时钟8分频 SysTick->LOAD=(u32)x; //重载时间值 SysTick->VAL=0x00; //清空计数器 SysTick->CTRL=0X01; //启动倒数计数器 while(!(temp&(1<<16))); //等待计数完毕 { temp=SysTick->CTRL; } SysTick->CTRL=0X00; //关闭计数器 在STM32 的新版库中,是没有库函数写SYSTICK的,这也说明了意法半导体公司在提示大家的一点 慎用systick,因为这是系统滴答定时器,是专门给系统使用的 |
|
相关推荐
1 个讨论
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
2255 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2071 浏览 3 评论
4687 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2215 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2757 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 07:05 , Processed in 0.404779 second(s), Total 36, Slave 29 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号