STM32H743xx基本定时器TIM17
编译器平台及例程说明
编译器平台说明
1. Toolchain : MDK-ARM Community Version: 5.30.0.0(Kile V5)
2. Encoding : Encode in UTF-8 without signature
3. Device Specific Packs : Keil.STM32H7xx_DFP.2.7.0.pack
4. Preprocessor Symbols Define : USE_HAL_DRIVER, STM32H743xx
USE_HAL_DRIVER : 允许使用HAL库驱动
STM32H743xx : STM32H743xx芯片
5. Chip Type : STM32H743VIT6, Flash:2MByte, ROM:1MByte
6. 在stm32h7xx_hal_conf.h文件中HSE_VALUE为外部高速振荡器,默认25MHZ。此值必须与硬件保持一致。
例程说明
本例程中关于串口部分请自行查看 STM32H743xx串口1中断接收不定长数据并根据自定义ASCII协议处理,实现多参数的协议解析以及读写操作. 和 STM32H743xx串口1中断接收不定长数据并转发用HAL实现
1. TIM17时钟频率为200MHZ,预分频系数为200,计算频率为1MHZ,自动重装载值为10000,TIM17基本定时器10ms中断
一、基本定时器初始化
TIM_HandleTypeDef TIM17_HandlerType = {0};
/**********************************************************************************************************************************************
* 函数名 : vInit_TIM17_BasicTimer
* 描 述 : 初始化基本定时器TIM17
* 输 入 : reloadVal : 自动重装载值
**********************************************************************************************************************************************/
void vInit_TIM17_BasicTimer(u32 reloadVal)
{
TIM17_HandlerType.Instance = TIM17;
TIM17_HandlerType.Init.Prescaler = 199;
TIM17_HandlerType.Init.CounterMode = TIM_COUNTERMODE_UP;
TIM17_HandlerType.Init.Period = (reloadVal - 1);
TIM17_HandlerType.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
TIM17_HandlerType.Init.RepetitionCounter = 0;
TIM17_HandlerType.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&TIM17_HandlerType) != HAL_OK)
{
Error_Handler();
}
HAL_TIM_Base_Start_IT(&TIM17_HandlerType);//Enable TIMx and Update interrupt
// __HAL_TIM_ENABLE_IT(&TIM17_HandlerType, TIM_IT_UPDATE); //Enable TIMx Update interrupt
// __HAL_TIM_CLEAR_IT(&TIM17_HandlerType, TIM_IT_UPDATE); //Clear Update interrupt
// __HAL_TIM_ENABLE(&TIM17_HandlerType); //Enable TIMx
dprintf("10-STM32H743xx_CubeMx_BasicTime...\r\n");
}
二、定时器的弱函数
/* TIM_Base MSP Initialization */
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
{
if(htim_base->Instance==TIM17)
{
/* Peripheral clock enable */
__HAL_RCC_TIM17_CLK_ENABLE();
/* TIM17 interrupt Init */
HAL_NVIC_SetPriority(TIM17_IRQn, 2, 2);
HAL_NVIC_EnableIRQ(TIM17_IRQn);
}
}
/* TIM_Base MSP De-Initialization */
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
{
if(htim_base->Instance==TIM17)
{
/* Peripheral clock disable */
__HAL_RCC_TIM17_CLK_DISABLE();
/* TIM17 interrupt DeInit */
HAL_NVIC_DisableIRQ(TIM17_IRQn);
}
}
三、定时器中断及更新中断处理
/* This function handles TIM17 global interrupt */
void TIM17_IRQHandler(void)
{
HAL_TIM_IRQHandler(&TIM17_HandlerType);
}
/**********************************************************************************************************************************************
* 函数名 : HAL_TIM_PeriodElapsedCallback
* 描 述 : 定时器更新事件处理
* 输 入 : htim : 定时器对象
* 说 明 : 1. 在进入HAL_TIM_PeriodElapsedCallback()前已判断为更新中断且更新中断标志已清零
**********************************************************************************************************************************************/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef * htim)
{
static u8 i = 0;
if(htim->Instance == TIM17) //10ms
{
if((++i) >= 100)
{
i = 0;
dprintf("TIM17 Interrupt 1ms...%d\r\n", HAL_GetTick());
}
}
}
四、测试例程
int main(void)
{
static u8 i = 0;
vStartUp_System();
vInit_System_BSP();
vInit_USART1(115200);
vInit_UART_ASCII_Protocol();
vInit_TIM17_BasicTimer(TIM1M_FRQ100HZ_RELOAD_VAL);//10ms
vShow_PlatformDevice_Info();
while (1)
{
#if ( USE_UART_ASCII_PROTOCOL_ENEBLE > 0 )
vUART_ASCII_Protocol_Handler();
#endif
HAL_Delay(10);
if((++i) > 50)
{
i = 0;
USER_LED_CPL();
}
}
}
五、测试效果
00> Segger Rtt Init Ok...
00> STM32H743VIT6 Start Running...
00> 8-STM32H743xx_CubeMx_USART_UserProtocol......
00> 10-STM32H743xx_CubeMx_BasicTime...
00> Debug Versions......
00> Compile Date : Apr 12 2022 22:43:08
00>
00> TIM17 Interrupt 1ms...990
00> TIM17 Interrupt 1ms...1990
00> TIM17 Interrupt 1ms...2990
00> TIM17 Interrupt 1ms...3990
00> TIM17 Interrupt 1ms...4990
00> TIM17 Interrupt 1ms...5990
00> TIM17 Interrupt 1ms...6990
00> TIM17 Interrupt 1ms...7987
00> TIM17 Interrupt 1ms...8987
00> TIM17 Interrupt 1ms...9987
00> Set Baud Rate...9600
00> TIM17 Interrupt 1ms...10987
00> TIM17 Interrupt 1ms...11987
00> TIM17 Interrupt 1ms...12987
00> Test Demo...85 -600 857 -200 8886
00> TIM17 Interrupt 1ms...13987
00> TIM17 Interrupt 1ms...14987
00> TIM17 Interrupt 1ms...15987
00> System Reset...
00> TIM17 Interrupt 1ms...16987
00> TIM17 Interrupt 1ms...17987
00> TIM17 Interrupt 1ms...18987