让我们看一下Energia IDE中经常使用的与串行通信相关的一些基本功能。
目录
UART
a) Serial.begin(baud_rate)
baud_rate
:将用于串行通信的波特率。可以是4800,9600,14400,19200等- 此功能用于定义将用于串行通信的波特率。要与特定设备通信,需要使用设备波特率。
Example
Serial.begin(9600)定义9600波特率进行通信。
b) Serial.available()
- 此函数用于获取可从串行端口读取的字节数。它给出了已到达并存储在串行接收缓冲区中的数据字节数。
- 例如,if(Serial.available())
- 如果数据在串口可用,请采取措施。
c)Serial.print(value)
value
:字符,字符串,要打印的数字。- 此函数用于以人类可读的形式(字符,字符串,数字)将数据打印到串行端口。
Example
Serial.print(“Hi 1234”)在串行监视器上- 打印Hi 1234。
d)Serial.println(value)
value
:字符,字符串,要打印的数字。- 此函数用于以人类可读的形式(字符,字符串,数字)将数据打印到串行端口,后跟回车符(\ r)和新行字符(\ n)。
e) Serial.read()
- 此函数返回在Launchpad的Rx引脚上接收的字符。
Example
char read_byte- read_byte = Serial.read()
- 读取的数据字节存储在read_byte中。
f) Serial.write(value), Serial.write(string), Serial.write(buff, length)
value
:要作为单个字节发送的值。string
:要作为一系列字节发送的字符串。buff
:要作为字节发送的数据数组。length
:要发送的字节数。- 此函数以二进制形式将数据写入串行端口。数据以字节或字节串的形式发送。
Example
Serial.write(100)- Serial.write(“Hello”)
/* 串行通信功能 */
/* Setup is run once at the start (Power-On or Reset) of sketch */
void setup()
{
Serial.begin(9600); /* opens serial port, sets data rate to 9600 bps */
}
/* Loop runs over and over after the startup function */
void loop()
{int data = 0;if(Serial.available()>0) /* If data available at serial port, enter if loop */
{
data = Serial.read(); /* Read data present at serial port */
Serial.println("Data Received is : "); /* Print string with \r\n */
Serial.write(data); /* Print data received */
}
}
SPI
a) SPI.begin(slaveSelectPin)
slaveSelectPin
:引脚被选为从选择引脚。如果未传递此参数,则引脚2用作默认从选择引脚。- 该功能通过将SCK,MOSI和SS设置为输出来初始化SPI总线,将SCK和MOSI拉低,SS拉高。
b) SPI.end(slaveSelectPin)
slaveSelectPin
:仅当SPI.begin()函数使用了不同的从选择引脚(默认引脚号2除外)时使用。- 此功能可在不更改引脚模式的情况下禁用SPI总线。
c)SPI.transfer(slaveSelectPin , value)
slaveSelectPin
:从器件选择引脚,用于选择器件。value
:要通过总线发送的字节。- 返回的值可以存储在数据变量中。
- SPI传输基于同时发送和接收。
- 如果指定slaveSelectPin,则在传输之前将该特定引脚拉低,并在传输完成后拉高。
Example
char received_val- received_val = SPI
/* SPI通信功能 */
#include
const int slavePin = 6; /* Pin used as chip select pin for the Slave device */
/* Setup is run once at the start (Power-On or Reset) of sketch */
void setup()
{
pinMode(slavePin, OUTPUT); /* Configure slavePin as an output pin */
SPI.begin(); /* Initialize SPI */
}
/* Loop runs over and over after the startup function */
void loop()
{
digitalWrite(slavePin, LOW); /* Chip Select pin low to initialize communication with slave */
SPI.transfer(0x45); /* Transfer data *//* 0x45 is sent to slave device. At the same time, a byte of data is received from the slave */
digitalWrite(slavePin, HIGH); /* Chip Select pin high to end communication with slave */
}
I2C
a) Wire.begin(address)
address
:设备的7位从机地址。如果未指定,则设备作为主站加入总线。- 此功能用于启动线程库并将总线作为主站或从站加入。
b) Wire.beginTransmission(address)
address
:要发送到的设备的7位地址。- 该功能用于开始使用给定地址传输到I2C从器件。在此之后,使用Wire.write()函数对要传输的队列字节进行传输,并通过调用Wire.endTransmission()函数进行传输。
Example
Wire.beginTransmission(0x23)- 开始传输到地址为0x23的I2C设备。
c) Wire.endTransmission(stop)
stop
:布尔数据类型。True将在请求后发送停止消息,从而释放总线。False将在请求后不断发送重新启动,从而保持连接处于活动状态。- 此函数结束使用Wire.beginTransmission()函数启动到从设备的传输,并传输由Wire.write()函数排队的字节。
d) Wire.write(value), Wire.write(string), Wire.write(data, length)
value
:要作为单个字节发送的值。string
:要作为一系列字节发送的字符串。data
:要作为字节发送的数据数组。length
:要发送的字节数。- 此函数响应来自主设备的请求从从设备写入数据,或者在调用Wire.beginTransmission()和Wire.endTransmission()之间将队列字节用于从主设备传输到从设备。
e) Wire.available()
- 此函数返回可用Wire.read()函数读取的字节数。
f) Wire.read()
- 此函数读取在Wire.requestFrom()函数之后从从设备发送到主设备的字节,或读取从主设备发送到从设备的字节。
g) Wire.requestFrom(address, quantity, stop)
address
:要从中请求字节的设备的7位地址。quantity
:要请求的字节数。stop
:布尔数据类型。True将在请求后发送停止消息,从而释放总线。False将在请求后不断发送重新启动,从而保持连接处于活动状态。- 主机使用此功能从从设备请求字节。