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 #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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren