Perpustakaan AsyncUDP_STM32
Daftar isi
- Perubahan Penting dari v1.3.0
- Mengapa kita memerlukan perpustakaan AsyncUDP_STM32 ini
- Fitur
- Mengapa Async lebih baik
- Dewan yang saat ini didukung
- log perubahan
- Prasyarat
- Instalasi
- Gunakan Manajer Perpustakaan Arduino
- Instalasi Manual
- Kode VS & PlatformIO
- Patch Paket
- 1. Untuk papan STM32 menggunakan LAN8720
- 2. Untuk papan STM32 menggunakan Serial1
- CARA Memperbaiki Kesalahan Tautan
Multiple Definitions
- CARA Menyiapkan Klien UDP Async
- CARA menggunakan STM32F4 dengan LAN8720
- 1. Pengkabelan
- 2. Program HOWTO menggunakan STLink V-2 atau V-3
- 3. CARA menggunakan Port Serial untuk Debugging
- Contoh
- 1. Klien AsyncUDPC
- 2. Klien AsyncUdpNTPC
- 3. AsyncUdpSendReceive
- 4. Server AsyncUDPS
- 5. Server Multicast AsyncUDP
- 6. AsyncUDPClient_LAN8720
- 7. Klien AsyncUdpNTPC_LAN8720
- 8.AsyncUdpSendReceive_LAN8720
- 9. AsyncUDPServer_LAN8720
- 10. AsyncUDP MulticastServer_LAN8720
- 11. Proyek multiFile Baru
- 12. multiFileProject_LAN8720 Baru
- Contoh AsyncUdpNTPClient
- 1. File AsyncUdpNTPClient.ino
- 2. File mendefinisikan.h
- Contoh Keluaran Terminal Debug
- 1. AsyncUdpNTPClient pada STM32F7 NUCLEO_F767ZI dengan LAN8742A Ethernet menggunakan STM32Ethernet Library
- 2. AsyncUdpNTPClient_LAN8720 pada STM32F4 BLACK_F407VE dengan LAN8720 Ethernet menggunakan STM32Ethernet Library
- Men-debug
- Pemecahan masalah
- Masalah
- UNTUK DILAKUKAN
- SELESAI
- Kontribusi dan Terima Kasih
- Berkontribusi
- Lisensi
- Hak cipta
Perubahan Penting dari v1.3.0
Silakan lihat CARA Memperbaiki Kesalahan Tautan Multiple Definitions
Untuk papan Generic STM32F4 series
, seperti STM32F407VE, menggunakan LAN8720, silakan gunakan STM32 core v2.2.0
karena melanggar core v2.3.0
menyebabkan kesalahan kompilasi. Akan diperbaiki dalam waktu dekat.
Mengapa kita memerlukan perpustakaan AsyncUDP_STM32 ini
Fitur
Pustaka AsyncUDP_STM32 ini adalah pustaka UDP yang sepenuhnya asinkron, dirancang untuk lingkungan jaringan multi-koneksi yang bebas masalah, untuk papan STM32 yang menggunakan LAN8720 atau Ethernet LAN8742A bawaan. Pustaka ini mudah digunakan dan mencakup dukungan untuk lingkungan Unicast, Broadcast, dan Multicast.
Perpustakaan ini didasarkan pada, dimodifikasi dari:
- ESPAsyncUDP karya Hristo Gochkov
untuk menerapkan fitur asinkron yang lebih baik dan lebih cepat dari Perpustakaan ESPAsyncUDP yang kuat ke dalam papan STM32 menggunakan LAN8720 atau Ethernet LAN8742A bawaan.
Mengapa Async lebih baik
- Menggunakan jaringan asynchronous berarti Anda dapat menangani lebih dari satu koneksi secara bersamaan
- Anda dipanggil setelah permintaan siap dan diuraikan
- Saat Anda mengirimkan respons, Anda segera siap menangani koneksi lain sementara server menangani pengiriman respons di latar belakang
- Kecepatannya OMG
- Setelah terhubung ke server UDP sebagai Klien Async, Anda segera siap untuk menangani koneksi lain sementara Klien menerima paket respons UDP di latar belakang.
- Anda tidak perlu memeriksa secara ketat loop() kedatangan paket respons UDP untuk memprosesnya.
Dewan yang saat ini didukung
- Papan STM32 dengan Ethernet LAN8742A bawaan seperti:
- Nukleo-144 (F429ZI, F767ZI)
- Penemuan (STM32F746G-PENEMUAN)
- Semua papan STM32 (STM32F/L/H/G/WB/MP1) dengan Flash 32K+, dengan Ethernet Bawaan
- Lihat Dukungan dan Hasil Tes EthernetWebServer_STM32
- Papan STM32 menggunakan Ethernet LAN8720 seperti :
- Nukleo-144 (F429ZI, NUCLEO_F746NG, NUCLEO_F746ZG, NUCLEO_F756ZG)
- Penemuan (DISCO_F746NG)
- Papan STM32F4 (BLACK_F407VE, BLACK_F407VG, BLACK_F407ZE, BLACK_F407ZG, BLACK_F407VE_Mini, DIYMORE_F407VGT, FK407M1)
Prasyarat
-
Arduino IDE 1.8.19+
untuk Arduino. -
Arduino Core for STM32 v2.3.0+
untuk papan STM32. -
STM32Ethernet library v1.3.0+
untuk Ethernet LAN8742A bawaan pada (Nucleo-144, Discovery). -
LwIP library v2.1.2+
untuk Ethernet LAN8742A bawaan pada (Nucleo-144, Discovery).
Instalasi
Cara yang disarankan untuk menginstal adalah dengan:
Gunakan Manajer Perpustakaan Arduino
Cara terbaik adalah dengan menggunakan Arduino Library Manager
. Cari AsyncUDP_STM32
, lalu pilih/install versi terbaru. Anda juga dapat menggunakan tautan ini untuk petunjuk lebih detail.
Instalasi Manual
- Navigasikan ke halaman AsyncUDP_STM32.
- Unduh rilis terbaru
AsyncUDP_STM32-master.zip
. - Ekstrak file zip ke direktori
AsyncUDP_STM32-master
- Salin seluruh folder
AsyncUDP_STM32-master
ke direktori perpustakaan Arduino seperti ~/Arduino/libraries/
.
Kode VS & PlatformIO:
- Instal Kode VS
- Instal PlatformIO
- Instal perpustakaan AsyncUDP_STM32 dengan menggunakan Library Manager. Cari AsyncUDP_STM32 di Perpustakaan Penulis Platform.io
- Gunakan file platformio.ini yang disertakan dari contoh untuk memastikan bahwa semua perpustakaan dependen akan diinstal secara otomatis. Silakan kunjungi dokumentasi untuk opsi dan contoh lainnya di File Konfigurasi Proyek
Patch Paket
1. Untuk papan STM32 menggunakan LAN8720
Untuk papan Generic STM32F4 series
, seperti STM32F407VE
, menggunakan LAN8720
, silakan gunakan STM32 core v2.2.0
karena melanggar core v2.3.0
menyebabkan kesalahan kompilasi.
Untuk menggunakan LAN8720 pada beberapa papan STM32
- Nukleo-144 (F429ZI, NUCLEO_F746NG, NUCLEO_F746ZG, NUCLEO_F756ZG)
- Penemuan (DISCO_F746NG)
- Papan STM32F4 (BLACK_F407VE, BLACK_F407VG, BLACK_F407ZE, BLACK_F407ZG, BLACK_F407VE_Mini, DIYMORE_F407VGT, FK407M1)
Anda harus menyalin file stm32f4xx_hal_conf_default.h dan stm32f7xx_hal_conf_default.h ke direktori STM32 stm32 (~/.arduino15/packages/STM32/hardware/stm32/2.2.0/system) untuk menimpa file lama.
Misalkan versi inti STM32 stm32 adalah 2.2.0. File-file ini harus disalin ke direktori:
-
~/.arduino15/packages/STM32/hardware/stm32/2.2.0/system/STM32F4xx/stm32f4xx_hal_conf_default.h
untuk STM32F4. -
~/.arduino15/packages/STM32/hardware/stm32/2.2.0/system/STM32F7xx/stm32f7xx_hal_conf_default.h
untuk Nucleo-144 STM32F7.
Setiap kali versi baru diinstal, ingatlah untuk menyalin file ini ke direktori versi baru. Misalnya, versi baru adalah x.yy.zz, file-file ini harus disalin ke direktori yang sesuai:
-
~/.arduino15/packages/STM32/hardware/stm32/x.yy.zz/system/STM32F4xx/stm32f4xx_hal_conf_default.h
- `~/.arduino15/packages/STM32/hardware/stm32/x.yy.zz/system/STM32F7xx/stm32f7xx_hal_conf_default.h
2. Untuk papan STM32 menggunakan Serial1
Untuk menggunakan Serial1 pada beberapa papan STM32 tanpa definisi Serial1 (Nucleo-144 NUCLEO_F767ZI, Nucleo-64 NUCLEO_L053R8, dll.) , Anda harus menyalin file varian STM32.h ke direktori STM32 stm32 (~/.arduino15/packages/STM32/ perangkat keras/stm32/2.3.0). Anda harus memodifikasi file yang sesuai dengan papan Anda, ini hanya ilustrasi bagaimana melakukannya.
Misalkan versi inti STM32 stm32 adalah 2.3.0. File-file ini harus disalin ke direktori:
-
~/.arduino15/packages/STM32/hardware/stm32/2.3.0/variants/NUCLEO_F767ZI/variant.h
untuk Nucleo-144 NUCLEO_F767ZI. -
~/.arduino15/packages/STM32/hardware/stm32/2.3.0/variants/NUCLEO_L053R8/variant.h
untuk Nucleo-64 NUCLEO_L053R8.
Setiap kali versi baru diinstal, ingatlah untuk menyalin file ini ke direktori versi baru. Misalnya, versi baru adalah x.yy.zz, file-file ini harus disalin ke direktori yang sesuai:
-
~/.arduino15/packages/STM32/hardware/stm32/x.yy.zz/variants/NUCLEO_F767ZI/variant.h
-
~/.arduino15/packages/STM32/hardware/stm32/x.yy.zz/variants/NUCLEO_L053R8/variant.h
CARA Memperbaiki Kesalahan Tautan Multiple Definitions
Implementasi perpustakaan saat ini, menggunakan xyz-Impl.h
alih-alih standar xyz.cpp
, mungkin menciptakan kesalahan Multiple Definitions
Linker tertentu dalam kasus penggunaan tertentu.
Anda dapat memasukkan file .hpp
ini
// Can be included as many times as necessary, without `Multiple Definitions` Linker Error
# include " AsyncUDP_STM32.hpp " // https://github.com/khoih-prog/AsyncUDP_STM32
dalam banyak file. Namun pastikan untuk menggunakan file .h
berikut hanya dalam 1 file .h
, .cpp
atau .ino
, yang tidak boleh disertakan dalam file lain , untuk menghindari Kesalahan Tautan Multiple Definitions
// To be included only in main(), .ino with setup() to avoid `Multiple Definitions` Linker Error
# include " AsyncUDP_STM32.h " // https://github.com/khoih-prog/AsyncUDP_STM32
Periksa contoh multiFileProject baru untuk demo HOWTO
.
CARA Menyiapkan Klien UDP Async
# include < LwIP.h >
# include < STM32Ethernet.h >
# include < AsyncUDP_STM32.h >
byte mac[] = { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x01 };
IPAddress timeWindowsCom = IPAddress( 13 , 86 , 101 , 172 );
# define NTP_REQUEST_PORT 123
const int NTP_PACKET_SIZE = 48 ; // NTP timestamp is in the first 48 bytes of the message
byte packetBuffer[NTP_PACKET_SIZE]; // buffer to hold incoming and outgoing packets
// A UDP instance to let us send and receive packets over UDP
AsyncUDP Udp;
// send an NTP request to the time server at the given address
void createNTPpacket ( void )
{
...
}
void sendNTPPacket ( void )
{
createNTPpacket ();
// Send unicast
Udp. write (packetBuffer, sizeof (packetBuffer));
}
void parsePacket (AsyncUDPPacket packet)
{
...
}
void setup ()
{
...
// NTP requests are to port NTP_REQUEST_PORT = 123
if (Udp. connect (timeWindowsCom, NTP_REQUEST_PORT))
{
// Setting up Async packet Handler
Udp. onPacket ([](AsyncUDPPacket packet)
{
parsePacket (packet);
});
}
}
void loop ()
{
sendNTPPacket ();
// wait 60 seconds before asking for the time again
delay ( 60000 );
}
CARA menggunakan STM32F4 dengan LAN8720
1. Pengkabelan
Ini adalah Wiring untuk STM32F4 (BLACK_F407VE, dll) menggunakan LAN8720
LAN8720 PHY | <---> | STM32F4 |
---|
TX1 | <---> | PB_13 |
TX_EN | <---> | PB_11 |
TX0 | <---> | PB_12 |
RX0 | <---> | PC_4 |
RX1 | <---> | PC_5 |
tidak/RETCLK | <---> | PA_1 |
CRS | <---> | PA_7 |
MDIO | <---> | PA_2 |
MDC | <---> | PC_1 |
GND | <---> | GND |
VCC | <---> | +3.3V |
2. Program HOWTO menggunakan STLink V-2 atau V-3
Hubungkan sebagai berikut. Untuk memprogramnya, gunakan STM32CubeProgrammer atau Arduino IDE dengan
- Dukungan AS(S)ART: "Diaktifkan (Serial umum)"
- Metode Unggah : "STM32CubeProgrammer (SWD)"
Tautan ST | <---> | STM32F4 |
---|
SWCLK | <---> | SWCLK |
SWDIO | <---> | SWDIO |
Pertama | <---> | pertama |
GND | <---> | GND |
5v | <---> | 5V |
3. CARA menggunakan Port Serial untuk Debugging
Hubungkan FDTI (USB ke Serial) sebagai berikut:
FDTI | <---> | STM32F4 |
---|
RX | <---> | TX=PA_9 |
terima kasih | <---> | RX=PA_10 |
GND | <---> | GND |
Contoh
- Klien AsyncUDPC
- Klien AsyncUdpNTPC
- AsyncUdpSendReceive
- Server AsyncUDPS
- Server Multicast AsyncUDP
- AsyncUDPClient_LAN8720
- AsyncUdpNTPClient_LAN8720
- AsyncUdpSendReceive_LAN8720
- AsyncUDPServer_LAN8720
- AsyncUDPMulticastServer_LAN8720
- multiFileProject Baru
- multiFileProject_LAN8720 Baru
Contoh AsyncUdpNTPClient
1. File AsyncUdpNTPClient.ino
| # sertakan " mendefinisikan.h " |
| # sertakan < waktu.h > |
| |
| // 0.ca.pool.ntp.org |
| Alamat IP timeServerIP = Alamat IP ( 208 , 81 , 1 , 244 ); |
| // waktu.nist.gov |
| // Alamat IP timeServerIP = Alamat IP (132, 163, 96, 1); |
| |
| # tentukan NTP_REQUEST_PORT 123 |
| |
| // char timeServer[] = "time.nist.gov"; // server NTP |
| char timeServer[] = " 0.ca.pool.ntp.org " ; |
| |
| konstan ke dalam NTP_PACKET_SIZE = 48 ; // Stempel waktu NTP ada di 48 byte pertama pesan |
| |
| byte paketBuffer[NTP_PACKET_SIZE]; // buffer untuk menampung paket masuk dan keluar |
| |
| // Sebuah instance UDP yang memungkinkan kita mengirim dan menerima paket melalui UDP |
| AsyncUDP Udp; |
| |
| // mengirim permintaan NTP ke server waktu di alamat yang diberikan |
| batal buatNTPpacket ( batal ) |
| { |
| Serial. println ( " ============= buatNTPpacket ============= " ); |
| |
| // atur semua byte di buffer ke 0 |
| memset (packetBuffer, 0 , NTP_PACKET_SIZE); |
| // Inisialisasi nilai yang diperlukan untuk membentuk permintaan NTP |
| // (lihat URL di atas untuk detail paket) |
| |
| paketBuffer[ 0 ] = 0b11100011 ; // LI, Versi, Mode |
| paketBuffer[ 1 ] = 0 ; // Stratum, atau jenis jam |
| paketBuffer[ 2 ] = 6 ; // Interval Pemungutan Suara |
| paketBuffer[ 3 ] = 0xEC ; // Presisi Jam Rekan |
| |
| // 8 byte nol untuk Penundaan Root & Dispersi Root |
| paketBuffer[ 12 ] = 49 ; |
| paketBuffer[ 13 ] = 0x4E ; |
| paketBuffer[ 14 ] = 49 ; |
| paketBuffer[ 15 ] = 52 ; |
| } |
| |
| void parsePacket (paket AsyncUDPPacket) |
| { |
| struktur tm ts; |
| karakter buf[ 80 ]; |
| |
| memcpy (packetBuffer, packet.data (), sizeof (packetBuffer)); |
| |
| Serial. print ( " Jenis Paket UDP yang Diterima: " ); |
| Serial. println ( packet.isBroadcast () ? " Broadcast " : packet.isMulticast () ? " Multicast " : " Unicast " ); |
| Serial. cetak ( " Dari : " ); |
| Serial. print ( packet.remoteIP ()); |
| Serial. cetak ( " : " ); |
| Serial. print ( packet.remotePort ()); |
| Serial. cetak ( " , Kepada : " ); |
| Serial. print ( packet.localIP ()); |
| Serial. cetak ( " : " ); |
| Serial. print ( packet.localPort ()); |
| Serial. print ( " , Panjang : " ); |
| Serial. print ( paket.panjang ()); |
| Serial. println (); |
| |
| unsigned long highWord = kata (packetBuffer[ 40 ], packetBuffer[ 41 ]); |
| unsigned long lowWord = kata (packetBuffer[ 42 ], packetBuffer[ 43 ]); |
| |
| // gabungkan empat byte (dua kata) menjadi bilangan bulat panjang |
| // ini waktu NTP (detik sejak 1 Januari 1900): |
| unsigned long secs Since1900 = highWord << 16 | kata rendah; |
| |
| Serial. print ( F ( " Detik sejak 1 Januari 1900 = " )); |
| Serial. println (detik Sejak 1900); |
| |
| // sekarang ubah waktu NTP menjadi )waktu sehari-hari: |
| Serial. print ( F ( " Epoch/Waktu Unix = " )); |
| |
| // Waktu Unix dimulai pada 1 Januari 1970. Dalam hitungan detik, yaitu 2208988800: |
| const unsigned long tujuh puluh Tahun = 2208988800UL ; |
| |
| // kurangi tujuh puluh tahun: |
| unsigned long epoch = detik Sejak 1900 - tujuh puluh Tahun; |
| waktu_t zaman_t = zaman; // detikSejak1900 - tujuh puluhTahun; |
| |
| // cetak waktu Unix: |
| Serial. println (zaman); |
| |
| // cetak jam, menit dan detik: |
| Serial. print ( F ( " Waktu UTC/GMT adalah " )); // UTC adalah waktu di Greenwich Meridian (GMT) |
| |
| ts = * waktu lokal (& epoch_t ); |
| strftime (buf, sizeof (buf), " %a %Y-%m-%d %H:%M:%S %Z " , &ts); |
| Serial. println (buf); |
| } |
| |
| batal kirimNTPPacket ( batal ) |
| { |
| buatNTPpacket (); |
| // Kirim unicast |
| Udp. tulis (packetBuffer, sizeof (packetBuffer)); |
| } |
| |
| batalkan pengaturan () |
| { |
| Serial. mulai ( 115200 ); |
| sementara (!Serial); |
| |
| Serial. print ( " n Mulai AsyncUdpNTPClient di " ); Serial. println (BOARD_NAME); |
| Serial. println (ASYNC_UDP_STM32_VERSION); |
| |
| # jika (_ASYNC_UDP_STM32_LOGLEVEL_ > 2) |
| Serial. print ( " STM32 Core versi v " ); Serial. cetak (STM32_CORE_VERSION_MAJOR); |
| Serial. mencetak ( " . " ); Serial. cetak (STM32_CORE_VERSION_MINOR); |
| Serial. mencetak ( " . " ); Serial. println (STM32_CORE_VERSION_PATCH); |
| #endif |
| |
| // memulai koneksi ethernet dan server |
| // Gunakan mac acak |
| indeks uint16_t = mili () % NUMBER_OF_MAC; |
| |
| // Gunakan IP Statis |
| // Ethernet.begin(mac[index], ip); |
| // Gunakan IP dinamis DHCP dan mac acak |
| Ethernet. mulai (mac[ indeks ]); |
| |
| // Anda sudah terhubung sekarang, jadi cetak datanya |
| Serial. print ( F ( " Anda terhubung ke jaringan, IP = " )); |
| Serial. println ( Ethernet.localIP ()); |
| |
| // Permintaan NTP ke port NTP_REQUEST_PORT = 123 |
| if ( Udp.connect (timeServerIP, NTP_REQUEST_PORT)) |
| // jika (Udp.connect(timeServer, NTP_REQUEST_PORT)) |
| { |
| Serial. println ( " UDP tersambung " ); |
| |
| Udp. onPacket ([](Paket AsyncUDPPacket) |
| { |
| parsePacket (paket); |
| }); |
| } |
| } |
| |
| lingkaran kosong () |
| { |
| kirimNTPPacket (); |
| |
| // tunggu 60 detik sebelum menanyakan waktu lagi |
| penundaan ( 60000 ); |
| } |
2. File mendefinisikan.h
| /* |
| Saat ini dukungan |
| 1) Papan STM32 dengan Ethernet internal (untuk menggunakan USE_BUILTIN_ETHERNET = true) seperti: |
| - Nukleo-144 (F429ZI, F767ZI) |
| - Penemuan (STM32F746G-PENEMUAN) |
| - Papan STM32 (STM32F/L/H/G/WB/MP1) dengan Flash 32K+, dengan Ethernet Bawaan, |
| - Lihat Cara Menggunakan Ethernet Bawaan di (https://github.com/khoih-prog/EthernetWebServer_STM32/issues/1) |
| 2) Papan STM32F/L/H/G/WB/MP1 (dengan Flash 32+K) yang menjalankan pelindung ENC28J60 (untuk menggunakan USE_BUILTIN_ETHERNET = false) |
| 3) Papan STM32F/L/H/G/WB/MP1 (dengan Flash 32+K) yang menjalankan pelindung W5x00 |
| */ |
| |
| #ifndef mendefinisikan_h |
| #define mendefinisikan_h |
| |
| #jika !( ditentukan( STM32F0 ) || ditentukan( STM32F1 ) || ditentukan( STM32F2 ) || ditentukan( STM32F3 ) || ditentukan( STM32F4 ) || ditentukan( STM32F7 ) || |
| ditentukan( STM32L0 ) || ditentukan( STM32L1 ) || ditentukan( STM32L4 ) || ditentukan( STM32H7 ) || ditentukan( STM32G0 ) || ditentukan( STM32G4 ) || |
| ditentukan( STM32WB ) || ditentukan( STM32MP1 ) ) |
| #error Kode ini dirancang untuk berjalan pada platform STM32F/L/H/G/WB/MP1! Silakan periksa Alat->Pengaturan papan Anda. |
| #endif |
| |
| #define ASYNC_UDP_STM32_DEBUG_PORT Serial |
| |
| // Gunakan dari 0 hingga 4. Angka yang lebih tinggi, pesan debug yang lebih banyak, dan penggunaan memori. |
| #tentukan _ASYNC_UDP_STM32_LOGLEVEL_ 1 |
| |
| |
| #jika ditentukan ( STM32F0 ) |
| #peringatan Papan STM32F0 dipilih |
| #define BOARD_TYPE "STM32F0" |
| #elif ditentukan ( STM32F1 ) |
| #peringatan Papan STM32F1 dipilih |
| #define BOARD_TYPE "STM32F1" |
| #elif ditentukan ( STM32F2 ) |
| #peringatan Papan STM32F2 dipilih |
| #define BOARD_TYPE "STM32F2" |
| #elif ditentukan ( STM32F3 ) |
| #peringatan Papan STM32F3 dipilih |
| #define BOARD_TYPE "STM32F3" |
| #elif ditentukan ( STM32F4 ) |
| #peringatan Papan STM32F4 dipilih |
| #define BOARD_TYPE "STM32F4" |
| #elif ditentukan ( STM32F7 ) |
| #peringatan Papan STM32F7 dipilih |
| #define BOARD_TYPE "STM32F7" |
| #elif ditentukan ( STM32L0 ) |
| #peringatan Papan STM32L0 dipilih |
| #define BOARD_TYPE "STM32L0" |
| #elif ditentukan ( STM32L1 ) |
| #peringatan Papan STM32L1 dipilih |
| #define BOARD_TYPE "STM32L1" |
| #elif ditentukan ( STM32L4 ) |
| #peringatan Papan STM32L4 dipilih |
| #define BOARD_TYPE "STM32L4" |
| #elif ditentukan ( STM32H7 ) |
| #peringatan Papan STM32H7 dipilih |
| #definisikan BOARD_TYPE "STM32H7" |
| #elif ditentukan ( STM32G0 ) |
| #peringatan Papan STM32G0 dipilih |
| #define BOARD_TYPE "STM32G0" |
| #elif ditentukan ( STM32G4 ) |
| #peringatan Papan STM32G4 dipilih |
| #define BOARD_TYPE "STM32G4" |
| #elif ditentukan ( STM32WB ) |
| #peringatan Papan STM32WB dipilih |
| #define BOARD_TYPE "STM32WB" |
| #elif ditentukan( STM32MP1 ) |
| #peringatan Papan STM32MP1 dipilih |
| #define BOARD_TYPE "STM32MP1" |
| #kalau tidak |
| #peringatan STM32 papan tidak dikenal dipilih |
| #define BOARD_TYPE "STM32 Tidak Diketahui" |
| #endif |
| |
| #ifndef BOARD_NAME |
| #tentukan BOARD_NAME BOARD_TYPE |
| #endif |
| |
| #termasuk <LwIP.h> |
| #sertakan <STM32Ethernet.h> |
| |
| #termasuk <AsyncUDP_STM32.h> |
| |
| // Masukkan alamat MAC dan alamat IP untuk pengontrol Anda di bawah. |
| #tentukan NUMBER_OF_MAC 20 |
| |
| byte mac [][ NUMBER_OF_MAC ] = |
| { |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x01 }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x02 }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x03 }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x04 }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x05 }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x06 }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x07 }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x08 }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x09 }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x0A }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x0B }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x0C }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x0D }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x0E }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x0F }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x10 }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x11 }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x12 }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x13 }, |
| { 0xDE , 0xAD , 0xBE , 0xEF , 0x32 , 0x14 }, |
| }; |
| |
| // Pilih alamat IP statis sesuai dengan jaringan lokal Anda |
| IPAlamat IP ( 192 , 168 , 2 , 232 ); |
| |
| #endif //mendefinisikan_h |
Contoh Keluaran Terminal Debug
1. AsyncUdpNTPClient pada STM32F7 NUCLEO_F767ZI dengan LAN8742A Ethernet menggunakan STM32Ethernet Library
Ini adalah keluaran debug terminal saat menjalankan AsyncUdpNTPClient di STM32F7 Nucleo-144 NUCLEO_F767ZI. . Ini terhubung ke NTP Server time.windows.com (IP=13.86.101.172) menggunakan perpustakaan AsyncUDP_STM32, dan meminta waktu NTP setiap 60 detik. Paket tersebut kemudian diterima dan diproses secara asinkron untuk mencetak waktu UTC/GMT saat ini.
Start AsyncUdpNTPClient on NUCLEO_F767ZI
AsyncUdp_STM32 v1 .3.0
STM32 Core version v2 .3.0
You ' re connected to the network, IP = 192.168.2.157
UDP connected
============= createNTPpacket =============
Received UDP Packet Type: Unicast
From: 208.81.1.244:123, To: 192.168.2.157:62510, Length: 48
Seconds since Jan 1 1900 = 3864858437
Epoch/Unix time = 1655869637
The UTC/GMT time is Wed 2022-06-22 03:47:17 GMT
============= createNTPpacket =============
Received UDP Packet Type: Unicast
From: 208.81.1.244:123, To: 192.168.2.157:62510, Length: 48
Seconds since Jan 1 1900 = 3864858497
Epoch/Unix time = 1655869697
The UTC/GMT time is Wed 2022-06-22 03:48:17 GMT
============= createNTPpacket =============
Received UDP Packet Type: Unicast
From: 208.81.1.244:123, To: 192.168.2.157:62510, Length: 48
Seconds since Jan 1 1900 = 3864858557
Epoch/Unix time = 1655869757
The UTC/GMT time is Wed 2022-06-22 03:49:17 GMT
2. AsyncUdpNTPClient_LAN8720 pada STM32F4 BLACK_F407VE dengan LAN8720 Ethernet menggunakan STM32Ethernet Library
Ini adalah keluaran debug terminal saat menjalankan AsyncUdpNTPClient_LAN8720 di STM32F4 BLACK_F407VE dengan LAN8720 Ethernet menggunakan STM32Ethernet Library . Ini terhubung ke NTP Server time.windows.com (IP=13.86.101.172) menggunakan perpustakaan AsyncUDP_STM32, dan meminta waktu NTP setiap 60 detik. Paket tersebut kemudian diterima dan diproses secara asinkron untuk mencetak waktu UTC/GMT saat ini.
Start AsyncUdpNTPClient_LAN8720 on BLACK_F407VE
AsyncUdp_STM32 v1 .3.0
STM32 Core version v2 .3.0
You ' re connected to the network, IP = 192.168.2.151
UDP connected
============= createNTPpacket =============
Received UDP Packet Type: Unicast
From: 208.81.1.244:123, To: 192.168.2.157:62510, Length: 48
Seconds since Jan 1 1900 = 3864858616
Epoch/Unix time = 1655869816
The UTC/GMT time is Wed 2022-06-22 03:50:16 GMT
============= createNTPpacket =============
Received UDP Packet Type: Unicast
From: 208.81.1.244:123, To: 192.168.2.157:62510, Length: 48
Seconds since Jan 1 1900 = 3864858676
Epoch/Unix time = 1655869876
The UTC/GMT time is Wed 2022-06-22 03:51:16 GMT
============= createNTPpacket =============
Received UDP Packet Type: Unicast
From: 208.81.1.244:123, To: 192.168.2.157:62510, Length: 48
Seconds since Jan 1 1900 = 3864858735
Epoch/Unix time = 1655869935
The UTC/GMT time is Wed 2022-06-22 03:52:15 GMT
Men-debug
Debug diaktifkan secara default di Serial. Untuk menonaktifkan, gunakan level 0
# define ASYNC_UDP_STM32_DEBUG_PORT Serial
// Use from 0 to 4. Higher number, more debugging messages and memory usage.
# define _ASYNC_UDP_STM32_LOGLEVEL_ 0
Anda juga dapat mengubah tingkat debug dari 0 menjadi 4
# define ASYNC_UDP_STM32_DEBUG_PORT Serial
// Use from 0 to 4. Higher number, more debugging messages and memory usage.
# define _ASYNC_UDP_STM32_LOGLEVEL_ 4
Pemecahan masalah
Jika Anda sering mengalami kesalahan kompilasi, Anda mungkin perlu menginstal versi Arduino IDE yang lebih baru, inti Arduino STM32
atau pustaka yang bergantung.
Terkadang, perpustakaan hanya akan berfungsi jika Anda memperbarui inti STM32
ke versi terbaru karena saya selalu menggunakan inti/perpustakaan terbaru.
Masalah
Kirim masalah ke: Masalah AsyncUDP_STM32
UNTUK DILAKUKAN
- Perbaiki bug. Tambahkan peningkatan
- Tambahkan dukungan ke lebih banyak pelindung Ethernet / WiFi
- Tambahkan dukungan ke lebih banyak papan STM32.
SELESAI
- Port awal ke STM32 menggunakan LAN8742A Etnernet bawaan. Diuji pada STM32F7 Nukleo-144 F767ZI .
- Tambahkan lebih banyak contoh.
- Tambahkan fitur debugging.
- Tambahkan dukungan ke Ethernet LAN8720 menggunakan perpustakaan STM32Ethernet, untuk papan seperti Nucleo-144 (F429ZI, NUCLEO_F746NG, NUCLEO_F746ZG, NUCLEO_F756ZG), papan Discovery (DISCO_F746NG) dan STM32F4 (BLACK_F407VE, BLACK_F407VG, BLACK_F407ZE, BLACK_F407ZG, BLACK_F407VE_Mini, DIYMORE_F407VGT, FK407M1)
- Perbaiki kesalahan tautan multi-definisi
- Perbarui contoh untuk inti STM32 baru v2.3.0
- Tambahkan contoh multiFileProject dan multiFileProject_LAN8720 ke demo proyek multifile untuk menghindari kesalahan linker
multiple-definitions
Kontribusi dan Terima Kasih
- Berdasarkan dan dimodifikasi dari ESPAsyncUDP karya Hristo Gochkov. Terima kasih banyak kepada Hristo Gochkov untuk Perpustakaan ESPAsyncUDP yang hebat
- Mengandalkan Perpustakaan LwIP STM32duino Frederic Pillon.
- Terima kasih atas kerja bagus Miguel Wisintainer yang telah mengerjakan, mengembangkan, men-debug, dan menguji.
️️Hristo Gochkov
| ️ Frederic Pilon
| tcpipchip
|
Berkontribusi
Jika Anda ingin berkontribusi pada proyek ini:
- Laporkan bug dan kesalahan
- Mintalah peningkatan
- Buat masalah dan tarik permintaan
- Beritahu orang lain tentang perpustakaan ini
Lisensi
- Perpustakaan ini dilisensikan di bawah MIT
Hak cipta
Hak Cipta (c) 2020- Khoi Hoang