2017-10-16 3 views
1

私はFreeRTOSでSTM32L576VGTを起動しようとしています。stm32l476v TIM15 CH2 PWMがcubeMxから動作しない

私はタスクからの点滅があり、今はPWMを設定しようとしていますが、周波数と重要度は重要ではありません。これは「hello world pwm」です。

すべてがCubeMxを使用して行われており、動作させることができませんでした。 TIM15

PCBが既に行われていると、それは1が接続されているので、私はTIM15を使用してい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 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で生成

tim.c出力を制御したい

おかげで、 ギジェルモ

+0

そして、問題がどこにあるかを見つけるためにこれまで何をしていますか?デバッガを接続して停止し、タイマ15のレジスタ –

+0

Psを参照してください。コードのこの100行で、あなたはどこかでそれを有効にしますか? –

+0

debbuginは私が今やっていることです。メインではMX_TIM15_Init()を見ることができます。およびHAL_TIM_PWM_Start(&htim15、TIM_CHANNEL_2)。 – taquionbcn

答えて

1

あなたはsConfigOC.Pulse = 0;に異なる値で試したことがありますか?

関連する問題