Hallo Zusammen,
ich verwende für die Programmierung eines STM32l053 die Keil IDE mit
einem Projekt aus CubeMX und dessen HAL-Funktionen.
Zum Senden mit der UART habe ich zunächst die Funktion
HAL_UART_Transmit_IT(...) direkt aus der Main-Funktion aufgerufen und da
hat auch alles wunderbar geklappt. Jetzt habe ich aber den Code 1:1 in
eine eigene Funktion gepackt und nun geht nichts mehr.
Zum Test habe ich deshalb einen Portpin in dieser "eigenen" Funktion
getoggelt und dann wurde auch die HAL-Funktion für die UART aufgerufen.
Sobald ich das Toggeln auskommentiere, sendet auch die UART nichts mehr.
Dann habe ich die Compileroptimierung ausgeschaltet und siehe da, die
UART-Funktion wird auch ohne das Toggeln des Portpins ausgeführt. Es
sieht also so aus, als ob der Compiler den Funktionsaufruf wegoptimiert.
Hier mal mein code:
Ausschnitt aus der Main:
1 |
|
2 | send_to_reader(slave_addr_cycle, statusbits_to_reader, command_to_reader);//Sende Daten
|
Funktion:
1 | void send_to_reader(uint8_t reader_number, uint8_t statusbits[], uint8_t command[])
|
2 | {
|
3 | uint16_t bus_tx_buffer_1[15];//9n1 UART
|
4 | //!!!!!Wenn hier ein Portpin getoggelt wird, geht auch das Senden über die UART!!!!!!
|
5 |
|
6 | //Datenpaket vorbereiten
|
7 | bus_tx_buffer_1[0] = MASTER_ADRESSE;
|
8 | bus_tx_buffer_1[1] = reader_number;
|
9 | bus_tx_buffer_1[2] = statusbits[(reader_number-1)];
|
10 | bus_tx_buffer_1[3] = command[(reader_number-1)];
|
11 | bus_tx_buffer_1[4] = (bus_tx_buffer_1[0] + bus_tx_buffer_1[1] + bus_tx_buffer_1[2] + bus_tx_buffer_1[3]);
|
12 | //Setze Neunbit:
|
13 | bus_tx_buffer_1[4] = bus_tx_buffer_1[4] + (1U << 8);//Neuntes Datenbit
|
14 | HAL_UART_Transmit_IT(&huart1, (uint8_t*)bus_tx_buffer_1, 5);
|
15 |
|
16 | command[(reader_number-1)] = 0; //Nach dem Senden wieder Kommando löschen, damit es nur einmal gesendet wird
|
17 | }
|
Füge ich den code aus der Funktion 1:1 an die Stelle aus der main ein,
wo der Aufruf stattfindet, funktioniert die Sache
Kann mir jemand weiterhelfen?