stm32 Hal Bibliothek Transmit via Interrupt

Gast #5696719
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 */
}
Angehängte Dateien:
Gast #5697268
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?

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.