RawSerial
RawSerial 类层次结构
RawSerial 类提供 UART 功能,而不像 Serial 类那样使用 Stream 的打印和扫描功能。RawSerial 不会重新定位标准库打印和扫描功能。相反,RawSerial 重新实现打印和扫描功能,以使用每个目标的底层串行通信功能。有关目标串行支持,请参阅移植指南。这使得 RawSerial 适合用于 RTOS 的中断处理程序。
串行通道在构造函数中具有以下可配置参数:
- Tx 和 Rx 引脚 - 物理串行发送和接收引脚。您可以将 Tx 或 Tx 引脚指定为未连接(NC)以进行 Simplex 通信,或指定两者以获得全双工。
- 波特率 - 此设置是可选的构造函数参数。标准波特率范围从每秒几百位到每秒兆位。Mbed 微控制器上串行连接的默认设置为 9600 波特。也可以在运行时配置此设置。
可以在 RawSerial 对象的运行时配置以下参数。您可以在类引用中查看有关可配置设置和函数的更多信息。
- 波特率 - 标准波特率范围从每秒几百位到每秒兆位。Mbed 微控制器上串行连接的默认设置为 9600 波特。
- 数据长度 - 传输的数据可以是 7 位或 8 位长。Mbed 微控制器上串行连接的默认设置为 8 位。
- 奇偶校验 - 您可以添加可选的奇偶校验位。对象自动设置奇偶校验位,使数据中的 1 的数量为奇数或偶数。奇偶校验设置为奇数,偶数或无。Arm Mbed 微控制器上串行连接的默认设置为 None。
- 停止位 - 在传输数据和奇偶校验位之后,RawSerial 对象插入一个或两个停止位以 “frame” 数据。Mbed 微控制器上串行连接的默认设置是一个停止位。
9600 - 8 - N - 1 是串行端口设置的常用符号,描述了 Mbed 微控制器的默认设置。
RawSerial 类参考
公共成员函数 | |
RawSerial (PinName tx, PinName rx, int baud=MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE) | |
int | putc (int c) |
int | getc () |
int | puts (const char *str) |
int | printf (const char *format,...) |
公共成员函数继承自 mbed::SerialBase | |
void | baud (int baudrate) |
void | format (int bits=8, Parity parity=SerialBase::None, int stop_bits=1) |
int | readable () |
int | writeable () |
void | attach (Callback< void()> func, IrqType type=RxIrq) |
template<typename T > | |
void | attach (T *obj, void(T::*method)(), IrqType type=RxIrq) |
template<typename T > | |
void | attach (T *obj, void(*method)(T *), IrqType type=RxIrq) |
void | send_break () |
void | set_flow_control (Flow type, PinName flow1=NC, PinName flow2=NC) |
int | write (const uint8_t *buffer, int length, const event_callback_t &callback, int event=SERIAL_EVENT_TX_COMPLETE) |
int | write (const uint16_t *buffer, int length, const event_callback_t &callback, int event=SERIAL_EVENT_TX_COMPLETE) |
void | abort_write () |
int | read (uint8_t *buffer, int length, const event_callback_t &callback, int event=SERIAL_EVENT_RX_COMPLETE, unsigned char char_match=SERIAL_RESERVED_CHAR_MATCH) |
int | read (uint16_t *buffer, int length, const event_callback_t &callback, int event=SERIAL_EVENT_RX_COMPLETE, unsigned char char_match=SERIAL_RESERVED_CHAR_MATCH) |
void | abort_read () |
int | set_dma_usage_tx (DMAUsage usage) |
int | set_dma_usage_rx (DMAUsage usage) |
受保护的成员函数 | |
virtual void | lock (void) |
virtual void | unlock (void) |
受保护的成员函数继承自 mbed::SerialBase | |
void | start_read (void *buffer, int buffer_size, char buffer_width, const event_callback_t &callback, int event, unsigned char char_match) |
void | start_write (const void *buffer, int buffer_size, char buffer_width, const event_callback_t &callback, int event) |
void | interrupt_handler_asynch (void) |
SerialBase (PinName tx, PinName rx, int baud) | |
int | _base_getc () |
int | _base_putc (int c) |
其他继承成员 | |
继承自的公共类型 mbed::SerialBase | |
enum | Parity { None = 0, Odd, Even, Forced1, Forced0 } |
enum | IrqType { RxIrq = 0, TxIrq, IrqCnt } |
enum | Flow { Disabled = 0, RTS, CTS, RTSCTS } |
静态公共成员函数继承自 mbed::SerialBase | |
static void | _irq_handler (uint32_t id, SerialIrq irq_type) |
受保护的属性继承自 mbed::SerialBase | |
CThunk< SerialBase > | _thunk_irq |
DMAUsage | _tx_usage |
DMAUsage | _rx_usage |
event_callback_t | _tx_callback |
event_callback_t | _rx_callback |
serial_t | _serial |
Callback< void()> | _irq [IrqCnt] |
int | _baud |
注意: 在 Windows 计算机上,您需要安装 USB 串行驱动程序。请参阅 Windows 串行设置。
RawSerial hello, world
/* mbed Example Program
* Copyright (c) 2006-2014 ARM Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "mbed.h"
RawSerial pc(USBTX, USBRX); // tx, rx
int main() {
pc.printf("Hello World!\n\r");
while(1) {
pc.putc(pc.getc()); // echo input back to terminal
}
}
RawSerial 示例
示例一
以波特率 19200 向设备写入消息。
#include "mbed.h"
RawSerial device(USBTX, USBRX); // tx, rx
int main() {
device.baud(19200);
device.printf("Hello World\n");
}
示例二
在生成串行中断期间附加要调用的函数。此功能默认为 RX 引脚上的中断:
#include "mbed.h"
DigitalOut led1(LED1);
DigitalOut led2(LED2);
RawSerial pc(USBTX, USBRX);
void callback_ex() {
// Note: you need to actually read from the serial to clear the RX interrupt
pc.putc(pc.getc());
led2 = !led2;
}
int main() {
pc.attach(&callback_ex);
while (1) {
led1 = !led1;
wait(0.5);
}
}
Mbed OS 示例
RawSerial 的常见用例是 IRQ 重 UART 操作,例如 ESP8266 驱动程序中的 ATParser。该驱动器在用户提供的引脚上使用 UART 与片外 ESP8266 模块通信。