2017-10-16 3 views
1

FreeRTOS로 STM32L576VGT를 시작하려고합니다.stm32l476v TIM15 CH2 PWM이 cubeMx에서 작동하지 않습니다.

나는 작업에서 LED가 깜박이고, 이제는 PWM을 설정하려고하는데, 주파수와 임무가 중요하지 않은 것은 "안녕하세요 세상"입니다.

모두 CubeMx를 사용하여 이루어 졌으므로 제대로 작동하지 않습니다.

tim.c은 main.c에에 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 */ 
    } 
} 

에 대한 CubeMx으로 생성 된 PCB가 이미 수행되고 그것이 하나에 연결되어 있기 때문에 내가 TIM15을 사용하고

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 */ 
} 

출력을 제어하려고합니다.

덕분에, 기예르모

+0

그리고 문제가 어디 있는지 지금까지 무엇을 했습니까? 디버거를 연결하고 타이머 15 레지스터를 참조하십시오. –

+0

Ps. 이 백 줄의 코드에서 어딘가에 활성화합니까? –

+0

debbugin은 제가 지금하고있는 일이고, 메인에서는 MX_TIM15_Init()를 볼 수 있습니다. 및 HAL_TIM_PWM_Start (& htim15, TIM_CHANNEL_2); – taquionbcn

답변

1

sConfigOC.Pulse = 0;에 다른 값을 시도 했습니까?

관련 문제