Files
stm32-cnn/HARDWARE/TIMER/timer.c
2024-12-19 14:06:05 +08:00

69 lines
2.0 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "timer.h"
#include "led.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32F429开发板
//定时器中断驱动代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2016/1/6
//版本V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
extern vu16 USART3_RX_STA;
TIM_HandleTypeDef TIM4_Handler; //定时器句柄
//通用定时器4中断初始化
//arr自动重装值。
//psc时钟预分频数
//定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
//Ft=定时器工作频率,单位:Mhz
//这里使用的是定时器4!(定时器4挂在APB1上时钟为HCLK/2)
void TIM4_Init(u16 arr,u16 psc)
{
TIM4_Handler.Instance=TIM4; //通用定时器4
TIM4_Handler.Init.Prescaler=psc; //分频系数
TIM4_Handler.Init.CounterMode=TIM_COUNTERMODE_UP; //向上计数器
TIM4_Handler.Init.Period=arr; //自动装载值
TIM4_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频因子
HAL_TIM_Base_Init(&TIM4_Handler);
HAL_TIM_Base_Start_IT(&TIM4_Handler); //使能定时器4和定时器4更新中断TIM_IT_UPDATE
}
//定时器底册驱动,开启时钟,设置中断优先级
//此函数会被HAL_TIM_Base_Init()函数调用
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM4)
{
__HAL_RCC_TIM4_CLK_ENABLE(); //使能TIM4时钟
HAL_NVIC_SetPriority(TIM4_IRQn,0,2); //设置中断优先级抢占优先级0子优先级2
HAL_NVIC_EnableIRQ(TIM4_IRQn); //开启ITM4中断
}
}
//定时器4中断服务函数
void TIM4_IRQHandler(void)
{
HAL_TIM_IRQHandler(&TIM4_Handler);
}
//回调函数,定时器中断服务函数调用
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==(&TIM4_Handler))
{
USART3_RX_STA|=1<<15; //标记接收完成
__HAL_TIM_CLEAR_IT(&TIM4_Handler, TIM_IT_UPDATE); // 清除TIM4的更新中断标志
HAL_TIM_Base_Stop(&TIM4_Handler); //关闭TIM4
}
}