Przez wyjścia UART można wysyłać tekstowe wiadomości do terminala. Do ich odczytu użyjemy programu PuTTy
Konfiguracja PuTTy
- Serial
- Speed: 115200 bit/s (można zmienić w STM32CubeMX – Pinout – Connectivity – USART2 – Parameter Settings- Baud Rate)
- Port COM3 (trzeba odczytać w Menadżerze urządzeń Windows który COM)
CubeMX
W Cube MX standardowo w Connectivity klikamy w USART2 i zaznaczamy Asynchroneus
Program C
1 2 3 | /* USER CODE BEGIN 2 */ const char *text="Ok "; //text to send via UART to Putty /* USER CODE END 2 */ |
To jest nasz cout: &huart2 to zmienna systemowa (będzie w wygenerowanym pliku u góry) odpowiadająca temu portowi. Text to string C czyli (const char *)
Potem jest ilość bajtów do wysłania i czas timeout;
Można go dodać do pętli while(1):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /* USER CODE BEGIN 3 */ HAL_GPIO_WritePin(externLed_GPIO_Port, externLed_Pin, GPIO_PIN_RESET); HAL_Delay(500); HAL_GPIO_WritePin(externLed_GPIO_Port, externLed_Pin, GPIO_PIN_SET); HAL_Delay(500); HAL_UART_Transmit(&huart2, text, strlen(text), 1000); /* if (HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin) == GPIO_PIN_SET) //wcisniety { HAL_GPIO_WritePin(greenLed_GPIO_Port, greenLed_Pin, GPIO_PIN_RESET); } else { HAL_GPIO_WritePin(greenLed_GPIO_Port, greenLed_Pin, GPIO_PIN_SET); }*/ } /* USER CODE END 3 */ |
Nadpisanie printf
Można skorzystać w formatowania stringów wbudowanego w C++ (printf) pisząc np. takie makro w sekcji (max 100 znaków out)
1 2 3 4 5 6 7 8 9 10 11 12 | /*USER CODE BEGIN PFP*/ // printf(): //libraries may be in previous section, otherwise- without them -warning: implicit definition of strlen and others: #include <stdio.h> #include <string.h> char buf_printf[100]; //max printf length #define printfx(f_, ...) snprintf(buf_printf, 100, (f_), ##__VA_ARGS__); \ HAL_UART_Transmit(&huart2, (uint8_t*)buf_printf, strlen(buf_printf), 1000); //... /*USER CODE END PFP*/ |
używamy prawie jak printf:
1 | printfx("%d %s %X", 10, "aa", 12); |
Liczby zmiennoprzecinkowe %f, double
Niestety standardowo obsługa liczb zmiennoprzecinkowych jest wyłączona (można zadeklarować, skompiluje się, ale nic nie wypisze), aby ją włączyć należy wejść w opcje:
- Project -> Propeties
- C/C++ Build
- Settings
- Tool Settings (po prawej zakładka)
- MCU Settings
- Runtime Library: (zmienić na) Standard C
- Zaznaczyć OBA checkboxy poniżej: Use float… ,Use float….
- Apply
UWAGA! Nie włączajcie obsługi tych liczb do czasu, gdy będą potrzebne. Te operacje trwają długo w porównaniu do typów w stylu uint32_t. CPU w PC ma specjalną jednostkę zmiennoprzecinkową.