STM32 HAL USART per interrupt

Habe ich einige Probleme empfangen von Daten über den USART. Was ich eigentlich erreichen möchte ist, dass ich empfangen kann, einen Befehl über USART mit keine bestimmte Länge (maximal mögliche Länge). Also ich benutze die interrupt-routine, um zu überprüfen jedes Zeichen empfangen, aber ich habe irgendwie noch nicht das erreichen können, was ich will. Die routine wird jedes mal aufgerufen, wenn ich einen neuen Charakter, aber irgendwie HAL_UART_Receive_IT(&huart1,rx_data,buff_size_rx) aktualisiert nicht in Echtzeit, dann sehe ich nicht die empfangenen Zeichen wenn ich rx_data[pointer], aber wenige Zeit später ist es in der rx_data Puffer.

Was ich habe, so weit:

int pointer =0;

...

void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */
    if ( USART1->ISR & UART_IT_TXE) {

    }

    if ( USART1->ISR & UART_IT_RXNE) {
        HAL_UART_Receive_IT(&huart1,rx_data,buff_size_rx);
        if(rx_data[pointer]=='\0') {
              pointer=0;
              readCommand(rx_data);
              clearBuffer(rx_data,buff_size_rx);
        } else {
          pointer++;
          if(pointer>=buff_size_rx) {
              pointer=0;
          }
        }
    }
    /* USER CODE END USART1_IRQn 0 */
    HAL_UART_IRQHandler(&huart1);
    /* USER CODE BEGIN USART1_IRQn 1 */



  /* USER CODE END USART1_IRQn 1 */
}
was ist der Punkt, der das duplizieren des Puffers Umsetzung? BTW you cant call HAL_UART_Receive_IT von hier aus und rufen Sie dann HAL irq-handler, welche Anrufe es wieder. Es tun Nackte Register oder HAL nicht beide. Jedenfalls HAL für einfache Peripherie wie uart?
Was meinst du mit dublicating der Puffer-Implementierung? Ich möchte erreichen, das im HAL, aber ich habe wirklich keine Lösung gefunden noch. DMA wäre schön, aber dort muss ich eine Feste Länge für jeden Befehl, oder verwenden Sie ein Zeitlimit, das nicht unterstützt wird von HAL für ein STM32F303K8T6.
Hal tut es. Sie sollten nichts mit dem buffet, wenn du hal benutzen. Ich würde es umsetzen nackten Widerständler selbst, aber es ist dein code, ohne diese dumme Bibliothek. Wie lange Ihre Nachrichten sind? Wenn kurz es gibt keinen Punkt, der DMA.
Auch die Nachrichten sind nur rund 16 Zeichen. Wenn ich nur HAL_UART_Receive_IT, schreibt er die Zeichen der rx_data Puffer, aber ich habe dann nie sehen, wenn ich erhielt ein null-Zeichen und es wirkt wie ein ring-Puffer, die nur für eine Feste Länge.
Haben Sie einen Blick auf den code, den ich verwenden, um zu erhalten, beliebige GPS-Daten here. Es nutzt HAL aber Verknüpfungen der interrupt. Wenn ich es wieder tun würde ich dump HAL und gehen mit Ebene CMSIS.

InformationsquelleAutor HansPeterLoft | 2017-09-13

Schreibe einen Kommentar