RS-232 Linuxis

Näide Ubuntu baasil

Eeldused: minicom terminali emulaator Kui programm puudub, siis tuleks see paigaldada käsuga: sudo apt-get install minicom

Ühendada mikrokontroller mõne USB-COM konverteriga ja kontrollida, kas see süsteemi poolt ka leiti: dmesg | grep tty

tulemuseks võiks olla midagi sellist:

[    0.000000] console [tty0] enabled
[ 3823.820524] usb 5-1: pl2303 converter now attached to ttyUSB0
[ 3937.382589] usb 5-2: FTDI USB Serial Device converter now attached to ttyUSB1
[ 4152.680434] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0
[ 4159.873377] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1
[ 4164.285887] usb 5-2: FTDI USB Serial Device converter now attached to ttyUSB0
[ 4215.343098] usb 5-1: pl2303 converter now attached to ttyUSB1
[ 4633.056395] pl2303 ttyUSB1: pl2303 converter now disconnected from ttyUSB1
[ 4659.016240] usb 5-1: pl2303 converter now attached to ttyUSB1

Siit tuleks teha kindlaks milline port on omistatud USB konverterile.

Kui näitekood on mikrokontrollerisse laetud tuleks avada minicom programm (soovitavalt root õigustes): sudo minicom -s

Esmalt tuleks konfigureerida ühendus:

Pordi määramiseks vajutada klahvile A, määrata ühendus, näiteks /dev/ttyUSB1 ja pordi parameetrid Bps/Par/Bits, näiteks: 115200 8N1 Väljumiseks vajutada ESC klahvi.

Peale valikut Exit initsialiseerib minicom pordi ühenduse.

Mikrokontroller tuleb ühendada arvuti USB konverteriga kasutades rist kaablit (tuntud ka kui 0-modem kaabel).

Allolev programm kirjutab igale uart porti saadetud sümbolile vastuseks tervitusteksti ja inverteerib plaadil oleva LED-i.

Kui on soov näha ka oma klhvi vajutusi tuleks aktiveerida kohalik kaja: CTRL+A E

#include <homelab/usart.h>
#include <homelab/delay.h>
#include <homelab/pin.h>
 
 
usart port = USART(0);      //COM connector
pin led = PIN(B, 7);        //red LED on controller board
 
int main (void)
{
    char c;
 
    pin_setup_output(led);  //set led as output
 
    usart_init_async(port,  //USART setup
        USART_DATABITS_8,
        USART_STOPBITS_ONE,
        USART_PARITY_NONE,
        USART_BAUDRATE_ASYNC(115200));
 
    while (1)   //infinite loop
    {
          //if char is sent to controller, read it into c
        if (usart_try_read_char(port, &c))      
        {
            //invert LED
            pin_toggle(led);
            // Write some greetings
            usart_send_string(port, "Tere volts!\r\n"); 
        }
    }
}