Stm32-窗口看门狗实验
来源:互联网 发布:手机上编程软件 编辑:程序博客网 时间:2024/05/16 18:32
通过学习窗口看门狗实验了解并复习了:
<span style="white-space:pre"></span>外部中断配置步骤:
<span style="white-space:pre"></span>(1)初始化I/O为输入
<span></span>(2)开启复用时钟,设置I/O口与中断线映射关系(用到GPIOA,相应开时钟)
<span></span>(3)开启相应线上中断时间,选泽触发关系<span style="font-family: Arial, Helvetica, sans-serif;"></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> <strong></strong></span><span style="font-family: Arial, Helvetica, sans-serif;">(4)配置中断分组NVIC,使能中断</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span></span> (5)编写中断服务函数</span>
1.外部中断初始化EXTI_Initd的初始化即:
#include "exti.h"#include "led.h"#include "key.h"#include "delay.h"#include "usart.h" ////////////////////////////////////////////////////////////////////////////////// <span style="white-space:pre"></span> //外部中断0服务程序void EXTI0_IRQHandler(void){<span style="white-space:pre"></span>delay_ms(10);//消抖<span style="white-space:pre"></span>if(KEY2==1)<span style="white-space:pre"></span> //按键2<span style="white-space:pre"></span>{<span style="white-space:pre"></span>LED0=!LED0;<span style="white-space:pre"></span>LED1=!LED1;<span style="white-space:pre"></span><span style="white-space:pre"></span>}<span style="white-space:pre"></span> <span style="white-space:pre"></span>EXTI->PR=1<<0; //清除LINE0上的中断标志位 }//外部中断15~10服务程序void EXTI15_10_IRQHandler(void){<span style="white-space:pre"></span><span style="white-space:pre"></span>delay_ms(10); //消抖<span style="white-space:pre"></span> <span style="white-space:pre"></span>if(KEY0==0) //按键0<span style="white-space:pre"></span>{<span style="white-space:pre"></span>LED0=!LED0;<span style="white-space:pre"></span>}else if(KEY1==0)//按键1<span style="white-space:pre"></span>{<span style="white-space:pre"></span>LED1=!LED1;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>EXTI->PR=1<<13; //清除LINE13上的中断标志位 <span style="white-space:pre"></span>EXTI->PR=1<<15; //清除LINE15上的中断标志位 }
void EXTIX_Init(void){RCC->APB2ENR|=1<<2; //使能PORTA时钟JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入 GPIOA->CRL|=0X00000008; GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入 GPIOA->CRH|=0X80800000; GPIOA->ODR|=1<<13; //PA13上拉,PA0默认下拉GPIOA->ODR|=1<<15; //PA15上拉Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发Ex_NVIC_Config(GPIO_A,13,FTIR);//下降沿触发Ex_NVIC_Config(GPIO_A,15,FTIR);//下降沿触发MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //抢占2,子优先级2,组2MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2 }
<span style="white-space:pre"></span>
2.窗口看门狗IWDG_Init函数初始化“:
#include "wdg.h"#include "led.h"//初始化独立看门狗//prer:分频数:0~7(只有低3位有效!)//分频因子=4*2^prer.但最大值只能是256!//rlr:重装载寄存器值:低11位有效.//时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms).void IWDG_Init(u8 prer,u16 rlr) {IWDG->KR=0X5555;//使能对IWDG->PR和IWDG->RLR的写 IWDG->PR=prer; //设置分频系数 IWDG->RLR=rlr; //从加载寄存器 IWDG->RLR IWDG->KR=0XAAAA;//reload IWDG->KR=0XCCCC;//使能看门狗}//喂独立看门狗void IWDG_Feed(void){IWDG->KR=0XAAAA;//reload }//保存WWDG计数器的设置值,默认为最大.u8 WWDG_CNT=0x7f;//初始化窗口看门狗//tr :T[6:0],用于存储计数器的值//wr :W[6:0],用于存储窗口值//fprer:窗口看门狗的实际设置//低2位有效.Fwwdg=PCLK1/4096/2^fprer.void WWDG_Init(u8 tr,u8 wr,u8 fprer){ RCC->APB1ENR|=1<<11;//使能wwdg时钟WWDG_CNT=tr&WWDG_CNT; //初始化WWDG_CNT. WWDG->CFR|=fprer<<7; //PCLK1/4096再除2^fprerWWDG->CFR|=1<<9; //使能提前唤醒中断WWDG->CFR&=0XFF80; WWDG->CFR|=wr; //设定窗口值 WWDG->CR|=WWDG_CNT|(1<<7); //开启看门狗,设置7位计数器 MY_NVIC_Init(2,3,WWDG_IRQChannel,2);//抢占2,子优先级3,组2 }//重设置WWDG计数器的值void WWDG_Set_Counter(u8 cnt){WWDG->CR|=(cnt&0x7F);//重设置7位计数器}//窗口看门狗中断服务程序void WWDG_IRQHandler(void){ u8 wr,tr; wr=WWDG->CFR&0X7F;tr=WWDG->CR&0X7F;if(tr<wr)WWDG_Set_Counter(WWDG_CNT);//只有当计数器的值,小于窗口寄存器的值才能写CR!! WWDG->SR=0X00;//清除提前唤醒中断标志位LED1=!LED1;}
</pre><pre name="code" class="objc"><span style="white-space:pre"></span>stm32中文手册P321.
0 0
- Stm32-窗口看门狗实验
- STM32窗口看门狗
- STM32窗口看门狗
- stm32 窗口看门狗 WWDG
- stm32 窗口看门狗
- 窗口看门狗实验
- STM32 独立看门狗与窗口看门狗
- STM32独立看门狗与窗口看门狗
- stm32 独立看门狗和窗口看门狗区别
- 【实验五】窗口看门狗实验
- STM32学习-理解窗口看门狗
- STM32单片机学习(4) 独立看门狗实验
- STM32 独立看门狗IWDG 与窗口看门狗WWDG
- stm32独立看门狗和窗口看门狗的区别
- STM32独立看门狗IWDG与窗口看门狗WWDG研究
- stm32独立看门狗和窗口看门狗的区别
- stm32独立看门狗和窗口看门狗的区别
- stm32独立看门狗和窗口看门狗的区别
- sql注入的问题,PreparedStatement
- PAT(甲级)1078
- Extjs--12种布局方式
- JAVA代理模式Proxy Pattern
- Eclipse安装swt插件
- Stm32-窗口看门狗实验
- 我的进阶曲线之五
- mysql 海量数据的存储和访问解决方案
- PAT(甲级)1079
- eclipse scala工程
- jquery中eq()与get()的区别
- (负载均衡)nginx+keepalive
- 工具类JdbcUtils
- Leetcode84: Integer to Roman