热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

iardebug模式寄存器的值不变化_【话说定时器系列】之五:与影子寄存器预装功能有关的几个案例分享...

STM32定时器是STMCU内部最基础且常用的外设,实际应用尤为普遍。去年,电堂推出了《STM32TIMER基础及常规应用介绍》,为大家梳

STM32定时器是 ST MCU 内部最基础且常用的外设,实际应用尤为普遍。去年,电堂推出了《STM32 TIMER基础及常规应用介绍》,为大家梳理了 STM32 TIMER 的庞大内容,涵盖 TIMER 的基本应用原理、常规应用等。现在将课程内容整理为文章,针对STM32定时器有基本了解的用户,分享具体的应用实现环节及常见问题解决。

本文重点分享与影子寄存器预装功能有关的几个案例。

STM32定时器中有四个带影子特性的寄存器组【影子+预装】:

- TIMx_PSC 分频寄存器

- TIMx_ARR 自动重装载寄存器

- TIMx_CCR 捕捉比较寄存器

-TIMx_RCR 重复计数寄存器

其中ARR、CCR寄存器带预装载使能控制位,PSC、RCR无预装使能控制位,所以对于PSC/RCR实际寄存器的数据更新只能通过更新事件实现从预装寄存器数据到影子寄存器的拷贝更新。

对于ARR/CCR寄存器,当关闭它们的预装载使能位时,用户修改预装寄存器的数据后会立即被拷贝进影子寄存器【实际寄存器】,否则,修改过的预装寄存器的数据只能等到下次更新事件 来完成从预装寄存器数据到影子寄存器的拷贝更新。

这里分享三个跟影子寄存器的预装特性有关的案例,以加深大家的理解。

【案例一】

异常情形:某客户使用到 STM32芯片TIMER1和TIM2,其中使用TIM1做PWM波形输出。使用PWM模式1,向上计数模式,每次在定时器上溢中断里调节CCR寄存器的值,改变波形占空比。

但他发现,当打开定时器2并使能定时器2的中断时会导致TIM1的PWM输出异常的现象。有一定几率出现尖窄脉冲现象。在正常占空比之后出现一个极短的小脉冲。测试中,CCR的比较值读出正常。关闭定时器2则输出正常,未捕捉到小尖脉冲。

【下面的第一个波形是初始波形;第二个波形是修改后的输出波形;第三个波形是计数器计数变化示意图】

a5674ab7092120f939904ccd0ea9eacb.png

先大致分析一下条件及现象:

1、经了解,他关闭了CCR寄存器的预装功能,即修改CCR的数据会立即拷贝到实际影子寄存器而发挥作用;

2、他采用PWM1模式的特性,向上计数,输出极性高有效。这个条件下,当CCR的值比计数器值大时,输出高电平;当CCR的小于或等于计数器的值时,输出低电平。

3、它在更新中断里随机动态修改CCR的值,如果没有其它中断存在。发生TIM1溢出中断时,立即响应并修改CCR的值,由于CCR的预装载功能关闭,所以修改立即生效。下一个周期的波形按新的参数运行。

4、如果有其它中断的存在,且TIM1的溢出更新中断不具备抢占能力,具体到这里,如果TIM1溢出时,TIM2中断正在使用CPU处理事情。那么TIM1中断请求就只能等待TIM2中断事务处理完毕后才有机会修改新的CCR值。但这个等待过程中,TIM1的运行及PWM输出并不会停止,依然按照原来的参数在运行。如果新调整的CCR值比之前的CCR值要大,当TIM1的中断修改完CCR值时,输出波形又刚刚变为低电平不久, 由于新的CCR值比当前计数器的值要大,结合pwm1的输出特性,这时就会出现了尖脉冲的问题。

假设TIM1开始的pwm参数是CCR=100,ARR=300.当TIM1发生溢出中断请求时,TIM2正在处理自己的中断服务程序,而TIM1的中断又不具备抢占能力,假设知道TIM1的计数器记到103时TIM2才释放CPU,显然TIM1的PWM输出刚做完从高到低的跳变,如果此时TIM1的中断服务程序里将CCR的值改为200, 并立即生效。这一改,CCR于计数器的比较结果马上改变了,即在计数器记到200前都是CCR大于计数器的值了,此时对应的输出应该是高电平。所以,刚跳下来的电平,马上又跳高,这时就产生了一个低电平的尖峰脉冲。

