当前位置:首页 > 单片机 > 单片机
[导读] STM32看门狗总结调原子哥的开发板一年多,基本上能用,但是对于STM32某些基本外设的工作机理还不甚明了。借此暑假的机会对各个外设的功能做一个简短的总结,在提高自己基础知识的同时,也给其他同学提供

STM32看门狗总结

调原子哥的开发板一年多,基本上能用,但是对于STM32某些基本外设的工作机理还不甚明了。借此暑假的机会对各个外设的功能做一个简短的总结,在提高自己基础知识的同时,也给其他同学提供一些参考。

先来看门狗部分的内容。

看门狗部分内容当中较难理解的是窗口看门狗,其中窗口值设置以及如何引发复位更是很难搞懂,因此从根本上分析一下窗口看门狗的工作原理,而与其有关的中断则略过。

stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。独立看门狗有自己独立的40Khz时钟,不存在使能问题;而窗口看门狗使用的是PCLK1时钟,需要先使能时钟。以下是关于看门狗的具体说明:

①、独立看门狗是限制喂狗时间在0-x内,x由你的相关寄存器决定。喂狗的时间不能过晚。

②、窗口看门狗,所以称之为窗口就是因为其喂狗时间是一个有上下限的范围内,你可以通过设定相关寄存器,设定其上限时间和下限时间。喂狗的时间不能过早也不能过晚。

显而易见的是,独立看门狗比较简单,容易理解。

这里,主要对窗口看门狗的详细含义作具体说明。

看门狗的上窗口就是配置寄存器WWDG->CFR里设定的W[6:0];下窗口是0x40;当窗口看门狗的计数器在上窗口之外,或是低于下窗口值都会产生复位。如上图所讲,当计数器的值递减到0x3f的计数时间内未进行喂狗操作,则会触发复位;其次,如果在计数器值递减到配置寄存器WWDG->CFR里设定的W[6:0]之前进行喂狗操作,也会触发复位。所以,在使用窗口看门狗时,要设定两个值,一个就是窗口看门狗的上窗口值,即配置寄存器WWDG->CFR里设定的W[6:0],另一个就是递减计数器的计数初值。

再结合上图中的逻辑关系分析一下:

如图中所示标号,①③表示与门,②表示非或门;

1、当T[6:0]>W[6:0]时,比较器输出的值是1,如果此时重装载WWDG_CR,所以③就会输出1,②的输出也肯定是1,又因为使能了窗口看门狗,所以WWDG_CR的第7位WDGA也为1,即与门①的输出是1,此时会触发复位。简单的概括来说,就是当递减计数器的值在递减到上窗口值W[6:0]之前进行喂狗操作(即重装载WWDG_CR),会触发看门狗复位。

2、当T[6:0]的第6位变为0时,即T[6:0]的值变为0x3f,此时②的输出肯定为1,而WDGA也为1,因此①的输出是1,会触发看门狗复位。简单的概括来说,就是当递减计数器的值在到达0x3f时仍未进行喂狗操作(即重装载WWDG_CR),同样会触发看门狗复位。

上窗口的值可以只有设定,7位二进制数最大只可以设定为127(0x7f),最小又必须大于其下窗口的0x40,所以其取值范围为64~127(0x40~0x7f),否则不能保证窗口。

配置寄存器WWDG->CFR寄存器中的[8:7]两个位的设置为计数器设定时钟分频系数,确定这个计数器可以定时的时间范围,从而确定窗口的时间范围。

窗口看门狗的时钟来自于PCLK1,在时钟配置中,其频率为外部时钟经倍频器后的二分频时钟,即为36Mhz,如上图STM32时钟树所示。

窗口看门狗的超时公式如下:

36M时钟下窗口看门狗的最小最大超时表:

表中数据的具体计算如下所示:

①、当T[5:0]全部取0时,7位计数器的值是0x40,此时距离复位值只能计数一次,在此时间之内必须执行喂狗操作,否则触发复位。

从而可知各个WDGTB值下的最小超时时间,如WDGTB=0时,

Twwdg=4096×2^0×1/36(us)=113us,依次可计算出其他WDGTB值下的最小超时时间。

②、当T[5:0]全部取1时,7位计数器的值是0x7f,此时距离复位值递减计数0x40次(0x3f+1),在此时间之内执行喂狗操作可避免复位。

从而可知各个WDGTB值下的最大超时时间,如WDGTB=0时,

Twwdg=4096×2^0×64/36(us)=7281.7us,依次可计算出其他WDGTB值下的最大超时时间。




