当前位置: 首页 > wzjs >正文

付费做SPaSS统计分析的网站火狐搜索引擎

付费做SPaSS统计分析的网站,火狐搜索引擎,黄骅港旅游景点大全,推荐家居网站建设freertos 获取频率的接口 在 FreeRTOSConfig.h 文件中声明一个函数作为freertos的接口 /// /// brief 获取 SysTick 的频率 /// /// note arm cortex-m 系列 CPU 有一个 systick ,里面有一个 CTRL 寄存器,其中的 bit2 /// 可以用来控制 systick 的时钟…

freertos 获取频率的接口

FreeRTOSConfig.h 文件中声明一个函数作为freertos的接口

///
/// @brief 获取 SysTick 的频率
///
/// @note arm cortex-m 系列 CPU 有一个 systick ,里面有一个 CTRL 寄存器,其中的 bit2
/// 可以用来控制 systick 的时钟源。
/// 	@li 为 1 时表示使用与 CPU 相同的时钟源,即 systick 的频率会与 CPU 相同。
/// 	@li 为 0 则表示不要求 systick 的频率与 CPU 相同。
///
/// 所以 bit2 可以理解为同步控制位,置 1 后会让 systick 时钟与 CPU 同步。
///
/// @note 是否让 systick 同步到 CPU 频率是 freertos 控制的。详见下面的 SYNC_TO_CPU 宏定义。
///
/// @param sync_to_cpu 是否同步到 CPU
/// 	@note 为 true 表示要获取 SysTick 同步到 CPU 频率时的频率,也即希望获取 CPU 频率。
///
/// 	@note 为 false 表示要获取的是 SysTick 不同步到 CPU 时的频率。例如对于 stm32f103,就是
/// 	获取系统时钟 8 分频后的频率。(系统时钟是 CPU 的时钟源,系统时钟频率等于 CPU 频率)
///
/// @return SysTick 在 sync_to_cpu 指示的模式下的频率。
/// 	@note 如果 sync_to_cpu 为 true ,返回 CPU 频率。
/// 	@note 如果 sync_to_cpu 为 false,返回与 CPU 频率不同的那个频率。
///
uint32_t freertos_get_systic_clock_freq(uint8_t sync_to_cpu);

在使用 STM32CubeF4 的 HAL 库时,实现为下面这样

uint32_t freertos_get_systic_clock_freq(uint8_t sync_to_cpu)
{uint32_t freq = HAL_RCC_GetHCLKFreq();if (!sync_to_cpu){// 这里不能检查 SysTick->CTRL 的 bit2 来决定返回 HCLK 的频率还是返回 HCLK / 8,// 因为 freertos 调用本函数的时候还没设置 SysTick->CTRL 的 bit2, 调用完后会// 设置 SysTick->CTRL 的 bit2.freq /= 8;}return freq;
}

通过 cubemx 可以知道 stm32f407zet6 的 systick 是从 HCLK 来的
在这里插入图片描述

和其他型号一样,前面的预分频可以选择 1 或 8
在这里插入图片描述
所以在实现 freertos_get_systic_clock_freq 函数时使用 HAL_RCC_GetHCLKFreq 函数来获取 HCLK 频率。

接着在 FreeRTOSConfig.h 中添加如下宏定义

/* 是否让 systick 的频率同步到 CPU 频率。 */
#define SYNC_TO_CPU 1#if SYNC_TO_CPU#define configCPU_CLOCK_HZ freertos_get_systic_clock_freq(1)
#else#define configSYSTICK_CLOCK_HZ freertos_get_systic_clock_freq(0)
#endif

想让 systick 频率与 CPU 相同,就定义 SYNC_TO_CPU 为 1, 否则定义为 0.

HAL 库配置晶振频率

如果使用 HSE 作为时钟源,需要配置晶振频率,否则 freertos_get_systic_clock_freq 函数无法给 freertos 正确的 systick 频率,进而导致延时不准确。

HAL 库中有如下内容

/*** @brief Adjust the value of External High Speed oscillator (HSE) used in your application.*        This value is used by the RCC HAL module to compute the system frequency*        (when HSE is used as system clock source, directly or through the PLL).*/
#if !defined(HSE_VALUE)#define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */
#endif                          /* HSE_VALUE */

声明如下的接口函数

///
/// @brief 让 HAL 库获取 HSE 的晶振频率的接口函数。
///
/// @return 晶振频率。单位:Hz.
///
uint32_t stm32_hal_get_hse_crystal_oscillator_frequency();

然后将宏定义修改为如下

/*** @brief Adjust the value of External High Speed oscillator (HSE) used in your application.*        This value is used by the RCC HAL module to compute the system frequency*        (when HSE is used as system clock source, directly or through the PLL).*/
#if !defined(HSE_VALUE)#define HSE_VALUE stm32_hal_get_hse_crystal_oscillator_frequency() /*!< Value of the External oscillator in Hz */
#endif                                                                 /* HSE_VALUE */

然后在应用项目中实现该函数

#include <cstdint>extern "C"
{uint32_t stm32_hal_get_hse_crystal_oscillator_frequency(){return static_cast<uint32_t>(8e6);}
}

我这么做是因为我 HAL 库是预编译使用的,应用项目是另一个项目,通过 cmake 导入 HAL 库。如果你像传统的开发者那样使用 keil 并把所有库都放置在项目中,不做拆分和预编译,你可以直接修改宏定义为字面量,没必要定义为一个函数。

http://www.dtcms.com/wzjs/361917.html

相关文章:

  • 银行门户网站建设方案搜狗搜索引擎推广
  • 中国做外贸网站网页优化怎么做
  • 这个百度的网站怎么做的网络推广招聘
  • 江汉区建设局官方网站北京seo服务商
  • 网站设计工作室如何免费找精准客户
  • 谷歌生成在线网站地图如何制作小程序
  • 德阳市网站建设5118站长工具箱
  • 怎么做卡商网站搜索引擎营销推广方案
  • 找人做网站 优帮云下载班级优化大师
  • 对电子商务网站与建设的心得网站建设技术外包
  • 在哪个网站上做实验仪器比较好什么是搜索推广
  • 网站备案核验点 上海百度一下网页版
  • 网站开发常遇到的问题有哪些小红书推广引流软件
  • 镇江网站建设哪家好下载百度免费版
  • 做电话销售需要的网站高端网站设计公司
  • 上海电子商务网站建设学做电商需要多少钱
  • 网站开发职责与要求滨州网站建设
  • 中国最大免费h5游戏源码网站曹操seo博客
  • 嘉兴市做外贸网站的如何做网站建设
  • 遵义网站建设有限公司怎么打开网站
  • 网站推广服务怎么做长沙seo网站优化公司
  • 网站建设教程17广州网络营销推广
  • 建设视频网站多少钱淘宝关键词排名优化技巧
  • 自己做键盘的网站站长之家查询网站
  • 盐城网站建设多少钱朝阳网络推广
  • 宿迁做网站需要多少钱百度外推排名
  • 网站做百度推广厦门seo代理商
  • 自己的网站中商城怎么做网页加速器
  • 环县网站怎么做北京seo排名方法
  • 西安政府网站建设公司营销型网站建设总结