STM32 GPIO-Geschwindigkeit

Gast #5784763
Lesenswert?
• ▲
▼
hallo zusammen,

ich muss eine Pulse mit sehr enger und unterschiedliche Breite erzeugen. 
Die Einstellung und Vorgehensweise ist wie folgt:

Clock freq= 16 Mhz, Prescaler=1. Aus_zeit soll 15 µs sein, daraus folgt 
= 15µs*16MHz/2=120. Dafür habe ich an Timer gedacht und mit dieser Logic 
für bestimmte Zeit an und ausschalten. Leider sieht es aus, dass 
manchmal Flanken nicht fallen können. Obwohl ichmit Cubemx die maximale 
Outputgeschwindigkeit in der GPIO-Konfiguration auf very high gesetzt 
habe. habt ihr vorschläge ?


Vielen Dank
Angehängte Dateien:
Gast #5784813
Lesenswert?
• ▲
▼
Samuel schrieb:
> danke aber das hilft mir nicht. trotzdem werde ich das durchlesen.
> weil ich versucht habe, die ARR eines PWM-Signales zu ändern, jedoch
> ohne Erfolg.

Ja, weil du keine Ahnung hast was eine PWM ist und wie ein Timer 
funktioniert.

Stelle den Prescaler auf 1, Periode auf 480, No Division, Pulse 240
dann gehts.
Und lerne zuerst einmal was ein PWM Signal ist.
Gast #5784844
Lesenswert?
• ▲
▼
C. W. schrieb:
> Wenn es nur Pulspakete sein sollen wären evtl. entsprechende Bitmuster per SPI 
eine Lösung.

DAS habe ich probiert. Aber es ging nicht. Weil es immer feste low 
interval gibt. und die Daten werden je nach der Zeit zwischen 2 
fallenden Flanken gemmesen und dementsprechend decodieren.

LG
Gast #5784858
Lesenswert?
• ▲
▼
void LED(){

Wert=  __HAL_TIM_GetCounter(&htim3);

    if(Wert> 0 && Wert<120){
    HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_RESET);
    }
    else if (Wert> 120 && Wert<= 1392){
    HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_SET);     // Sync 58 
Tcik
    }

    else if (Wert> 1392 && Wert<= 1512){
    HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_RESET);
    }
    else if (Wert> 1512 && Wert<= 1704){
    HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_SET);   // 13 tick 
Status
    }
    else if (Wert> 1704 && Wert<= 1824){
    HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_RESET);
    }
    else if (Wert> 1824 && Wert<= (2024)){
    HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_SET);   // 26 tick 
data1
    }


      else{
    HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_RESET);
    }

  }
Gast #5785744
Lesenswert?
• ▲
▼
hallo zusammen,

ich habe es jetzt mit arbitrary waveform. Aber es hat nicht geklappt. 
ich denke, dass es an der Konfiguration liegt, weil ich register 
programmiereung nicht kann.Ich habe ein Array von 6 Words erstellt, 
damit zwei Wellenformmuster an TIM2-Kanal 1 gesendet werden können 
(TIM2_ARR, TIM2_RCR, TIM2_CCR1).

uint32_t aSRC_Buffer [6] = {2000,1,800,3000,2,200}; /// ARR, RCR, CCR1 x 
2. trotzdem sehe ich kein Signal mit dem Oszi ausser ein Signal wegen 
der folgenden Function HAL_TIM_PWM_Start (& htim2, TIM_CHANNEL_1);
Zusammenfassung der Konfiguration:

Timer clock =64 MHz
clock source: internal
PWM Generation CH1
Prescaler=64
counter mode =Up
period= 50000


– Pin PA8: TIM2_ch1_output
– Mode: push pull
– Pull: pull-up
– Speed: high



uint32_t aSRC_Buffer[6] = { 2000,1,800,3000,2,200}; //ARR, Häufigkeit, 
CCR

  /* USER CODE BEGIN 2 */
//HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
HAL_TIM_DMABurst_WriteStart(&htim2,TIM_DMABASE_ARR, TIM_DMA_TRIGGER,
(uint32_t *)aSRC_Buffer, TIM_DMABURSTLENGTH_3TRANSFERS);
  /* USER CODE END 2 */
Angehängte Dateien:

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.