ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-04-05 19:04:50  阅读:278  来源: 互联网

标签:IWDG Prescaler 编程 看门狗 STM32 定时器 2021 寄存器 define


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

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有