Buggfix Plus
Aktuellt datum och tid: 14.59 2019-11-15

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 5 inlägg ] 
Författare Meddelande
 Inläggsrubrik: Hur svårt kan PWM vara?
InläggPostat: 14.30 2019-11-01 

Blev medlem: 13.07 2005-12-30
Inlägg: 482
Försöker få igång nåt så enkelt som PWM på STM32l431 men den bara vägrar. PA8 blir hög istället för att bli en PWM på 4 kHz. Har säkert missat nåt enkelt....vad kan det vara?
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
HW_TIM_PWM_Set(4000, 70);
HW_TIM_PWM_Enable();
HW_TIM_Delay(1000);
HW_TIM_PWM_Disable();
 
 
void HW_TIM_PWM_Set(uint16_t freq, uint16_t duty)
{
   uint32_t period;
 
   period = 140 -(freq /100);
   period = period *20;   // Lite osäker...
   uint16_t PULSE_VALUE = (period * duty)/100;
   uint16_t PrescalerValue = 0;
 
   /* Compute the prescaler value */
   PrescalerValue = (uint16_t) ((SystemCoreClock /2) / 4000000) - 1;   // 4 MHz PWM
 
   printf("PWM: period %d prescaler %d puls %d \n\r", (int)period, PrescalerValue, PULSE_VALUE);
   PWMTimHandle.Instance = TIM1;
 
   PWMTimHandle.Init.Prescaler         = PrescalerValue;
   PWMTimHandle.Init.Period            = period;
   PWMTimHandle.Init.ClockDivision     = 0;
   PWMTimHandle.Init.CounterMode       = TIM_COUNTERMODE_UP;
   PWMTimHandle.Init.RepetitionCounter = 0;
   if (HAL_TIM_PWM_Init(&PWMTimHandle) != HAL_OK)
   {
      printf("Error TIM!\r\n");
      return;
   }
 
   sConfig.OCMode       = TIM_OCMODE_PWM1;
   sConfig.OCPolarity   = TIM_OCPOLARITY_HIGH;
   sConfig.OCFastMode   = TIM_OCFAST_DISABLE;
   sConfig.OCNPolarity  = TIM_OCNPOLARITY_HIGH;
   sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
   sConfig.OCIdleState  = TIM_OCIDLESTATE_RESET;
 
   sConfig.Pulse = PULSE_VALUE;
   if (HAL_TIM_PWM_ConfigChannel(&PWMTimHandle, &sConfig, TIM_CHANNEL_1) != HAL_OK)
   {
      printf("Error PWM!\r\n");
   }
}
 
void HW_TIM_PWM_Enable()
{
   GPIO_InitTypeDef   GPIO_InitStruct;
   __HAL_RCC_GPIOA_CLK_ENABLE();
   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
   GPIO_InitStruct.Pull = GPIO_PULLUP;
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
   GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
   GPIO_InitStruct.Pin = GPIO_PIN_8;
   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
   if (HAL_TIM_PWM_Start(&PWMTimHandle, TIM_CHANNEL_1) != HAL_OK)
   {
      printf("PWM start error\r\n");
   }
}
 
void HW_TIM_PWM_Disable()
{
   GPIO_InitTypeDef   GPIO_InitStruct;
   HAL_TIM_PWM_Stop(&PWMTimHandle, TIM_CHANNEL_1);
 
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
   GPIO_InitStruct.Pull = GPIO_PULLUP;
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
   GPIO_InitStruct.Pin = GPIO_PIN_8;
   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
   HAL_GPIO_WritePin(GPIOA,  GPIO_PIN_8, GPIO_PIN_RESET);
}


Upp
 Profil  
 
InläggPostat: 16.47 2019-11-01 
Användarvisningsbild

Blev medlem: 00.54 2006-12-16
Inlägg: 1952
Ort: häredetfaningenstjärna (fagersta)
Det är inte så att man behöver vrida upp en klöcka för alternate function ?

såhär fast för AF __HAL_RCC_GPIOA_CLK_ENABLE(); ?


Upp
 Profil  
 
InläggPostat: 18.19 2019-11-01 

Blev medlem: 21.06 2011-01-29
Inlägg: 898
Testa starta timer-klockan. __HAL_RCC_TIM1_CLK_ENABLE()


Upp
 Profil  
 
InläggPostat: 11.58 2019-11-08 

Blev medlem: 13.07 2005-12-30
Inlägg: 482
Hahah det var __HAL_RCC_TIM1_CLK_ENABLE();

Rookie mistake..... :lol:


Upp
 Profil  
 
InläggPostat: 21.11 2019-11-12 

Blev medlem: 13.19 2019-09-05
Inlägg: 132
:)


Länk


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 5 inlägg ] 

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 4 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010