Komunikační rozhraní
Komunikační rozhraní
V této sekci jsou zdokumentované funkce MBED API sloužící ke komunikaci s počítačem a externími zařízeními.
Tato třída slouží k využití sériového rozhraní a komunikaci po sériové lince. Ke komunikaci jsou zapotřebí dva piny - RX(recieve data) a TX(transfer data).
#include "byzance.h"
Serial pc(X09, X11);
void init(){
pc.baud(9600); //Nastavení baudové rychlosti
pc.printf("Serial connection\n"); //Send to serial line
}
void loop(){
pc.printf("Hello world\n");
}
Komunikace pomoc SPI (Serial Peripheral Interface), rozlišuje komunikační prvky na Mastra a jeho podřízené jednotky - Slave. Každý Master může obsluhovat několik Slavů tím způsobem, že vyzve jednotku ke komunikaci přepnutím příslušného pinu SS (Slave select) do logické nuly a vyslání dotazu (Bytu). Jednotka Slave poté na tento dotaz odpovídá zpátky. Po ukončení komunikace Master přepne pin SS zpět do logické jedničky. Jednotka Slave nikdy neodesílá žádná data bez výzvy a Master vždy může komunikovat pouze s jedním Slavem najednou. Pro každý Slave má Master jeden příslušný digitální pin SS. Komunikační protokol je blíže vysvětlený například na Wiki.
Příklad demonstruje využití sběrnice SPI pro čtení WHOAMI registru ze zařízení připojeného na sběrnici SPI na X konektoru.
#include "byzance.h"
Serial pc(SERIAL_TX, SERIAL_RX); //For USB use: USBSerial pc(0x1f00, 0x2012, 0x0001, false); //
SPI spi(X14, X12, X10); // mosi, miso, sclk
DigitalOut ss0(X08); // Slave 0 select pin (Sometimes called CS - Chip Select)
void init(){
spi.format(8,3); // 8 bits, high steady state clock, second edge capture
spi.frequency(1000000); // Set clk frequency to 1 MHz
}
void loop(){
ss0 = 0; // Select the device by seting chip select low
int whoami = spi.write(0x00); // Send dummy byte to Slave and save received data
ss0 = 1; // Deselect device
pc.printf("WHOAMI register = 0x%X\n", whoami); //Print the result
Thread::wait(1000);
}
Příklad programu, který reaguje na přijatá data od SPI Mastera přičtením jedničky k přijatému Bytu
#include "byzance.h"
Serial pc(SERIAL_TX, SERIAL_RX);
SPISlave device(X14, X12, X10, X08); // mosi, miso, scl, ss (or CS - Chip select)
void init(){
pc.baud(115200);
}
void loop(){
// React if master send you a message
if(device.receive()) {
uint8_t v = device.read(); // Read byte from master
pc.printf("Byte 0x%X recieved\n",v); // Print it
device.reply(v+1); // Add one to received message and reply with it
}
}
Třída I2C poskytuje funkcionalitu I2C sběrnice v roli master.
Příklad demonstruje jednoduché čtení teploty z teplotního čidla LM75BD.
#include "byzance.h"
Serial pc(SERIAL_TX, SERIAL_RX); //USBSerial pc(0x1f00, 0x2012, 0x0001, false); //
I2C i2c(X07, X06); //sda, scl
const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90
void init(){
i2c.frequency(400000); //set clk frequency to 1 MHz
}
void loop(){
// Read temperature from LM75BD
char cmd[2];
cmd[0] = 0x01;
cmd[1] = 0x00;
i2c.write(addr8bit, cmd, 2);
Thread::wait(500);
cmd[0] = 0x00;
i2c.write(addr8bit, cmd, 1);
i2c.read( addr8bit, cmd, 2);
float tmp = (float((cmd[0]<<8)|cmd[1]) / 256.0);
pc.printf("temperature = %.2f\n", tmp);
}
Use to communicate with I2C Master.
I2CSlave i2cslave;
Controller-Area Network bus standard support.
CAN can;
Last updated