这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 【MAX32625PICO开发板】Mbed之串口接收

共3条 1/1 1 跳转至

【MAX32625PICO开发板】Mbed之串口接收

工程师
2025-04-07 20:42:57     打赏

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

image.png




关键词: MAX32625PICO     串口     Mbed     read    

专家
2025-04-07 21:56:29     打赏
2楼

感谢分享


专家
2025-04-07 21:57:47     打赏
3楼

感谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]