在前篇,我分享了【MAX32625PICO开发板】的串口发送,这一篇,我将分享如何接收。
在UnbufferedSerial中,串口有一个接收的功能,即read,他在的描述中是这样定义的:
/** Read the contents of a file into a buffer * * Blocks and reads exactly one character * * @param buffer The buffer to read in to * @param size The number of bytes to read * @return The number of bytes read */ ssize_t read(void *buffer, size_t size) override;
同时我们使用串口的readable,如果在缓冲区有数据,那么我们用read去读取,如果读到了数据,则返回指定长度的数据,同时我们为了实现无阻塞的功能,使用了简单的状态机,功能代码如下:
/* mbed Microcontroller Library * Copyright (c) 2019 ARM Limited * SPDX-License-Identifier: Apache-2.0 */ #include "mbed.h" #include "platform/mbed_thread.h" // Blinking rate in milliseconds #define BLINKING_RATE_MS 200 #define SLEEP_MS 1 UnbufferedSerial uart0(UART0_TX, UART0_RX,115200); char uart_rx_buffer[256]; int main() { int cnt = 0; DigitalOut led(LED1); DigitalOut led1(LED2); const char* message = "Hello from UART0!\n"; uart0.write(message, strlen(message)); while (true) { cnt ++; if(cnt%500 == 0) { uart0.write(message, strlen(message)); led = !led; } else if(cnt > 1000) { led1 = !led1; cnt = 0; } if(uart0.readable()) { ssize_t bytes_read = uart0.read(uart_rx_buffer,sizeof(uart_rx_buffer)); if(bytes_read > 0){ uart0.write(uart_rx_buffer, bytes_read); } } thread_sleep_for(SLEEP_MS); } }
【实验现象】
我们每500ms接收到正常输出的字符串,我们使用串口助手发一条信息,串口回显: