Jadi minggu lalu saya telah bekerja untuk mendapatkan pesan UART yang dikirim dari STM32F407 dan membacanya di laptop saya melalui kabel RS232 ugreen ke USB menggunakan rayap.
Saya telah menggunakan STMCube untuk menghasilkan kode dan menambahkannya dengan membaca instruksi yang relevan di bagian atas file "stm32f4xx_hal_uart.c" (dan menonton banyak video dan membaca online).
Saya telah memeriksa pesan yang dikirim pada osiloskop dan cocok dengan representasi ASCII-nya.
Misalnya saya mengirim 'Q' yaitu 0101 0001, saya menerima 'W' yaitu 0101 0111. Pembacaan pada ruang lingkup menunjukkan:
Output rayap untuk sinyal yang sama seperti yang ditampilkan pada osiloskop.
Saya telah mengkonfirmasi baud rate / parity / HWcontrol cocok dengan rayap dan dalam kode saya.
Untuk menerima karakter yang benar, saya telah mencoba menurunkan dan meningkatkan baud rate.
Saya sudah mencoba set karakter yang berbeda untuk mencoba menemukan pola yang menyebabkan karakter yang salah ditampilkan.
Selain itu saya telah mencoba berbagai terminal seperti pada Putty atau Teraterm.
1
simbol dengan latar belakang kuning di sebelah kiri jejak - itu tingkat 0V) dan kemudian pulsa di bawah 0V. Itu tidak akan benar untuk sinyal logika langsung dari STM32 dan, memang, itu tidak benar. Melihat di sudut kiri bawah, Anda telah mengatur saluran 1 ke kopling AC (itu~
simbol yang Anda lihat di sana). Sinyal benar-benar idle tinggi dan berdenyut di sekitar 0V. Gunakan kopling DC untuk tampilan yang sehat dari sinyal itu.Jawaban:
Anda telah melewatkan detail utama RS232. Tingkat logika adalah sebagai berikut:
Gambar 1. Level sinyal RS232. Sumber: Wikimedia Commons .
Untuk mengkonversi dari logika TTL (5 V) ke RS232 diperlukan driver. Chip seperti MAX232 melakukan inversi level logika dan meningkatkan voltase untuk Anda.
Dimungkinkan untuk "menipu" kadang-kadang dan memasukkan sinyal TTL ke input RS232 asalkan level logika dibalik. Keandalan metode ini tergantung pada chip yang digunakan pada input RS232.
Gambar 2. Bentuk gelombang yang ditransmisikan. Di atas adalah pola bit dari'Q 'yang Anda kirimkan. Di bagian bawah adalah bagaimana input RS232 membacanya.
Perhatikan bahwa input RS232 mencari tepi positif untuk menunjukkan bit mulai. Ini tidak terjadi sampai bit kedua dari data Anda sehingga semuanya sesudahnya adalah sedikit ke kanan dan terbalik seperti yang dilihat penerima. Jika beruntung, MSB Anda adalah tingkat logika yang benar untuk bit berhenti sehingga penerima menafsirkannya sebagai bingkai yang valid, mendekodekannya dan menampilkan 'W'.
Untuk tujuan pengujian Anda dapat membalikkan output TTL Anda. Ini mungkin akan berfungsi karena "berfungsi" saat ini.
Gambar 3. Chip MAX232 menggunakan kapasitor di sirkuit pompa pengisian untuk meningkatkan pasokan 5 V untuk level RS232.
Untuk keandalan, tambahkan chip MAX232 untuk mengirim dan menerima sinyal level RS232 yang tepat.
sumber
Mempertimbangkan angkut pendek dan laju bit rendah 9600, level TTL dan CMOS berfungsi dengan baik. Masalahnya fasih rinci oleh @ Transistor adalah bahwa data UART adalah logika negatif 0 ~ 5V dan RS-232 adalah logika positif +/- Vf antara +/- 3 dan +/- 15V (?)
Karena itu seperti yang ia sarankan, inverter akan berfungsi.
Masalahnya bukan masalah laju kesalahan bit (BER) atau integritas sinyal, tetapi logika terbalik.
Juga, "zona abu-abu" adalah untuk margin kebisingan jarak jauh. Ini bukan <+/- 3V untuk Anda karena kabel Anda pendek. Ambang logika aktual RS-232 Rx persis sama dengan TTL lama (dua tetes Vbe) atau 1,4V +/- 20% (?) Toleransi.
Mereka menyebutnya zona abu-abu untuk memenuhi semua jarak dan spesifikasi baud rate karena gangguan kebisingan dan dering tepi.
Untuk kabel yang lebih panjang, dapatkan MAX232. Variasi mungkin tergantung pada kecepatan dan fitur tegangan.
sumber