嵌入式技术论坛
直播中

王燕

7年用户 1749经验值
私信 关注
[问答]

请问串口不能收到0xFF和0x00这是为什么?

我的问题:

串口不能收到0xFF和0x00 ,请问这是为什么?若要收到0xFF和0x00 ,请问要怎样做?

问题现象:

芯片型号:AT32F403ACGU7;

支持包版本:0.0.9;

系统版本:4.1.0;

串口版本:V1;

(程序功能是发送接收到的数据,但如下图所示,单片机收不到0x00和0xFF)

(目前已知串口能正常发送0xFF和0x00,因为尝试在程序中写死发送的数据后,电脑端能正常收到0x00和0xFF,所以可以确定串口是收不到0x00和0xFF。)

2.jpg

我的代码:

#include <rtthread.h>

#define DBG_TAG "main"

#define DBG_LVL DBG_LOG

#include <rtdbg.h>

#include <rtdevice.h>

#include "drv_common.h"

#include <rtdef.h>

#include "drivers/serial.h"

rt_device_t Uart1_dev;//定义一个设备对象/指向设备结构体的指针,用来接收查找到的对象。

struct serial_configure u1_configure = RT_SERIAL_CONFIG_DEFAULT;//定义串口配置结构体并初始化为系统默认配置

static rt_err_t rx_callback(rt_device_t dev,rt_size_t size)//实现串口接收中断回调函数

{

rt_uint64_t dat; //定义一变量,用于接收串口的数据

rt_device_read(Uart1_dev, 0, &dat, 8); //将从串口读取的数据保存到变量中

rt_device_write(Uart1_dev, 0, &dat, 8); //将变量中的数据从串口发出

return RT_EOK;

}

int main(void)

{

rt_pin_mode(GET_PIN(A,9), PIN_MODE_OUTPUT );

rt_pin_mode(GET_PIN(A,10), PIN_MODE_OUTPUT );

Uart1_dev = rt_device_find("uart1");//查找名称为uart1的设备

rt_device_close(Uart1_dev);

rt_device_set_rx_indicate(

Uart1_dev,

rx_callback

);//设置串口的中断接收回调函数

rt_device_control(

Uart1_dev,

RT_DEVICE_CTRL_CONFIG,

(void*)&u1_configure

);

rt_device_open(Uart1_dev,RT_DEVICE_FLAG_INT_RX);//将串口以读写并且中断接收模式开启。

while(1)

{

rt_thread_mdelay(20);

}

return 0;

}

试了一下,发现问题与“串口设备和控制台都用相同的串口”有关,会有冲突。但是如果我就是想要在程序中不使用控制台应该如何实现?`

回帖(2)

张燕

2023-2-7 10:27:57
1
举报

张燕

2023-2-7 10:28:22
你可以搜索,找到这个函数调用的地方,注释掉。
rt_console_set_device
如,我这边是这样的:

#ifdef RT_USING_CONSOLE
    rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
#endif
举报

更多回帖

发帖
×
20
完善资料,
赚取积分