野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2935|回复: 0

串口2、4不能使用

[复制链接]
发表于 2020-1-12 18:03:08 | 显示全部楼层 |阅读模式
我使用的是官网文档中的程序
/* * 程序清单:这是一个 串口 设备使用例程 * 例程导出了 uart_sample 命令到控制终端 * 命令调用格式:uart_sample uart * 命令解释:命令第二个参数是要使用的串口设备名称,为空则使用默认的串口设备 * 程序功能:通过串口输出字符串"hello RT-Thread!",然后错位输出输入的字符*/#include <rtthread.h>#define SAMPLE_UART_NAME       "uart1"/* 用于接收消息的信号量 */static struct rt_semaphore rx_sem;static rt_device_t serial;/* 接收数据回调函数 */static rt_err_t uart_input(rt_device_t dev, rt_size_t size){    /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */    rt_sem_release(&rx_sem);    return RT_EOK;}static void serial_thread_entry(void *parameter){    char ch;    while (1)    {        /* 从串口读取一个字节的数据,没有读取到则等待接收信号量 */        while (rt_device_read(serial, -1, &ch, 1) != 1)        {            /* 阻塞等待接收信号量,等到信号量后再次读取数据 */            rt_sem_take(&rx_sem, RT_WAITING_FOREVER);        }        /* 读取到的数据通过串口错位输出 */        ch = ch + 1;        rt_device_write(serial, 0, &ch, 1);    }}static int uart_sample(int argc, char *argv[]){    rt_err_t ret = RT_EOK;    char uart_name[RT_NAME_MAX];    char str[] = "hello RT-Thread!\r\n";    if (argc == 2)    {        rt_strncpy(uart_name, argv[1], RT_NAME_MAX);    }    else    {        rt_strncpy(uart_name, SAMPLE_UART_NAME, RT_NAME_MAX);    }    /* 查找系统中的串口设备 */    serial = rt_device_find(uart_name);    if (!serial)    {        rt_kprintf("find %s failed!\n", uart_name);        return RT_ERROR;    }    /* 初始化信号量 */    rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);    /* 以中断接收及轮询发送模式打开串口设备 */    rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);    /* 设置接收回调函数 */    rt_device_set_rx_indicate(serial, uart_input);    /* 发送字符串 */    rt_device_write(serial, 0, str, (sizeof(str) - 1));    /* 创建 serial 线程 */    rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10);    /* 创建成功则启动线程 */    if (thread != RT_NULL)    {        rt_thread_startup(thread);    }    else    {        ret = RT_ERROR;    }    return ret;}/* 导出到 msh 命令列表中 */MSH_CMD_EXPORT(uart_sample, uart device sample);
但是不能使用,然后我将程序中的serial = rt_device_find(uart_name);修改为serial = rt_device_find(SAMPLE_UART_NAME);就可以正常使用了,此时用的是串口一,然后我将#define SAMPLE_UART_NAME       "uart1"修改为#define SAMPLE_UART_NAME       "uart2",
其他地方不变时,可以收到hello RT-Thread!,  但是发送数据接收的是乱七八糟的????
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-21 23:52 , Processed in 0.041291 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表