STM32H743xx基本定时器TIM17

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();
        }
    }
}

五、测试效果

STM32H743xx基本定时器TIM17_第1张图片


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

你可能感兴趣的:(STM32,单片机,stm32,嵌入式,c语言)