Lyq510 发表于 2024-1-22 18:55:53

STM32H743V 定时器级联无反应

TIMER1时钟源为内部时钟,TIMER3,4时钟源为TIMER1,TIMER1,4,3无PWM输出

      
      /* 主模式TIM1 对系统时钟分频/
       
        htim1.Instance = TIM1;
        htim1.Init.Period = 255;
        htim1.Init.Prescaler = 0;
        htim1.Init.ClockDivision = 0;
        htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
        htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
        htim1.Init.RepetitionCounter = 4;
//        HAL_TIM_Base_Init(&htim1);
        HAL_TIM_PWM_Init(&htim1);
       
        sConfigOC.OCMode       = TIM_OCMODE_PWM1;
        sConfigOC.OCPolarity   = TIM_OCPOLARITY_HIGH;
        sConfigOC.Pulse      = 128;
        sConfigOC.OCNPolarity= TIM_OCNPOLARITY_HIGH;
        sConfigOC.OCFastMode   = TIM_OCFAST_DISABLE;
        sConfigOC.OCIdleState= TIM_OCIDLESTATE_RESET;
        sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
       if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
    /* Configuration Error */
//    Error_Handler();
}

        //采用内部时钟给TIM1提供时钟源
        sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;                //        TIM1->SMCR &=TIM_SMCR_SMS;
    HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig);
//        TIM1->SMCR &=TIM_SMCR_SMS;
       
        /* Select the TRGO source */
        sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
        sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
        HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig);
       
//        /* Reset the MMS Bits */
//        htim1.Instance ->CR2 &= ~TIM_CR2_MMS;
       
        __HAL_TIM_URS_ENABLE(&htim1);
      HAL_TIM_Base_Start(&htim1);


      /* 从模式TIM3 */

      htim3.Instance = TIM3;
        htim3.Init.Prescaler = 2;
        htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
        htim3.Init.Period = 0;                //配置为0 无波形
        htim3.Init.ClockDivision = 0;
        htim3.Init.RepetitionCounter = 0;



      HAL_TIM_PWM_Init(&htim3);
       
        sSlaveConfig4.SlaveMode = TIM_SLAVEMODE_GATED;                // TIM_SLAVEMODE_EXTERNAL1
        sSlaveConfig4.InputTrigger = TIM_TS_ITR0;
        HAL_TIM_SlaveConfigSynchro(&htim3, &sSlaveConfig4);



      sConfigOC.OCMode = TIM_OCMODE_PWM2;
        sConfigOC.Pulse = 1;
        sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
        sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
        HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4);
       
        __HAL_RCC_GPIOB_CLK_ENABLE();                /* 使能GPIO时钟 */
        __HAL_RCC_GPIOE_CLK_ENABLE();
       
        GPIO_InitStruct.Pin = GPIO_PIN_1;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_PULLUP;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
        GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
       
        GPIO_InitStruct.Pin = GPIO_PIN_14;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_PULLUP;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
        GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
        HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

eric2013 发表于 2024-1-23 08:08:19

我们是用的TIM+DMA控制任意GPIO做的脉冲输出

https://www.armbbs.cn/forum.php?mod=viewthread&tid=86980


页: [1]
查看完整版本: STM32H743V 定时器级联无反应