[STM32F1]STM32F103滴答定时器定时不准?)

2023-11-15

STM32F103滴答定时器定时不准?
      前几天调了1块F103ZET6的开发板,用了个系统定时器,感觉不准,最终找到原因是因为选错了时钟源。
今天来分享一下也算是给大家以后出现问题做个参考吧。
    说到时钟源,得说到STM32系统时钟的初始化。
   

     前面就不说了,直接从复位中断说起。 复位所有的中断之后,导入Main函数
然后,进入SystemInit函数,进行时钟配置。在SystemInit函数中有一个  SetSysClock()函数

配置系统时钟为72M,这是在外部晶振为8M的情况下。
配置完系统时钟之后,然后运行Main函数,这就是STM32程序的启动过程。

系统定时器是是Core_cm3和Core_cm4内核均存在的定时器
F103c8t6,共有7个定时器,一个高级定时器TIM1,3个通用定时器TIm2、TIM3和TIM4、1个系统定

时器和2个看门狗定时器(独立的和窗口型)。
系统定时器(滴答定时器)是一个24位自减型计数器,也就是说他的最大计数次数为
111111111111111111111111,换算成十六进制为0XFFFFFF,十进制为16777215。
系统定时器的时钟来源可以通过 SysTick_CLKSourceConfig()来选择。

如果选择 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK)则为0,选择内部时钟72M。

若选择SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8),则系统时钟72M的8分频,

网上很多说把SysTick_CLKSource_HCLK_Div8叫做外部分始时钟,不知道是啥原因?

