定时器6实验
使用定时器6,实现500ms定时器更新中断,在中断中反转LED0
Ft=72MHz
Tout=0.5s
带入PSC+1=7200
得ARR+1=5000
关键代码:Timer.c
#include "stm32h7xx.h" // Device header
#include "led.h"
TIM_HandleTypeDef g_timx_handle;//定义一个结构体
/*定时器中断初始化函数*/
void btim_tinx_int_init(uint16_t arr,uint16_t psc)
{
g_timx_handle.Instance=TIM6;//初始化结构体基地址,定时器6
g_timx_handle.Init.Prescaler=psc;//分频系数
g_timx_handle.Init.Period=arr;//自动重装载值
HAL_TIM_Base_Init(&g_timx_handle);
HAL_TIM_Base_Start_IT(&g_timx_handle);
}
/*定时器基础MSP初始化函数*/
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)//配置NVIC、CLOCK
{
if(htim->Instance==TIM6)
{
__HAL_RCC_TIM6_CLK_ENABLE();//打开定时器6时钟
HAL_NVIC_SetPriority(TIM6_DAC_IRQn,1,3);//配置NVIC (中断号 抢占优先级 响应优先级
HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
}
}
/*定时器6中断服务函数*/
void TIM6_DAC_IRQHandler(void)
{
HAL_TIM_IRQHandler(&g_timx_handle);
}
/*定时器溢出中断中断回调函数*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM6)
{
LED0_Toggle;
}
Timer.h
#ifndef __TIMER_H
#define __TIMER_H
#include "sys.h"
void btim_tinx_int_init(uint16_t arr,uint16_t psc);
#endif
main.c
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "Timer.h"
//北极星STM32H750/F750开发板
//基本定时器6实验
//使用定时器6,实现500ms定时器更新中断,在中断中反转LED0
//
int main(void)
{
Cache_Enable(); //打开L1-Cache
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(160,5,2,4); //设置时钟,400Mhz
delay_init(400); //延时初始化
uart_init(115200); //串口初始化
LED_Init(); //初始化LED时钟
btim_tinx_int_init(5000-1,7200-1);//初始化中断函数
while(1)
{
}
}