STM32学习笔记之独立看门狗(IWDG)的使用
2016-07-15 23:35
267 查看
[align=left]
[/align]
[align=left] 对STM32任何模块使用前都要对其初始化、首先就是初始化外设时钟,可以简单看系统时钟章节关于外设时钟,看数据手册如下:[/align]
[align=left]
[/align]
[align=left]看门狗由独立内部40M时钟驱动,所以不需要我们在初始化时钟配置寄存器。
[/align]
[align=left]
[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left] [/align]
[align=left] 读数据手册可以得知看门狗模块使用的系统LSI时钟,初始化配置之前要设置预分配寄存器IWDG_PR,以及设置IWDG_RLR两个寄存器的值,由于寄存器有写保护,根据数据手册可知:[/align]
[align=left]
[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left] [/align]
[align=left] 所以在设置之前寄存器之前必须先对IWDG_KR(键寄存器)再写入0x5555,修改寄存器的值 。接下来看预分频寄存器:[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]预分因子主要和看门狗的超时时间有关 看手册可知:[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]
[/align]
[align=left](这里我没有深究最大值的用处),接着我们看自动装载寄存器:[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
设置IWDG_PR和IWDG_RLR的初值。
我们计算一下看门狗的喂狗时间(看门狗溢出时间)计算公式:
Tout=((4*2^prer)*rlr)/40
其中Tout就是看门狗溢出时间(单位ms),prer是看门狗时钟预分频值 (IWDG_PR值),范围为0~7,rlr位看门狗重载值(IWDG_RLR)。
比如我们设置prer为4, rlr的值为625,我们就可以计算得到 Tout=64*625/40=1000ms,这样,看门狗的溢出时间就是1S,只要在这一秒钟 内,有一次吸入0XAAAA到IWDG_KR,就不会导致看门狗复位。
[align=left][/align]
[align=left]
[/align]
[align=left]所以初始化函数如下:[/align]
[align=left][/align]
[align=left]void IWDG_Init(4,625)[/align]
[align=left]{[/align]
[align=left] IWDG->KR=0X5555; //解除寄存器保护 [/align]
[align=left] IWDG->PR=prer; // 写入初始化分频值[/align]
[align=left] IWDG->RLR=rlr; // 写入自动装载值[/align]
[align=left] IWDG->KR=0XAAAA; //开启寄存器保护[/align]
[align=left] IWDG->KR=0XCCCC; //启动看门狗[/align]
[align=left]}[/align]
[align=left][/align]
[align=left]初始化完成后 看门狗开始逐渐递减计数到0000并复位 ,所以在复位之前要不断喂狗,[/align]
[align=left]即不断重新加载数据到IWDG_RLR中防止复位[/align]
[align=left]
[/align]
[align=left][/align]
[align=left]喂狗函数如下:[/align]
[align=left][/align]
[align=left]void IWDG_Feed(void)[/align]
[align=left]{[/align]
[align=left] IWDG->KR=0XAAAA; [/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]至此基本的独立看门狗的配置完成 初始化后 在适当地方调用喂狗程序即可。[/align]
[/align]
[align=left] 对STM32任何模块使用前都要对其初始化、首先就是初始化外设时钟,可以简单看系统时钟章节关于外设时钟,看数据手册如下:[/align]
[align=left]
[/align]
[align=left]看门狗由独立内部40M时钟驱动,所以不需要我们在初始化时钟配置寄存器。
[/align]
[align=left]
[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left] [/align]
[align=left] 读数据手册可以得知看门狗模块使用的系统LSI时钟,初始化配置之前要设置预分配寄存器IWDG_PR,以及设置IWDG_RLR两个寄存器的值,由于寄存器有写保护,根据数据手册可知:[/align]
[align=left]
[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left] [/align]
[align=left] 所以在设置之前寄存器之前必须先对IWDG_KR(键寄存器)再写入0x5555,修改寄存器的值 。接下来看预分频寄存器:[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]预分因子主要和看门狗的超时时间有关 看手册可知:[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left]
[/align]
[align=left](这里我没有深究最大值的用处),接着我们看自动装载寄存器:[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
设置IWDG_PR和IWDG_RLR的初值。
我们计算一下看门狗的喂狗时间(看门狗溢出时间)计算公式:
Tout=((4*2^prer)*rlr)/40
其中Tout就是看门狗溢出时间(单位ms),prer是看门狗时钟预分频值 (IWDG_PR值),范围为0~7,rlr位看门狗重载值(IWDG_RLR)。
比如我们设置prer为4, rlr的值为625,我们就可以计算得到 Tout=64*625/40=1000ms,这样,看门狗的溢出时间就是1S,只要在这一秒钟 内,有一次吸入0XAAAA到IWDG_KR,就不会导致看门狗复位。
[align=left][/align]
[align=left]
[/align]
[align=left]所以初始化函数如下:[/align]
[align=left][/align]
[align=left]void IWDG_Init(4,625)[/align]
[align=left]{[/align]
[align=left] IWDG->KR=0X5555; //解除寄存器保护 [/align]
[align=left] IWDG->PR=prer; // 写入初始化分频值[/align]
[align=left] IWDG->RLR=rlr; // 写入自动装载值[/align]
[align=left] IWDG->KR=0XAAAA; //开启寄存器保护[/align]
[align=left] IWDG->KR=0XCCCC; //启动看门狗[/align]
[align=left]}[/align]
[align=left][/align]
[align=left]初始化完成后 看门狗开始逐渐递减计数到0000并复位 ,所以在复位之前要不断喂狗,[/align]
[align=left]即不断重新加载数据到IWDG_RLR中防止复位[/align]
[align=left]
[/align]
[align=left][/align]
[align=left]喂狗函数如下:[/align]
[align=left][/align]
[align=left]void IWDG_Feed(void)[/align]
[align=left]{[/align]
[align=left] IWDG->KR=0XAAAA; [/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]至此基本的独立看门狗的配置完成 初始化后 在适当地方调用喂狗程序即可。[/align]
相关文章推荐
- The Review For PostGraduate No.16
- CVPR2016论文+code
- JavaScript事件知识点总结
- nil,null,NsNull
- Linux 普通进程 后台进程 守护进程
- 聊聊高并发系统限流特技-2
- js 学习基础 随机生成表格 颜色随机
- iOS 25个性能优化/内存优化常用方法
- HDU——1045Fire Net(最大匹配)
- 比较ascill码表后排序
- jQuery之动画介绍
- svn for mac 的注意事项
- (OK) Android 添加 开机启动 脚本
- cocos2dx学习之路----第七篇(坐标系统中本地坐标与世界坐标的转换详解)
- Num73 投资管理_简单分页查询&多条件分页
- Merge Sorted Array
- 工作中常用的Linux命令(不断更新中)
- RxAndroid 与OkHttpClient打造下载实例
- linux 入门 - 双系统的安装&JDK环境配置&Android Studio 的安装使用
- JHTP小结_第九章_面向对象编程-继承(Inheritance)