STM32系列的CPU,有多达8个定时器,其中TIM1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。其它6个为普通定时器,时钟由APB1的输出产生。

通用定时器的定义:STM32的通用定时器是一个通过可编程预分频器(PSC)驱动的16位自动装载计数器(CNT)构成。

功用:STM32的通用定时器可以被用于测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。

分频系数:决定定时器的时基,即最小定时时间。

定时器的时钟来源:

从图中可以看出,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。

举一个例子说明。假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值;

当预分频系数=1时,APB1=36MHz,TIM2~7的时钟频率=36MHz(倍频器不起作用);

当预分频系数=2时,APB1=18MHz,在倍频器的作用下,TIM2~7的时钟频率=36MHz。

由于APB1不仅给通用定时器提供时钟,还给其他外设提供时钟,因此也体现了APB1rescaler设计的灵活性。

对自动重装载寄存器赋值,TIM_Period的大小实际上表示的是需要经过TIM_Period次计数后才会发生一次更新或中断。对TIM_Prescaler的设置,直接决定定时器的时钟频率。通俗点说,就是一秒钟能计数多少次。比如算出来的时钟频率是2000,也就是一秒钟会计数2000次,而此时如果TIM_Period设置为4000,即4000次计数后就会中断一次。由于时钟频率是一秒钟计数2000次,因此只要2秒钟,就会中断一次。发生中断时间=(TIM_Prescaler+1)*(TIM_Period+1)/FLK。

同样需要注意的,一进入中断服务程序,第一步要做的,就是清除掉中断标志位。以便下次中断服务函数的顺利执行。

注意:APB1rescaler后得到的是通用定时器的时钟源,再次基础上进行TIM_Prescaler的设置就得到通用定时器具体的时钟频率啦。所以小伙伴们千万不要把文中定时器中经常提到的76MHz时钟以及由(TIM_Prescaler+1)*/FLK计算得到的时钟频率搞混淆啦。

当然,计数器的计数模式比较简单,这里没有就其进行详细的说明。

今天有同学问我PWM到底咋工作的?为啥这样啊?为啥啊?直接把我问蒙了。所以今天就来总结一些通用定时器产生PWM输出。

①、PWM主要就是控制频率和占空比的:这两个因素分别通过两个寄存器控制:TIMX_ARR和TIMX_CCRX。ARR寄存器就是自动重装寄存器,也就是计数器记到这个数以后清零再开始计,这样PWM的频率就是tim_frequency/(TIMX_ARR-1)。在计数时会不停的和CCRX寄存器中的数据进行比较,如果小于的话是高电平或者低电平,计数值大于CCRX值的话电平极性反相。所以这也就控制了占空比。

②、TIM3-CNT中的数据从0计数到ARR中的值,当计数到TIM3_CCRx接收到的数据大小时,由高电平变为低电平,当CNT中的数值增加到ARR寄存器设定的值时就自动清零,从0重新开始计数,并产生一个计数溢出事件,从0计数到ARR值的这段时间是PWM的周期。设置CCRx的值用来改变PWM的占空比。

③、TIM3-CNT的值与TIM3_CCRx中的数据是自动比较,TIM3-CNT的值与TIM3_CCRx中的数据相等时,PWM是自动产生跳变的,此过程是硬件实现的,在原子开发板的例程中找不到有关二者进行比较的代码,所以不要问在软件中是如何实现的,因为我找了很长时间没找到。

④端口重映射

为了优化64脚或100脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)实现引脚的重新映射。这时,复用功能不再映射到它们的原始分配上。(注意:重定义的引脚是固定的,不是想重定义到哪个引脚就可以到哪个引脚的!重映像一般只适用于100和144脚的封装!(具体看哪个外设))。

STM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。但这些重映射并不是任意的,只有有些引脚可以重映射.具体哪些引脚stm32参考手册上的GPIO与AFIO章节上有。一般是定时器,通信接口等数字系统的引脚可以重映射,adc,dac,时钟这种与模拟量有关的不可以。

简单的说STM32的IO有3个功能一个是默认的,一个是复用,一个是重映射功能(这个其实也属于复用),如果配置成复用,则将使用第2个功能,如果配置成复用,同时相应的重映射也配置了,则将使用第3个功能。

STM32的部分重映射实例:


输入捕获实验

捕获是如何实现的?与定时器有什么关系?它为什么就能够捕获到呢?

先入为主:可以利用定时器捕获某些IO口的高电平脉宽,脉宽时间可以通过串口打印得到。

输入捕获模式可以用来测量脉冲宽度或者测量频率。STM

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