点击上方"蓝字"关注我们
| 作业 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下,用时1msTIM_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;//判断更新标志位是否1if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET){led_flag++; //第隔1ms 值加1if(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下,用时1sTIM_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