系统定时器时钟频率为9M
1 = 外部时钟源(STCLK) (AHB总线时钟的1/8(HCLK/8)
0 = 内核时钟(FCLK) (AHB总线时钟的频率(HCLK))

也就是这里我用错了时钟源导致系统定时器不准!!

这是原因1,还有一个原因在下面解释。
要是用滴答定时器中断,要配置滴答定时器的中断优先级,否则为默认的最低优先级。
滴答定时器发生中断后,不需要人为去清除中断标志位和重新加载预装值,系统会自动清除和装载,比较简单


 

滴答定时器配置



我们采用系统时钟的八分频,也就是系统时钟为9M,每秒钟计数为9M
设置计数值为9M,也就是说1秒钟进一次系统定时器中断函数,用变量i自加来表示。

但是这样的配置我们发现i的自加并没有按照1s加一次的理论进行,而且加的很快。
但后来把计数值放在系统分频的前面,也就是如下图所示,计数正常。


这个原因没找到,但是结果正确,哪位大佬帮忙解释一下,代码已上传。

还有个提示,就是用了滴答定时器做定时器中断之后,就不要再用于延时函数了
否则就冲突程序跑飞了,比如这样

还需要知道一点的是:

时钟配置为72MHz,第一行代码已经选择为滴答定时器系统时钟的8分频,也就是滴答定时器时钟为9MHz,

下面的“fac_us”需要得到的是时钟周期,即1us(1个fac_us)需要9个时钟周期,1个fac_ms需要9000个时钟周期。

以上就是对系统定时器计数不准的解释。
---------------------
作者:woai32lala
链接:https://bbs.21ic.com/icview-3252426-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[STM32F1]STM32F103滴答定时器定时不准?) 的相关文章

  • DSP 库 - RFFT - 奇怪的结果

    最近我一直在尝试在我的STM32F4 Discovery评估板上进行FFT计算 然后将其发送到PC 我已经调查了我的问题 我认为我对制造商提供的 FFT 函数做错了 我正在使用 CMSIS DSP 库 现在我一直在用代码生成样本 如果工作正
  • ARM Cortex A8 PMNC 读取在启用后也给出 0.. 有什么想法/建议吗?

    MODULE LICENSE GPL MODULE DESCRIPTION user mode access to performance registers int init arm init void unsigned int valu
  • C 嵌入式应用程序中 time() 函数的问题

    我在用time 在 ARM 微控制器上 处理器一到达此函数就会重新启动 奇怪的是 当我处于调试模式时 代码运行得很好 但一旦我想将其应用到独立模式 我就会遇到重置 我是否忽略了什么 这个功能有替代品吗 代码部分是这样的 include
  • Linux malloc() 在 ARM 和 x86 上的行为是否不同?

    这个网站上有很多关于内存分配的问题 但是我 找不到专门解决我的问题的人 这 问题 https stackoverflow com questions 19148296 linux memory overcommit details似乎最接近
  • 可以使用Visual Studio 2012构建ARM桌面程序吗?

    我正在使用 Visual Studio 2012 beta 我的桌面 win32 程序在 ARM 架构中编译得很好 升级到 Visual Studio 2012 RC 后 编译器无法工作并出现以下错误 不支持为 ARM 平台编译桌面应用程序
  • 使用 Android NDK 使用 -fsigned-char 进行构建安全吗?

    为了与其他平台保持一致 我需要使用signed char在我正在处理的一些本机代码中 但默认情况下在Android NDK上char类型是unsigned 我尝试明确使用signed char类型 但它生成太多警告differ in sig
  • 是否可以将 SpaCy 安装到 Raspberry Pi 4 Raspbian Buster

    我一整天都在安装 SpaCy sudo pip install U spacy Looking in indexes https pypi org simple https www piwheels org simple Collectin
  • 基于 Windows 8 ARM 的平板电脑上的 VB6

    随着 Windows 8 将支持 VB6 我的问题是 Microsoft 是否在任何地方表示 是或否 VB6 应用程序将在基于 ARM 的平板电脑上运行 如果没有 是否有任何 ARM 模拟器 以便我们可以在 Windows 8 ARM 平板
  • 使用 NEON 优化 Cortex-A8 颜色转换

    我目前正在执行颜色转换例程 以便从 YUY2 转换为 NV12 我有一个相当快的函数 但没有我预期的那么快 主要是由于缓存未命中 void convert hd uint8 t orig uint8 t result uint32 t wi
  • 了解 U-Boot 内存占用

    我不明白加载 U Boot 时 RAM 中发生了什么 我正在开发 Xilinx Zynq ZC702 评估套件 并尝试使用 U Boot 在其上加载 Linux 内核 于是我使用Xilinx工具Vivado和SDK生成了一个BOOT bin
  • saber sd 如何在没有 SPL 的情况下直接从 uboot 启动

    sabre sd 基于 imx 6 最大内部 RAM 约为 150Kb 然而 uboot 足够大 可以容纳在这个空间中 在这个场景中事情是如何进行的 https community freescale com docs DOC 95015
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • 架构armv7的重复符号

    尝试在我现有的应用程序中使用 Layar SDK 时出现以下错误 我该如何解决这个问题 Ld Users pnawale Library Developer Xcode DerivedData hub afxxzaqisdfliwbzxbi
  • 如何在WinMobile6上启用ARMv6非对齐访问?

    ARMv6 引入了一个很棒的功能 未对齐的内存访问 这使得代码中的某些事情变得更加简单和更快 但微软只在winCE6中提供了API 现在大多数 PDA 都基于 WinMobile6 基于 CE 5 x 默认情况下禁用未对齐访问 我尝试在 C
  • 可以对 Xcode 中的 Arm 架构设置进行一些澄清

    据我了解 iPhone 5将采用新的架构 armv7s 我的项目具有有效的架构armv7 并且有Build Active Architecture Only set to true 由于现在商店中的每个应用程序都是为armv6 and or
  • A64 Neon SIMD - 256 位比较

    我想将两个小端 256 位值与 A64 Neon 指令 asm 进行有效比较 平等 为了平等 我已经有了解决方案 bool eq256 const UInt256 lhs const UInt256 rhs bool result 首先 将
  • 将 C 函数与 ARM 汇编结合使用

    我见过人们在代码中使用 C 库中的 printf 的示例 如下所示 data balign 4 hello asciz Hello n text global main func main main ldr r0 hello msg bl
  • 了解带有 pc 偏移的 Cortex-M 组件 LDR

    我正在查看这段 C 代码的反汇编代码 define GPIO PORTF DATA R volatile unsigned long 0x400253FC int main void Initialization code while 1
  • 支持 ARM 上的 Windows 10 桌面应用程序 - MFC 和 COM 以及 OPOS 可以工作吗?

    我试图了解将在 x86 Windows 10 上运行的 C MFC 应用程序移植到具有 Qualcomm Snapdragon 处理器的 ARM Windows 10 设备的障碍 32位应用程序具有以下特点 MFC 与 C 用于用户界面 C
  • 读取STM32 MCU SPI数据寄存器的值

    有很多类似的问题 但似乎没有一个问题完全相同 我正在将 STML4 MCU 连接到 6 轴传感器 LSM6DS3 我已经成功地在 I2C 中实现了所有内容 但想要 SPI 的额外速度 和 DMA 如果我能让这些第一步工作起来的话 因此 第一

随机推荐

  • 【精读系列】GloVe: Global Vectors for Word Representation

    本论文介绍了一种基于计数统计的词向量学习方法 GloVe 作者实验说明效果优于 Word2Vec 模型 阅读完成时间 20221109 一些预备知识或者是常用知识 GloVe 模型属于 count based method 所谓 count
  • Flink CDC(2.0) 如何加速海量数据的实时集成?

    原文 Flink CDC 如何加速海量数据的实时集成 知乎 导读 Flink CDC如何解决海量数据集成的痛点 如何加速海量数据处理 Flink CDC社区如何运营 如何参与社区贡献 今天的介绍会围绕下面四点展开 Flink CDC 技术
  • 自媒体怎么做?综合类自媒体账号怎么做好

    原创 自媒体运营中比较大众化的就是综合类 比如趣头条 搜狐号等 可以发文字内容 可以发图文内容也可以发视频 可以说是多样化的 对于创作者来说 这样的平台更加方便 但是运营其实更加难 如果只是单一类的 掌握一种运营方法还比较容易 但是这种多样
  • FATFS实现数据追加功能(原文不覆盖)

    在对FATFS的应用中我们经常需要把采集的数据存入的文件中 用作保存 也许我们的系统是一个长期的运行过程 但是我们的数据可能不是持续采集的 所以我们这样写代码 注册一个工作区域 f mount 0 fs 打开创建一个新文件 res f op
  • Chrome开启自带多线程下载

    在地址栏输入 chrome flags 然后在搜索框中输入 Parallel downloading 选择enabled 重启Chrome
  • hadoop学习笔记之分布式计算框架

    分布式计算框架 移动计算而不是移动数据 移动计算就是把你写好的计算 程序拷贝到不同的计算节点上运行 MapReduce适合做离线计算 Storm适合做流失计算 Spark适合做内存计算框架 从HDFS上存储的数据作为我们MapReduce的
  • 前端如何高效的与后端协作开发

    前端如何高效的与后端协作开发 1 前后端分离 前端与后端的分离 能使前端的开发脱离后端的开发模式 拥有更大的自由度 以此便可做前端工程化 组件化 单页面应用等 可以参考 前后端分离 web与static服务器分离 2 尽量避免后端模板渲染
  • 点云数据生成鸟瞰图笔记

    参考博客 处理点云数据 一 点云与生成鸟瞰图 灰信网 软件开发博客聚合 点云数据 点云数据一般表示为N行 至少三列的numpy数组 每行对应一个单独的点 所以使用至少3个值的空间位置点 X Y Z 来表示 如果点云数据来自于激光雷达传感器
  • jQuery dataTables 的使用

    jQuery 的插件 dataTables 是一个优秀的表格插件 提供了针对表格的排序 浏览器分页 服务器分页 筛选 格式化等功能 dataTables 的网站上也提供了大量的演示和详细的文档进行说明 为了方便学习使用 这里一步一步进行说明
  • 跨域和处理跨域

    一 跨域的概念 在讨论跨域之前 我们先来说一下什么是 同源策略 看下面这个URL地址 该URL由 协议 IP 端口等部分组成 如果他的协议 IP和端口3者都一样我们就可以称之为是同源 有一个不一样就不是同源 即 跨域 也就是跨域访问 默认这
  • SX126x-数字接口SPI和控制功能

    目录 1 前言 2 Reset 3 SPI接口 3 1 属性要求 3 2 时序参数要求 1 离开Sleep模式时的时序 4 BUSY引脚 4 1 Tsw 4 2 TswMode 5 DIO 5 1 DIO1 5 2 DIO2 5 3 DIO
  • 某校2016专硕编程题-矩阵排序

    问题 编写一个函数 功能是对矩阵进行处理 对于一个m n行的矩阵 执行函数后使其每行元素的大小按照升序排列 分析 每行元素排列就是将数组的每一行执行一次排序算法 Java实现 对矩阵的单行进行排序 随便选一种排序算法即可 选择排序 publ
  • Java中的constant是什么_如何在Java中定义常量(Constant)

    Method One interface ConstantInterface String SUNDAY SUNDAY String MONDAY MONDAY String TUESDAY TUESDAY String WEDNESDAY
  • springcloud+vue+nginx+linux项目部署

    一 项目打包 右边栏Maven Projects gt package 进行项目打包 可以把闪电标志点掉 这样会过滤掉test项 二 将jar包上传到服务端 并运行jar包 nohup java jar XXXX jar gt XXXX t
  • 全国职业技能大赛云计算--高职组赛题卷②(私有云)

    全国职业技能大赛云计算 高职组赛题卷 私有云 第一场次题目 OpenStack平台部署与运维 任务1 基础运维任务 5分 任务2 OpenStack搭建任务 15分 任务3 OpenStack云平台运维 15分 任务4 OpenStack云
  • 华为OD机试 Python 最长公共后缀

    描述 你有一堆字符串 你的任务是找出这堆字符串共同拥有的那段尾字符 如果没有共同的尾 就回答 Zero 具体规定 字符串的数量至少为2 最多为1000 每个字符串的字符都是ASCII码里的 所以范围是 1 126 示范 比如 给你 abc
  • BF,KMP,BM三种字符串匹配算法性能比较

    三种最基本的字符串匹配算法是BF KMP以及BM BF算法是最简单直接的匹配算法 就是逐个比较 一旦匹配不上 就往后移动一位 继续比较 所以比较次数很都 关于KMP和BM的详细介绍可以参考下面的两个link 是讲得比较好的 KMP http
  • Xilinx原语使用方法

    以下链接为百度文库链接 没事的时候可以点击看看 学习学习 xilinx原语的使用方法 Xilinx原语的使用方法2
  • 面试官:你来设计一下抖音直播功能测试用例吧!

    实战案例 Q 微博发动态 设计一下测试点 虽说是发动态 但是测试时不能只是关注发动态这一操作的功能 发完动态之后 我们要确保动态要对外可见 对关注的人可见 单单测试发动态这个操作 实际上意义是不大的 毕竟只测发动态 不能实现测试闭环 所以测
  • [STM32F1]STM32F103滴答定时器定时不准?)

    STM32F103滴答定时器定时不准 前几天调了1块F103ZET6的开发板 用了个系统定时器 感觉不准 最终找到原因是因为选错了时钟源 今天来分享一下也算是给大家以后出现问题做个参考吧 说到时钟源 得说到STM32系统时钟的初始化 前面就