PY32F003F18之通用定时器MspInit函数

PY32F003F18高级定时器有TIM1,通用定时器有TIM3,TIM14,TIM16和TIM17。在初始化定时器前,要先写好MspInit函数,才可以调用与之对应的初始化函数。

下面是TIM1更新事件的MspInit函数,和GPIO没有关系,可以这么去写。

//函数功能:在初始化定时器时,HAL库使用该函数
//使能TIMx时钟,设置中断优先级,使能TIMx中断

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == TIM1)//初始化TIM1
    {
    __HAL_RCC_TIM1_CLK_ENABLE();                          //使能TIM1时钟
    HAL_NVIC_SetPriority(TIM1_BRK_UP_TRG_COM_IRQn, 0, 0); //设置中断优先级
    HAL_NVIC_EnableIRQ(TIM1_BRK_UP_TRG_COM_IRQn);         //使能TIM1中断
    }
    if(htim->Instance == TIM3)//初始化TIM3
    {
    __HAL_RCC_TIM3_CLK_ENABLE();           //使能TIM3时钟
    HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); //设置中断优先级
    HAL_NVIC_EnableIRQ(TIM3_IRQn);         //使能TIM3中断
    }
}

对于和IO口有关系的,涉及到中断的,多个定时器放在一起写,程序不容易管理。

下面是TIM1采用OC1互补输出的MspInit函数,这个HAL_TIM_Base_MspInit()变化很大。

//函数功能:使能TIM1时钟,GPIOA时钟,将PA0复用为TIM1_CH1N,将PA3复用为TIM1_CH1
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
  GPIO_InitTypeDef   GPIO_InitStruct;

  if(htim->Instance == TIM1)//初始化TIM1
    {
    __HAL_RCC_TIM1_CLK_ENABLE();  //TIM1时钟使能
    __HAL_RCC_GPIOA_CLK_ENABLE(); //GPIOA时钟使能

    /*初始化PA0/PA7为TIM1_CH1N/TIM1_CH1*/
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;       //复用功能推挽模式
    GPIO_InitStruct.Pull = GPIO_PULLUP;           //引脚上拉被激活
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; //引脚速度为高速
    GPIO_InitStruct.Alternate = GPIO_AF14_TIM1;   //选择AF14通道
    GPIO_InitStruct.Pin = GPIO_PIN_0;             //选择第0引脚
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);       //A0-TIM1_CH1N
      //根据GPIO_InitStruct结构参数初始化GPIOA的外设寄存器
      //将PA0复用为TIM1_CH1N

    GPIO_InitStruct.Alternate = GPIO_AF13_TIM1;//选择AF13通道
    GPIO_InitStruct.Pin = GPIO_PIN_3;          //选择第3引脚
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);         //A3-TIM1_CH1
      //根据GPIO_InitStruct结构参数初始化GPIOA的外设寄存器
      //将PA3复用为TIM1_CH1

    }
    if(htim->Instance == TIM3)//初始化TIM3
    {
    }
}

写好MspInit函数后,就可以调用不同的初始化函数,如TIM1更新事件,需要调用HAL_TIM_Base_Init () ,TIM1采用OC1互补输出则需要调用HAL_TIM_PWM_Init()。TIM1采用IC1捕获,则需要调用HAL_TIM_IC_Init()
总之,这是HAL库提供给用户在初始化时,自己要实现什么东西,把这个功能先写好。

你可能感兴趣的:(产品研发,单片机,stm32,嵌入式硬件,PY32F003F18)