2017-10-16 113 views
1

我試圖用FreeRTOS啓動STM32L576VGT。stm32l476v TIM15 CH2 PWM不工作from cubeMx

我有一個指示燈從一個任務閃爍,現在我試圖設置PWM,頻率和責任現在並不重要,是一個「你好世界pwm」。

所有的事情都是使用CubeMx完成的,我一直無法使它工作。

tim.c與CubeMx生成TIM15

/* TIM15 init function */ 
void MX_TIM15_Init(void) 
{ 
    TIM_MasterConfigTypeDef sMasterConfig; 
    TIM_OC_InitTypeDef sConfigOC; 
    TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig; 

    htim15.Instance = TIM15; 
    htim15.Init.Prescaler = 47999; 
    htim15.Init.CounterMode = TIM_COUNTERMODE_UP; 
    htim15.Init.Period = 200; 
    htim15.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; 
    htim15.Init.RepetitionCounter = 0; 
    htim15.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; 
    if (HAL_TIM_PWM_Init(&htim15) != HAL_OK) 
    { 
    _Error_Handler(__FILE__, __LINE__); 
    } 
    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; 
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; 
    if (HAL_TIMEx_MasterConfigSynchronization(&htim15, &sMasterConfig) != HAL_OK) 
    { 
    _Error_Handler(__FILE__, __LINE__); 
    } 
    sConfigOC.OCMode = TIM_OCMODE_PWM1; 
    sConfigOC.Pulse = 0; 
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; 
    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(&htim15, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) 
    { 
    _Error_Handler(__FILE__, __LINE__); 
    } 
    sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; 
    sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; 
    sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; 
    sBreakDeadTimeConfig.DeadTime = 0; 
    sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; 
    sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; 
    sBreakDeadTimeConfig.BreakFilter = 0; 
    sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; 
    if (HAL_TIMEx_ConfigBreakDeadTime(&htim15, &sBreakDeadTimeConfig) != HAL_OK) 
    { 
    _Error_Handler(__FILE__, __LINE__); 
    } 
    HAL_TIM_MspPostInit(&htim15); 



} 

void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle) 
{ 
    if(tim_pwmHandle->Instance==TIM15) 
    { 
    /* USER CODE BEGIN TIM15_MspInit 0 */ 
    /* USER CODE END TIM15_MspInit 0 */ 
    /* TIM15 clock enable */ 
    __HAL_RCC_TIM15_CLK_ENABLE(); 
    /* USER CODE BEGIN TIM15_MspInit 1 */ 
    /* USER CODE END TIM15_MspInit 1 */ 
    } 
} 

void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) 
{ 
    GPIO_InitTypeDef GPIO_InitStruct; 
    if(timHandle->Instance==TIM15) 
    { 
    /* USER CODE BEGIN TIM15_MspPostInit 0 */ 
    /* USER CODE END TIM15_MspPostInit 0 */ 
    /**TIM15 GPIO Configuration  
    PB15  ------> TIM15_CH2 
    */ 
    GPIO_InitStruct.Pin = GPIO_PIN_15; 
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 
    GPIO_InitStruct.Pull = GPIO_PULLDOWN; 
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 
    GPIO_InitStruct.Alternate = GPIO_AF14_TIM15; 
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 
    /* USER CODE BEGIN TIM15_MspPostInit 1 */ 
    /* USER CODE END TIM15_MspPostInit 1 */ 
    } 
} 

主要main.c中

int main(void) 
{ 
    /* USER CODE BEGIN 1 */ 
    /* USER CODE END 1 */ 
    /* MCU Configuration----------------------------------------------------------*/ 
    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ 
    HAL_Init(); 
    /* USER CODE BEGIN Init */ 
    /* USER CODE END Init */ 
    /* Configure the system clock */ 
    SystemClock_Config(); 
    /* USER CODE BEGIN SysInit */ 
    /* USER CODE END SysInit */ 
    /* Initialize all configured peripherals */ 
    MX_GPIO_Init(); 
    MX_QUADSPI_Init(); 
    MX_LPUART1_UART_Init(); 
    MX_SPI2_Init(); 
    MX_I2C1_Init(); 
    MX_TIM15_Init(); 
    /* USER CODE BEGIN 2 */ 
// DISP_diplay_init(); 
    HAL_TIM_PWM_Start(&htim15,TIM_CHANNEL_2); 
    /* USER CODE END 2 */ 
    /* Call init function for freertos objects (in freertos.c) */ 
    MX_FREERTOS_Init(); 
    /* Start scheduler */ 
    osKernelStart(); 
    /* We should never get here as control is now taken by the scheduler */ 
    /* Infinite loop */ 
    /* USER CODE BEGIN WHILE */ 
    while (1) 
    { 
    /* USER CODE END WHILE */ 
    /* USER CODE BEGIN 3 */ 
    } 
    /* USER CODE END 3 */ 
} 

我使用TIM15因爲PCB已經完成,它是一個連接到我想要控制的輸出。

感謝, 吉列爾莫

+0

到目前爲止你已經做了什麼來找到問題所在。連接調試器停止它並看到定時器15寄存器 –

+0

Ps。在這百行代碼中,你是否在某處啓用了 –

+0

這個debbugin就是我現在正在做的事情,而且在主要的時候你可以看到MX_TIM15_Init();和HAL_TIM_PWM_Start(&htim15,TIM_CHANNEL_2); – taquionbcn

回答

1

你有不同的值試過sConfigOC.Pulse = 0;