火龙果MM32F3273G8P开发板MindSDK开发教程4 - 滴嗒定时器Systick的配置

news/2024/12/2 16:51:28/

火龙果MM32F3273G8P开发板MindSDK开发教程4 - 滴嗒定时器Systick的配置

1、Systick寄存器

Systick是ARM内核的一个外设,所以在不同芯片的代码上移植比较方便,他总共有4个寄存器,
从Systick定义中可以看到:

typedef struct
{__IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */__IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */__IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */__IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */
} SysTick_Type;

2、轮询方式延时

一般,systick ms级别的延时,采用中断方式,load值为sysclk/1000,这样每ms产生中断,可以用来ms级别的延时,或者为freeRtos提供节拍。
同样,采用轮询方式延时,也可以实现ms级的延时,并且可以实现us级的延时。
systick的时钟源分两种,ctrl寄存器第二位为0时采用sysclk/8的时钟频率,第二位为1时采用系统时钟。
轮询方式延时采用sysclk/8分频方式,而中断方式直接采用系统时钟。
假如系统时钟为120M,8分频后为15M,即1/15000000计一次数,1us需要15次。所以代码中倍频因子为了代码的可移植性,使其count_1us = sysclk/8000000 = 15。
相关代码:

volatile static float count_1us = 0;
volatile static float count_1ms = 0;/***  初始化滴答定时器函数*  轮询方式延时
*/void BOARD_Systick_Init()
{// Systick CTRL 寄存器 第二位为0时,Systick时钟==Sysclk/8 ,// 第二位为1时,Systick = SysclkSysTick->CTRL &= ~(1<<2);// 将systick使用内核时钟,根据时钟树,即120/8=15M;count_1us = (float)(CLOCK_GetBootHSEValue()/8000000);count_1ms = (float)1000*count_1us;
}void BOARD_Delay1Us(uint32_t count)
{uint32_t ctl;/* reload the count value */SysTick->LOAD = (uint32_t)(count * count_1us);/* clear the current count value */SysTick->VAL = 0x0000U;/* enable the systick timer */SysTick->CTRL = SysTick_CTRL_ENABLE_Msk;/* wait for the COUNTFLAG flag set */do{ctl = SysTick->CTRL;}while((ctl&SysTick_CTRL_ENABLE_Msk)&&!(ctl & SysTick_CTRL_COUNTFLAG_Msk));/* disable the systick timer */SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;/* clear the current count value */SysTick->VAL = 0x0000U;}void BOARD_Delay1Ms(uint32_t count)
{uint32_t ctl;/* reload the count value */SysTick->LOAD = (uint32_t)(count * count_1ms);/* clear the current count value */SysTick->VAL = 0x0000U;/* enable the systick timer */SysTick->CTRL = SysTick_CTRL_ENABLE_Msk;/* wait for the COUNTFLAG flag set */do{ctl = SysTick->CTRL;}while((ctl&SysTick_CTRL_ENABLE_Msk)&&!(ctl & SysTick_CTRL_COUNTFLAG_Msk));/* disable the systick timer */SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;/* clear the current count value */SysTick->VAL = 0x0000U;
}

3、实验现象

BOARD_Delay1Ms(1000)
BOARD_Delay1Us(1000)
产生的对应波形为
在这里插入图片描述

在这里插入图片描述

4、代码

https://gitee.com/xiaoguo-tec_0/mm32-f3273.git


http://www.ppmy.cn/news/281821.html

相关文章

导航地图之关于我们

关于我们 "北斗导航极速版"是我们研发的导航系统平台&#xff0c;目前适用IOS系统和Android 系统&#xff0c;北斗导航地图极速版&#xff0c;为您保驾护航&#xff0c;中国专业的北斗导航地图&#xff0c;专注地图搜索&#xff0c;导航&#xff0c;位置服务&#x…

什么是导航守卫

vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中&#xff1a;全局的, 单个路由独享的, 或者组件级的。 记住参数或查询的改变并不会触发进入/离开的导航守卫。你可以通过观察 $route 对象来应对这些变化&#xff0c;或使用 b…

导航寻路系统

1、导航寻路系统 Unity中的导航寻路系统是能够让我们在游戏世界当中&#xff0c;让角色能够从一个起点准确的到达另一个终点&#xff0c;并且能够自动避开两个点之间的障碍物选择最近最合理的路径进行前往&#xff0c;Unity中的导航寻路系统的本质&#xff0c;就是在A星寻路算法…

基于Android的旅游导航系统

我们所研发的基于android的旅游导航系统,可以方便用户在旅游景点&#xff0c;随时查看景点的介绍&#xff0c;相关视频介绍&#xff0c;图片浏览&#xff0c;和歌曲欣赏。本项目旨在给用户提供一个&#xff0c;友好&#xff0c;方便的旅游导航系统&#xff0c;提供给旅游自助查…

Android——集地图、定位、导航于一体

集地图、定位、导航于一体 效果视频电子地图地图修改定位图标 定位导航 尾言 效果视频 电子地图 地图 电子地图 修改定位图标 MyLocationConfiguration.LocationMode mCurrentMode MyLocationConfiguration.LocationMode.NORMAL;BitmapDescriptor mCurrentMarker BitmapD…

狱搜导航-个性化导航自定义导航网站,搜索导航,简洁清晰大气,支持各种自定义

个性化自定义的导航网站 个性化自定义的导航网站 个性化自定义的导航网站 直接进入主题把&#xff0c;是不是你喜欢的样子&#xff0c;一看便知&#xff0c;我说再多也没有用&#xff01;&#xff01; |A网导航 网址&#xff1a;anets.cn anets.top 功能 动态壁纸&#xf…

GPS卫星导航、

GPS卫星导航系统简介 全球定位系统(GPS)是本世纪70年代由美国陆海空三军联合研制的新一代空间卫星导航定位系统。其主要目的是为陆、海、空三大领域提供实时、全天候和全球性的导航服务&#xff0c;并用于情报收集、核爆监测和应急通讯等一些军事目的&#xff0c;是美国独霸全…

各类的导航

鼠标悬浮时高度发生改变 * {margin: 0;padding: 0;}ul {width: 800px;height: 50px;border-bottom: 1px solid #000;margin: 50px auto;}li {margin-top: 5px;list-style: none;float: left;border: solid #444;border-width: 1px 1px 0;margin-right: 11px;}a {display: block…