在前篇,我分享了【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接收到正常输出的字符串,我们使用串口助手发一条信息,串口回显:

我要赚赏金