当然,如果新修改的CCR值比当前计数器小,那就对当前周期的输出不会有影响,因为在溢出前一直是计数器大于CCR的值。

所以这个尖脉冲是时有时无,其宽度与TIM2释放CPU的时机以及TIM1本身中断服务程序处理时间都有关系。

处理办法:

1. 开启ccr寄存器的预装功能,让其在下一个周期生效发挥作用;

2. 调整TIM1的中断抢占优先级,让其抢占TIM2的中断。

【案例二】

【第一个波形是初始波形;第二个波形是修改后的输出波形;第三个波形是计数器计数变化示意图】

04772de323cb0e76565b1477fcc9a33c.png

这个案例跟第一个有点类似,这里是在比较中断里动态修改CCR寄存器的值。CCR寄存器的预装功能是关闭的,即修改的数据立即生效。也是PWM波形里偶尔夹杂尖脉冲的问题。

【案例三】

基于ARR寄存器的预装功能的开启或关闭,修改ARR的数据看看相应的PWM输出情形。前提条件还是UP counting + pwm1;极性选择:高有效 。

特别注意下图中的第一种情形。即在关闭ARR的预装功能、向上计数模式的情况下,如果新修改的ARR值小于修改时刻计数器的值,计数器将持续计数到其满量程值,对于16位计数器就计到0xffff,对于32位计数器则计到0xffffffff才发生溢出。这点要特别注意。

c40fe90dc060cabb6a47bb30811d0a9e.png

前面跟大家分享了几个跟影子寄存器的预装功能有关的案例,希望大家对影子寄存器的预装特性有更深的理解。

感兴趣的朋友可以关注“AI电堂”公众号

d2b2763f5d5881361f761f85cb165138.png

或者直接登录电堂网站观看相关课程

电堂科技​c.51diantang.com


推荐阅读
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • CentOS 7 磁盘与文件系统管理指南
    本文详细介绍了磁盘的基本结构、接口类型、分区管理以及文件系统格式化等内容,并提供了实际操作步骤,帮助读者更好地理解和掌握 CentOS 7 中的磁盘与文件系统管理。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • Linux设备驱动程序:异步时间操作与调度机制
    本文介绍了Linux内核中的几种异步延迟操作方法,包括内核定时器、tasklet机制和工作队列。这些机制允许在未来的某个时间点执行任务,而无需阻塞当前线程,从而提高系统的响应性和效率。 ... [详细]
  • 台式电脑的电力消耗:待机一天耗电多少?
    探讨台式电脑的电力消耗问题,特别是待机状态下的能耗。本文将详细介绍影响电脑功耗的因素,并提供计算和优化电源配置的方法。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文将详细介绍如何在Linux操作系统中执行PHP脚本,包括环境配置、命令使用及验证方法。对于需要在Linux环境下开发或部署PHP应用的用户来说,这是一篇非常实用的文章。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 本文探讨了现代信号处理系统的核心组件,包括数据转换、数据交互和数据处理。详细介绍了AD/DA转换、串/并转换、编解码转换等技术,并讨论了FPGA在信号处理中的应用及其实现方法。 ... [详细]
  • vivo发布iQOO 11系列:搭载骁龙8 Gen2与多项创新技术
    vivo正式推出iQOO 11系列智能手机,该系列搭载最新的高通骁龙8 Gen2处理器,并引入多项创新技术,致力于为用户提供卓越的性能和游戏体验。 ... [详细]
  • 配置Windows操作系统以确保DAW(数字音频工作站)硬件和软件的高效运行可能是一个复杂且令人沮丧的过程。本文提供了一系列专业建议,帮助你优化Windows系统,确保录音和音频处理的流畅性。 ... [详细]
  • 电脑蓝屏故障的成因与解决方案(下)
    本文深入探讨了导致电脑蓝屏的具体原因,并提供了相应的解决方法,帮助用户更好地理解和处理这一常见问题。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
author-avatar
张琪健V
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有