Forum: Mikrocontroller und Digitale Elektronik stm32 Hal Bibliothek Transmit via Interrupt


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Marco D. (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Servus zusammen,

Ich verwende zurzeit das erste mal Interrupts und habe noch Probleme 
damit. Ich versuche lediglich Daten von meinem STM32F767ZI zu versenden 
und zu empfangen. Ich verwende dafür die HAL_Receive_IT(...), sowie die 
HAL_Transmit() Funktionen. In der main while(1) rufe ich 
HAL_Receive_IT(...) auf und frage eine globale Variable ab. Im Interrupt 
Handler von HAL_Receive setze ich die globale Variable von 0 auf 1. Dies 
soll in der main dann den Transmit Prozess starten. (siehe Quellcode 
unten)

Ich mache das über eine globale Variable weil da später noch mehr Code 
dazu kommt und die Interrupts ja nur so gering wie möglich gehalten und 
auch Schleifen vermieden werden sollen.

Allerdings habe ich das Problem wenn ich mir über die Uart-Schnittstelle 
Daten empfange, sendet er mir nicht immer Daten zurück, was ich mir 
nicht erklären kann (siehe Bild).

Hier der Quellcode:

In der main:

int a = 0;
int docklight = 0;

while (1)
  {
    HAL_UART_Receive_IT(&huart3,&docklight,10);

    if(a == 1){
      a = 0;
      HAL_UART_Transmit(&huart3,(int)&docklight,sizeof(docklight)/4,10);
    }
  }

In der ISR:

extern a;
extern docklight;

void USART3_IRQHandler(void)
{
  /* USER CODE BEGIN USART3_IRQn 0 */
  a = 1;
  //if(TIM2->CCR1 == 2048) TIM2->CCR1 = 0;
  //else TIM2->CCR1 = 2048; //gelb
  /* USER CODE END USART3_IRQn 0 */
  HAL_UART_IRQHandler(&huart3);
  /* USER CODE BEGIN USART3_IRQn 1 */

  /* USER CODE END USART3_IRQn 1 */
}

: Verschoben durch Moderator
von StinkyWinky (Gast)


Bewertung
0 lesenswert
nicht lesenswert
So wie ich das sehe wird in HAL_UART_Transmit() solange verblieben, bis 
alle Daten gesendet sind. Während dieser Zeit müssen die empfangenen 
Daten irgendwo gepuffert werden. Hast du das bedacht?
Vlt. besser HAL_UART_Transmit_IT benützen?

von Harry L. (mysth)


Bewertung
0 lesenswert
nicht lesenswert
a muß als volatile deklariert werden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.