自学内容网 自学内容网

STM32 | 看门狗+RTC源码解析

点击上方"蓝字"关注我们

作业

1、使用基本定时7,完成一个定时喂狗的程序

01、上节回顾

STM32 | 独立看门狗+RTC时间(第八天)

02、定时器头文件

#ifndef __TIM_H#define __TIM_H#include "stm32f4xx.h"void Tim3_Init(void);void Tim7_Init(void);#endif

03、定时器源文件

#include "tim.h"/*********************************定时器说明TIM3 -- APB1(定时器频率:84MHZ)TIM3是16位定时器**********************************/void Tim3_Init(void){
    TIM_TimeBaseInitTypeDef    TIM_TimeBaseInitStruct;  NVIC_InitTypeDef        NVIC_InitStruct;  //1、能定时器时钟。  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);    TIM_TimeBaseInitStruct.TIM_Prescaler  = (84-1);        //84分频,定时器频率84MHZ/84 = 1MHZ(计一个用1us)  TIM_TimeBaseInitStruct.TIM_Period    = (1000-1);        //计1000个数,在1MHZ下,用时1ms  TIM_TimeBaseInitStruct.TIM_CounterMode  = TIM_CounterMode_Up;  //向上计数  TIM_TimeBaseInitStruct.TIM_ClockDivision= TIM_CKD_DIV1;      //分频因子  1脉冲计一个数  //2、初始化定时器,配置ARR,PSC。  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);  NVIC_InitStruct.NVIC_IRQChannel            = TIM3_IRQn;     //中断通道,可在stm32f4xx.h文件当中查找  NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority  = 1;        //抢占优先级  NVIC_InitStruct.NVIC_IRQChannelSubPriority      = 1;        //响应优先级  NVIC_InitStruct.NVIC_IRQChannelCmd          = ENABLE;      //通道使能  //3、启定时器中断,配置NVIC。  NVIC_Init(&NVIC_InitStruct);    //4、设置 TIM3_DIER  允许更新中断  TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);    //5、使能定时器。  TIM_Cmd(TIM3, ENABLE);}//编写中断服务函数。每隔1ms进入中断void  TIM3_IRQHandler(void){
    static unsigned short led_flag = 0;    //判断更新标志位是否1  if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)  {
      led_flag++; //第隔1ms 值加1        if(led_flag%9 == 0)    {
        //亮灯      GPIO_ResetBits(GPIOF, GPIO_Pin_9);    }    else    {
        //灭灯      GPIO_SetBits(GPIOF, GPIO_Pin_9);        }        //清空更新标志位    TIM_ClearITPendingBit(TIM3, TIM_IT_Update);    }}/*********************************定时器说明TIM7 -- APB1(定时器频率:84MHZ)TIM7是16位定时器**********************************/void Tim7_Init(void){
    TIM_TimeBaseInitTypeDef    TIM_TimeBaseInitStruct;  NVIC_InitTypeDef        NVIC_InitStruct;  //1、使能定时器时钟。  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);    TIM_TimeBaseInitStruct.TIM_Prescaler  = (8400-1);              //8400分频,定时器频率84MHZ/84 = 1MHZ(计一个用1us)  TIM_TimeBaseInitStruct.TIM_Period    = (10000-1);              //计10000个数,在1MHZ下,用时1s  TIM_TimeBaseInitStruct.TIM_CounterMode  = TIM_CounterMode_Up;  //向上计数  TIM_TimeBaseInitStruct.TIM_ClockDivision= TIM_CKD_DIV1;        //分频因子  1脉冲计一个数  //2、初始化定时器,配置ARR,PSC。  TIM_TimeBaseInit(TIM7, &TIM_TimeBaseInitStruct);  NVIC_InitStruct.NVIC_IRQChannel            = TIM7_IRQn;     //中断通道,可在stm32f4xx.h文件当中查找  NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority  = 1;    //抢占优先级  NVIC_InitStruct.NVIC_IRQChannelSubPriority      = 1;      //响应优先级  NVIC_InitStruct.NVIC_IRQChannelCmd          = ENABLE;      //通道使能  //3、启定时器中断,配置NVIC。  NVIC_Init(&NVIC_InitStruct);    //4、设置 TIM7_DIER  允许更新中断  TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE);    //5、使能定时器。  TIM_Cmd(TIM7, ENABLE);}//编写中断服务函数。每隔1s进入中断void  TIM7_IRQHandler(void){
    //判断更新标志位是否1

原文地址:https://blog.csdn.net/m0_45463480/article/details/140534500

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!