编程语言
首页 > 编程语言> > 学习STM32编程的小车过程中的笔记 2021/4/5

学习STM32编程的小车过程中的笔记 2021/4/5

作者:互联网

/*********************************************************************/

RTC Real_Time_Clock

/*********************************************************************/

付费换来的笔记——看门狗详解

/*********************************************************************/
一 背景(雾)

单片机的工作常常会收到外界电磁场的干扰,造成程序跑飞,陷入死循环
处于对单片机运行状态进行实时监测的考虑 便产生了专门用于检测单片机
程序运行状态的模块或者芯片
/*********************************************************************/
二 看门狗解决了什么

要每隔一段时间喂狗,如果超过时间没有喂狗,将视为程序跑飞,则系统
看门狗复位

/*********************************************************************/
三 STM32里的看门狗

1 独立看门狗
LSI专用时钟,
应用于需要看门狗作为一个在主程序之外能够完全独立工作,对时间精度要求低

2 窗口看门狗
APB1时钟分频后得到的时钟来驱动
适合要求看门狗在精确几时窗口起作用的程序
/*********************************************************************/
四 详解独立看门狗(时钟由独立的RC振荡器提供,可在停止和待机模式下工作)

1 摘抄———————————————————————————

“就是一个 12 位的递减计数器,当计数器的值从某个值一直减到 0 (0X000)的时候, 系统就会产生一个复位信号,即
IWDG_RESET。
如果在计数没减到 0 之前,刷新了计数器的值的话,
那么就不会产生复位信号,这个动作就是我们经常说的喂狗。”

2 详解———————————————————————————
在键寄存器中(IWDG_KR)中写入0XCCCC,就会启用独立看门狗
计数器开始从0XFFF递减计数
!!!
如果程序没跑偏,就会记得喂狗,在键寄存器中写入0XAAAA
IWDG_RLR中的值就会被重新加载到计数器,从而避免看门狗复位
!!!
如果程序跑飞了,忘记喂狗,则计数器中的值到达0X000,系统产生了复位信号
就复位了

3 IWDG寄存器描述——————————————————————

IWDG_PR和IWDG_RLR寄存器具有写保护功能,要修改之前要向IWDG_KR
寄存器中写入 0X5555,将其他值写入这个寄存器将会打乱操作顺序
重装载(0XAAAA)也能启动写保护功能
转载 侵删

键寄存器 IWDG_KR
预分频寄存器 IWDG_PR
重装载寄存器 IWDG_RLR
状态寄存器 IWDG_SR

4 使用看门狗了————————————————————————

void main(void)
{
	/*初始化*/
	{
	......
	}
	
	/*启动看门狗*/
	IWDG_Start();
	
	while(1)
	{
		/*需要被监控的代码*/
		{
		......
		}
		/*喂狗*/
		IWDG_Feed();
	}
}

步骤

1 取消写保护

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
#define IWDG_WriteAccess_Enable     ((uint16_t)0x5555)
#define IWDG_WriteAccess_Disable    ((uint16_t)0x0000)

2 设置独立看门狗的预分频系数 确定时钟

 IWDG_SetPrescaler(IWDG_Prescaler_256 );
#define IWDG_Prescaler_4            ((uint8_t)0x00)
#define IWDG_Prescaler_8            ((uint8_t)0x01)
#define IWDG_Prescaler_16           ((uint8_t)0x02)
#define IWDG_Prescaler_32           ((uint8_t)0x03)
#define IWDG_Prescaler_64           ((uint8_t)0x04)
#define IWDG_Prescaler_128          ((uint8_t)0x05)
#define IWDG_Prescaler_256          ((uint8_t)0x06)

3 设置看门狗重装载值,确定溢出时间

IWDG_SetReload((u16)(SYDG_TIMEOUT * 1000 / 6.4 + 0.5));

设置12s超时,分频因子256(4x2^prer)(prer为分频值)
12000 = (256) X RLR/40
则RLR看门狗的重装载值为1875

4 使能看门狗

IWDG_Enable();
#define KR_KEY_RELOAD    ((uint16_t)0xAAAA)
#define KR_KEY_ENABLE    ((uint16_t)0xCCCC)

void IWDG_Enable(void)
{
  IWDG->KR = KR_KEY_ENABLE;
}

5 应用程序喂狗

IWDG_RealoudCouter();

/*********************************************************************/
五 窗口看门狗
/*********************************************************************/

待补充

/*********************************************************************/
定时器(闹钟)
背景(雾)
一般情况下,不会用delay来进行LED闪烁
(空执行会占用CPU资源,模块多时跑不动)
转载转载

一个时钟脉冲记一个数(增或者减)
1PWM高级控制定时器 用于电机控制 16位带死区控制和紧急刹车
(没懂)
3个 16位定时器 每个定时器有4个用于输入捕获/输出比较/
PWM或脉冲计数的通道和增量编码器输入

(没懂)
2看门狗

1系统时间定时器 24位自减型
/*********************************************************************/

通用定时器
3个可以同步运行的TIM2 TIM3 TIM4
每个都有16位 自动加载递加递减计数器和16位预分频器(不懂)
通过链接功能与高级控制定时器共同工作
任一都能用于产生PWM输出 ,都有独立DMA请求机制

DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通, 而不需要依赖于 CPU 的大量中断负载。 否则,CPU 需要从来源把每一片段的资料复制到暂存器, 然后把它们再次写回到新的地方

高级控制定时器TIM1 (能互补输出
死区控制 紧急刹车

标签:IWDG,Prescaler,编程,看门狗,STM32,定时器,2021,寄存器,define
来源: https://blog.csdn.net/weixin_49436906/article/details/115444425