前言
一个有自己想法的小白,致力于出一套基于HAL库的STM32F103ZE系列案列,库来源于STM32CubeMx生成的LED的工程,详情参照P2和P3…
说明
芯片:STM32F103ZET6
底层库:STM32F1_HAL 库
魔改于:原子哥的STM32F4的HAL库案例(链接在P4),STM32CubeMx生成的LED的工程
本P在P4的工程下进行TIM3的配置
1. 注意!!!!!
修改: stm32f1xx_hal_comf.h中的TIM的使能,需要打开,一定要把此处的注释给去掉
2. TIM3配置方法如下:
文件:HAL_TIM3.c
#include "HAL_TIM3.h"
/**
******************************************************************************
* @file : HAL_TIM3.c
* @attention
作者:@Hwang
魔改基于:原子哥的F407的HAL库+STM32CubeMx软件生产的库
最后修改时间: 2021-10-25
******************************************************************************
*/
TIM_HandleTypeDef TIM3_Handler; //定时器句柄
//通用定时器3中断初始化
//arr:自动重装值。
//psc:时钟预分频数
//定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
//Ft=定时器工作频率,单位:Mhz
//这里使用的是定时器3!(定时器3挂在APB1上,时钟为HCLK/2)
void TIM3_Init(uint16_t arr,uint16_t psc)
{
TIM3_Handler.Instance=TIM3; //通用定时器3
TIM3_Handler.Init.Prescaler=psc; //分频系数
TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP; //向上计数器
TIM3_Handler.Init.Period=arr; //自动装载值
TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频因子
HAL_TIM_Base_Init(&TIM3_Handler);
HAL_TIM_Base_Start_IT(&TIM3_Handler); //使能定时器3和定时器3更新中断:TIM_IT_UPDATE
}
//定时器底册驱动,开启时钟,设置中断优先级
//此函数会被HAL_TIM_Base_Init()函数调用
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM3)
{
__HAL_RCC_TIM3_CLK_ENABLE(); //使能TIM3时钟
HAL_NVIC_SetPriority(TIM3_IRQn,1,3); //设置中断优先级,抢占优先级1,子优先级3
HAL_NVIC_EnableIRQ(TIM3_IRQn); //开启ITM3中断
}
}
//定时器3中断服务函数
void TIM3_IRQHandler(void)
{
HAL_TIM_IRQHandler(&TIM3_Handler);
}
//回调函数,定时器中断服务函数调用
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==(&TIM3_Handler))
{
LED3=!LED3; //LED1反转
}
}
文件:HAL_TIM3.h
#ifndef _HAL_TIM3_H
#define _HAL_TIM3_H
#include "main.h"
/**
******************************************************************************
* @file : HAL_TIM3.h
* @attention
作者:@Hwang
魔改基于:原子哥的F407的HAL库+STM32CubeMx软件生产的库
最后修改时间: 2021-10-25
******************************************************************************
*/
extern TIM_HandleTypeDef TIM3_Handler; //定时器句柄
void TIM3_Init(uint16_t arr,uint16_t psc);
#endif
3. 在main函数中进行初始化:
TIM3_Init(5000-1,7200-1);
周期:T=5000x7200 / 72M = 0.5s