STM32单片机示例:64位全局时间戳发生器

这篇具有很好参考价值的文章主要介绍了STM32单片机示例:64位全局时间戳发生器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目的

STM32H743 / H750 系列的芯片有一个64位的全局时间戳发生器( Global timestamp generator ),这篇文章将对它的使用做个记录。

基础说明

全局时间戳发生器相关的内容可以参考官方参考手册:
STM32单片机示例:64位全局时间戳发生器,RTOS与单片机相关,单片机,STM32,时间戳,定时器,嵌入式

TGS时钟来源与APB总线时钟,这就是TGS计数器时钟了,并且用于TGS计数时没法对其进行分频操作。我们使用TGS时通常只要开启和停止计数器、清除和读取计数值几个操作,直接使用寄存器操作即可。

测试代码

int main(void)
{
	HAL_Init();
	MPU_Config();
	SystemClock_Config();
	MX_GPIO_Init();

    // 全局时间戳发生器相关寄存器
    #define TSG_CNTCR *(volatile unsigned int *)0x5C005000  // 计数器控制寄存器
    #define TSG_CNTCVL *(volatile unsigned int *)0x5C005008 // 当前计数器计数值低字寄存器
    #define TSG_CNTCVU *(volatile unsigned int *)0x5C00500C // 当前计数器计数值高字寄存器

    // 初始化并启动全局时间戳发生器
    TSG_CNTCR = 0x00000000; // 停止计数器
    TSG_CNTCVL = 0;         // 清空计数器计数值低字
    TSG_CNTCVU = 0;         // 清空计数器计数值高字
    TSG_CNTCR = 0x00000001; // 启动计数器

    uint64_t pred = 0;
    while (1)
    {
        uint64_t d; // 用于保存当前时间
        uint32_t du = TSG_CNTCVU; // 读取计数器高字
        uint32_t dl = TSG_CNTCVL; // 读取计数器低字

        if (du == TSG_CNTCVU) // 和前次读取TSG_CNTCVU时, TSG_CNTCVL并未发生溢出
        {
            d = ((uint64_t)du << 32) + dl;
        }
        else // 和前次读取TSG_CNTCVU时, TSG_CNTCVL发生溢出
        {
            d = ((uint64_t)TSG_CNTCVU << 32) + TSG_CNTCVL;
        }

        // TSG是接在APB总线上的,目前设置下APB总线速度是240MHz
        // 因此每计数240000为1ms,下面代码下IO口每1ms变化一次
        if ((d - pred) > 240000)
        {
            pred = d;                              // 保存当前时间
            HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_4); // 翻转IO口
        }
    }
}

上面代码的功能是启动全局时间戳发生器,然后根据时间每1ms翻转PA4的输出电平,使用示波器或者逻辑分析仪抓取可以看到测试结果。

总结

TSG没法对时钟源进行分频设置,也不是所有系列单片机都有该功能的,很多时候并没有定时器来的好用。并且这里并没有测试开启ST-Link调试时该功能是否会有冲突。

示例链接

仓库地址: https://github.com/NaisuXu/STM32_MCU_Examples

本示例为仓库中 Global_Timestamp_Generator_H750文章来源地址https://www.toymoban.com/news/detail-685419.html

到了这里,关于STM32单片机示例:64位全局时间戳发生器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机课程设计波形发生器

    怎么说呢,前面半个月被这个单片机课程设计搞得焦头烂额的,再加上运气属实有点“好”,就脾气有点“暴躁”,好的,也就骂了半天的脏话。有一说一,没有素质确实舒服。 好了,事情目前是过去了,那就好好回顾一下遇到的问题,以及找到了怎样的解决方案,和最后仍

    2024年02月09日
    浏览(48)
  • 32单片机RTC时间接续,掉电时间保存

    前提:首先要实现RTC掉电之后时间还能继续走,RTC电池是必要的 说明:设备第一次启动需要初始化配置RTC,但当二次启动再重新配置RTC会导致RTC计数器置零,所以传统的程序流程是不行的,我们需要知道设备是第一次启动还是二次启动,来判断是否需要重新初始化配置RTC。另

    2024年01月17日
    浏览(45)
  • GD32单片机和STM32单片机的对比分析

    GD32单片机和STM32单片机都是基于Arm Cortex-M3/M4内核的32位通用微控制器,广泛应用于各种嵌入式系统和物联网领域。两者之间有很多相似之处,但也有一些不同之处,本文将从以下几个方面对比分析两者的特点、优势和开发成本。 GD32单片机采用的是二代的M3/M4内核,而STM32单片

    2024年02月16日
    浏览(56)
  • 单片机实验——简易波形发生器设计

    波形发生器广泛地应用于电子和通信等领域,是应用最广泛的电子仪器之一,本设计用51单片机以及DAC0832实现基本波形的输出,参考电路如下: 可以产生方波、三角波、正弦波、锯齿波等波形,用仿真的示波器查看。 用4个按键分别控制输出相应波形。 利用C51设计程序完成以

    2024年02月12日
    浏览(47)
  • STM32单片机(一)STM32简介

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月10日
    浏览(57)
  • 51单片机入门教程(4)——波形发生器

    目录 1、总述 2、系统硬件设计  3、系统软件设计思路  3、测试与分析 (1)Proteus仿真测试 (2)直流稳压电源测试 (3)实物测试 该篇为51单片机入门教程的实战篇 ,本篇介绍了以51单片机和DAC0832数模转换芯片为核心的波形发生器,并对DAC0832和UA741的结构和工作原理以及电

    2024年02月08日
    浏览(46)
  • STM32单片机(二)STM32环境搭建

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月10日
    浏览(59)
  • STM32单片机开发-01 STM32介绍

    通过野火开发板学习单片机 从内核上分有Cortex-M0、M3、M4 和M7 F1 代表了基础型,基于Cortex-M3 内核,主频为72MHZ F4 代表了高性能,基于Cortex-M4 内核,主频180M。 数据手册:用于芯片选型和设计原理图 参考手册:用于编程时查阅 Icode总线 – 该总线讲M3内核的指令总线与闪存指令

    2024年01月21日
    浏览(56)
  • 基于51单片机的DAC0832波形发生器

    输出1HZ正弦波、三角波、方波、锯齿波 使用LCD1602显示 DAC0832的D0~D7数据输入口,IOUT1、IOUT2互补输出口,RFB反馈端口、 VREF基准电压值(一般是5V)。用定时器控制段码表输出速度来控制波形的频率。 (定时数值)*10^(-6)*256=波形频率。 ( 1 )锯齿波的实现原理:   锯齿波的实现

    2024年02月06日
    浏览(86)
  • 【单片机】STM32单片机的各个定时器的定时中断程序,标准库,STM32F103

    高级定时器和普通定时器的区别(https://zhuanlan.zhihu.com/p/557896041): TIM1是高级定时器,使用的时钟总线是RCC_APB2Periph_TIM1,和普通定时器不一样。 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用

    2024年02月07日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包