怎样利用STM32L476的TIM1输出脉冲??

2019-03-23 15:23发布

各位,我想用单独的TIM1通过PA7(TIM1_CH1N)输出指定个数的脉冲。参考了很多例程,网上的,还有STM32CUBE库自带的例程。都没有输出,只是CNT计数器可以计数。请大家指点指点。ST的技术支持也不是狠好。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
Li_Lei
1楼-- · 2019-03-25 01:03
 精彩回答 2  元偷偷看……
Li_Lei
2楼-- · 2019-03-25 06:14
void MTIM8_Init(void) {
        LL_TIM_InitTypeDef TIM_InitStruct;
        LL_TIM_OC_InitTypeDef TIM_OC_InitStruct;
//        LL_TIM_BDTR_InitTypeDef TIM_BDTRInitStruct;
        LL_GPIO_InitTypeDef GPIO_InitStruct;
  /* Tim8 PC PA 时钟 */
  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM8);
        __HAL_RCC_GPIOC_CLK_ENABLE();
        __HAL_RCC_GPIOA_CLK_ENABLE();
       
  /* TIM8 interrupt Init */
  NVIC_SetPriority(TIM8_UP_TIM13_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
  NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);

  TIM_InitStruct.Prescaler = 0;
  TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_CENTER_UP;
  TIM_InitStruct.Autoreload = 16384-1;
  TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
  TIM_InitStruct.RepetitionCounter = 0;
  LL_TIM_Init(TIM8, &TIM_InitStruct);

  LL_TIM_SetClockSource(TIM8, LL_TIM_CLOCKSOURCE_INTERNAL);
        /*
        LL_TIM_OC_EnablePreload(TIM8, LL_TIM_CHANNEL_CH1);
        LL_TIM_OC_EnablePreload(TIM8, LL_TIM_CHANNEL_CH2);
        LL_TIM_OC_EnablePreload(TIM8, LL_TIM_CHANNEL_CH3);
        LL_TIM_OC_EnablePreload(TIM8, LL_TIM_CHANNEL_CH4);*/       
        LL_TIM_EnableARRPreload(TIM8);
       
  TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1;
  TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_ENABLE;
  TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE;
  TIM_OC_InitStruct.CompareValue = 0;
  TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_HIGH;
  TIM_OC_InitStruct.OCNPolarity = LL_TIM_OCPOLARITY_HIGH;
  TIM_OC_InitStruct.OCIdleState = LL_TIM_OCIDLESTATE_LOW;
  TIM_OC_InitStruct.OCNIdleState = LL_TIM_OCIDLESTATE_LOW;
        LL_TIM_OC_Init(TIM8, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct);
        LL_TIM_OC_Init(TIM8, LL_TIM_CHANNEL_CH2, &TIM_OC_InitStruct);
        LL_TIM_OC_Init(TIM8, LL_TIM_CHANNEL_CH3, &TIM_OC_InitStruct);
        LL_TIM_OC_Init(TIM8, LL_TIM_CHANNEL_CH4, &TIM_OC_InitStruct);       
       
        LL_TIM_OC_EnableFast(TIM8, LL_TIM_CHANNEL_CH1);
        LL_TIM_OC_EnableFast(TIM8, LL_TIM_CHANNEL_CH2);
        LL_TIM_OC_EnableFast(TIM8, LL_TIM_CHANNEL_CH3);
        LL_TIM_OC_EnableFast(TIM8, LL_TIM_CHANNEL_CH4);       
       
  LL_TIM_SetTriggerOutput(TIM8, LL_TIM_TRGO_RESET);
  LL_TIM_DisableMasterSlaveMode(TIM8);


    /**TIM8 GPIO Configuration   
    PC6     ------> TIM8_CH1
    PC7     ------> TIM8_CH2
    PC8     ------> TIM8_CH3
    PC9     ------> TIM8_CH4
    */
  GPIO_InitStruct.Pin = LL_GPIO_PIN_6|LL_GPIO_PIN_7|LL_GPIO_PIN_8|LL_GPIO_PIN_9;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;//LL_GPIO_OUTPUT_OPENDRAIN;//
  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
  GPIO_InitStruct.Alternate = LL_GPIO_AF_3;
  LL_GPIO_Init(GPIOC, &GPIO_InitStruct);
          LL_TIM_EnableAllOutputs(TIM8);
LL_TIM_EnableCounter(TIM8);
ZHANGXUEJIE
3楼-- · 2019-03-25 08:25
huo_hu 发表于 2018-9-7 12:43
你io口没初始化,io时钟要打开,另外BDTR 的mod要置高

IO口初始化了的,只是没有贴上来
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct;
  if(timHandle->Instance==TIM1)
  {
  /* USER CODE BEGIN TIM1_MspPostInit 0 */

  /* USER CODE END TIM1_MspPostInit 0 */
  
    /**TIM1 GPIO Configuration   
    PA7     ------> TIM1_CH1N
    */
    GPIO_InitStruct.Pin = clkk_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
    HAL_GPIO_Init(clkk_GPIO_Port, &GPIO_InitStruct);

  /* USER CODE BEGIN TIM1_MspPostInit 1 */

  /* USER CODE END TIM1_MspPostInit 1 */
  }

}
Li_Lei
4楼-- · 2019-03-25 12:50
 精彩回答 2  元偷偷看……

一周热门 更多>