Stm32F103 Soft Pwm

Gast #4314700
Lesenswert?
• ▲
▼
Hallo,
Ich versuche nun schon eine ganze Weile eine SoftPwm hinzubekommen auf 
einen veliebigen Portbin vom Stm32f103.
Dazu hab ich den Timer1 Initialisiert der läuft auch,
nur ist mein Problem die ganzen Hardware Pwm Pins sind schon anderweitig 
benutzt.
Vielleicht könnte mir einer von ihnen weiterhelfen
wie ich das nun mit der SoftPwm zum laufen bekomme.
mfg
Gast #4314739
Lesenswert?
• ▲
▼
void TIM1_IRQHandler(void)
{


  if ( TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET )
  {
    TIM_ClearITPendingBit(TIM1 , TIM_FLAG_Update);



      if(PWMcnt < led)
         GPIO_ResetBits(GPIO_LED, LED5)

      else
         GPIO_SetBits(GPIO_LED, LED5)

      if(PWMcnt =255)
        {
         PWMcnt = 0
        }
      else
        {
          PWMcnt++;
        }






  }
}
Gast #4327288
Lesenswert?
• ▲
▼
Hier sind meine Einstellungen für die SoftPWM.
Es Funktioniert soweit, aber wenn ich zb Daten über Uart(mit eigener 
isr) bekomme Flackert die Led.
Kann mir da einer Weiterhelfen was ich hbier Falsch mache.

1
 vu8 PWM_cnt = 0;
2
 vu8  Red = 50;
3

4
  NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;    
5
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
6
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  
7
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
8
  NVIC_Init(&NVIC_InitStructure);
9

10
void TIM5_Configuration(void)
11
{
12
  uint16_t TimerPeriod = 0;
13

14
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
15
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5 , ENABLE);
16

17
  TimerPeriod = (uint16_t) (SystemCoreClock / 1000000) - 1;
18
  TIM_DeInit(TIM5);
19
  TIM_TimeBaseStructure.TIM_Period=1000;
20
  TIM_TimeBaseStructure.TIM_Prescaler= 0;
21
  TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;   
22
  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;   
23
  TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
24
  TIM_ClearFlag(TIM5, TIM_FLAG_Update);                 
25
  TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE);
26
  TIM_Cmd(TIM5, ENABLE);                      
27
}
28

29

30
void TIM5_IRQHandler(void)
31
{   
32
  if ( TIM_GetITStatus(TIM5 , TIM_IT_Update) != RESET ) 
33
   {
34
    TIM_ClearITPendingBit(TIM5 , TIM_FLAG_Update);
35
 
36
    if ((PWM_cnt <=Red) && (Red!=0))
37
     {
38
       GPIO_ResetBits(GPIO_LED, LED_5);
39
     }
40
    else
41
     {
42
       GPIO_SetBits(GPIO_LED, LED_5);
43
     }  
44
   
45
   if(PWM_cnt==255)                  {
46
          PWM_cnt=0; 
47
  }
48
       else
49
        {
50
   PWM_cnt++;
51
  }              
52
   }   
53
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.