STM32
直播中

无人岛

10年用户 929经验值
擅长:嵌入式技术 制造/封装 控制/MCU
私信 关注
[问答]

怎样去触发STM32窗口看门狗的开门狗模式

怎样去触发STM32窗口看门狗的开门狗模式?如何去编写其主程序?

回帖(1)

郭晓晨

2021-8-27 16:47:08
  main.c
  /***********************************************************
  FileName:
  看门狗实验** Description: 使用外部中断进入一个死循环,从而触发开门狗模式,打印对应消息 ** Author:
  *********************************************************
  /#include “stm32f10x.h” //STM32头文件#include “stm32f10x_wwdg.h”#include “stdio.h”#include “sys.h”void RCC_Configuration(void);void NVIC_Configuration(void);void GPIO_Configuration(void);void USART_Configuration(void);void EXTI_Configuration(void);void WWDG_Configuration(void);int main (void){//主程序
  RCC_Configuration(); //时钟设置
  NVIC_Configuration();
  GPIO_Configuration(); USART_Configuration();
  EXTI_Configuration();
  if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST)!=RESET)
  { printf(“rnThe STM32 has been reset by WWDG rn”);
  RCC_ClearFlag();
  }
  else
  {
  WWDG_Configuration();
  printf(“rnThe STM32 has been reset by WWDG before rn”);
  }
  while(1);}void GPIO_Configuration(void){
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
  GPIO_Init(GPIOA,&GPIO_InitStructure);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);//设置PA0脚为外部中断0输入通道
  //TX端设置为推挽输出
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA,&GPIO_InitStructure);
  //RX端设置为浮空输入脚
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA,&GPIO_InitStructure);}void NVIC_Configuration(void){ //嵌套中断向量控制器的设置
  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  //0通道,0级先占,0级次占
  NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
  NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  //窗口开门狗,1级先占优先级
  NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
  NVIC_Init(&NVIC_InitStructure);
  }void EXTI_Configuration(void){
  //设置中断通道沿下降沿触发
  EXTI_InitTypeDef EXTI_InitStructure;
  EXTI_InitStructure.EXTI_Line=EXTI_Line0;
  EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd=ENABLE;
  EXTI_Init(&EXTI_InitStructure);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);//设置PA0脚为外部中断0输入通道}void WWDG_Configuration(void){
  WWDG_SetPrescaler(WWDG_Prescaler_8);
  WWDG_Enable(0x7f);
  WWDG_ClearFlag();
  WWDG_EnableIT();}void USART_Configuration(void){
  USART_InitTypeDef USART_InitStructure;
  USART_InitStructure.USART_BaudRate=115200;
  USART_InitStructure.USART_WordLength=USART_WordLength_8b;
  USART_InitStructure.USART_StopBits=USART_StopBits_1;
  USART_InitStructure.USART_Parity=USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
  USART_Init(USART1,&USART_InitStructure);
  USART_Cmd(USART1,ENABLE);}//将printf函数定位到usatr1int fputc(int ch,FILE *f){
  USART_SendData(USART1,(u8)ch);
  while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
  return ch;} stm32f10x_it.c
  #include “stm32f10x_it.h”#include “stm32f10x_wwdg.h”#include “stdio.h”void WWDG_IRQHandler(void){ WWDG_SetCounter(0x7f); WWDG_ClearFlag(); printf(“rn The Windows Watch DoG has been flash rn”);}void EXTI0_IRQHandler(void){ while(1);} 实验数据
举报

更多回帖

发帖
×
20
完善资料,
赚取积分