完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
/*********************************************************************/
RTC Real_Time_Clock /*********************************************************************/ 付费换来的笔记——看门狗详解 /*********************************************************************/ 一 背景(雾) 单片机的工作常常会收到外界电磁场的干扰,造成程序跑飞,陷入死循环 处于对单片机运行状态进行实时监测的考虑 便产生了专门用于检测单片机 程序运行状态的模块或者芯片 /*********************************************************************/ 二 看门狗解决了什么 要每隔一段时间喂狗,如果超过时间没有喂狗,将视为程序跑飞,则系统 看门狗复位 /*********************************************************************/ 三 STM32里的看门狗 1 独立看门狗 LSI专用时钟, 应用于需要看门狗作为一个在主程序之外能够完全独立工作,对时间精度要求低 2 窗口看门狗 APB1时钟分频后得到的时钟来驱动 适合要求看门狗在精确几时窗口起作用的程序 /*********************************************************************/ 四 详解独立看门狗(时钟由独立的RC振荡器提供,可在停止和待机模式下工作) 1 摘抄——————————————————————————— “就是一个 12 位的递减计数器,当计数器的值从某个值一直减到 0 (0X000)的时候, 系统就会产生一个复位信号,即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 使用看门狗了———————————————————————— 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) 1 2 3 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)); 1 设置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资源,模块多时跑不动) 一个时钟脉冲记一个数(增或者减) 1个 PWM高级控制定时器 用于电机控制 16位带死区控制和紧急刹车 (没懂) 3个 16位定时器 每个定时器有4个用于输入捕获/输出比较/ PWM或脉冲计数的通道和增量编码器输入 (没懂) 2个 看门狗 1个 系统时间定时器 24位自减型 /*********************************************************************/ 通用定时器 3个可以同步运行的TIM2 TIM3 TIM4 每个都有16位 自动加载递加递减计数器和16位预分频器(不懂) 通过链接功能与高级控制定时器共同工作 任一都能用于产生PWM输出 ,都有独立DMA请求机制 DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通, 而不需要依赖于 CPU 的大量中断负载。 否则,CPU 需要从来源把每一片段的资料复制到暂存器, 然后把它们再次写回到新的地方高级控制定时器TIM1 (能互补输出) 死区控制 紧急刹车 |
|
|
|
只有小组成员才能发言,加入小组>>
2518 浏览 0 评论
1098浏览 2评论
710浏览 1评论
460浏览 0评论
201浏览 0评论
346浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 08:00 , Processed in 1.251046 second(s), Total 81, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号