移植新雷达到项目上,老雷达和新雷达,使用的引脚一模一样,在板子的位置都是一样的,老雷达可以接收数据,但是新雷达接收不到数据(不需要发任何指令),缓冲区为0,按理来说应该有数据,只不过可能是错的,不知道为什么?
//应用层获取数据
int tf_luna_get_originaldata(rt_device_t device, int *dist, int *amp)
{
#if 1
int ret;
uint8_t buf[9] = {0};
//rt_device_write(device, 0, "11", 2);//新雷达不需要发指令,就可以接收数据
rt_device_control(device, RT_DEVICE_CTRL_CLEAN_BUF, 0);
rt_thread_mdelay(20);
for (size_t i = 0; i < 3; i++)
{
rt_device_control(device, RT_DEVICE_CTRL_GET_BUF_LEN, &ret);
if (ret == sizeof(buf))
break;
rt_thread_mdelay(10);
}
ret = rt_device_read(device, 0, buf, sizeof(buf));//这个位置
rt_kprintf("ret = %d\n", ret);
rt_kprintf("buf = %x %x %x %x %x %x %x %x %x\n", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7], buf[8]);
if (ret == 9)
{
if (buf[0] == 0x59 && buf[1] == 0x59) // 简单校验头部
{
*dist = buf[3] << 8;
*dist |= buf[2];
rt_kprintf("hua_dist: %d\n", *dist);
*amp = buf[5] << 8;
*amp |= buf[4];
rt_kprintf("hua_amp: %d\n", *amp);
return 0;
}
}
}
//串口中断
rt_inline int _serial_int_rx(struct rt_serial_device *serial, rt_uint8_t *data, int length)
{
//length 初始值为9
int size;
struct rt_serial_rx_fifo* rx_fifo;
RT_ASSERT(serial != RT_NULL);
size = length;
rx_fifo = (struct rt_serial_rx_fifo*) serial->serial_rx;
RT_ASSERT(rx_fifo != RT_NULL);
/* read from software FIFO */
while (length)
{
int ch;
rt_base_t level;
/* disable interrupt 没有数据*/
level = rt_hw_interrupt_disable();
/* there's no data: */
if ((rx_fifo->get_index == rx_fifo->put_index) && (rx_fifo->is_full == RT_FALSE)) //这个判断没有成立,所以返回的是0,没用数据
{
/* no data, enable interrupt and break out */
rt_hw_interrupt_enable(level);
break;
}
/* otherwise there's the data: 有数据 */
ch = rx_fifo->buffer[rx_fifo->get_index];
rx_fifo->get_index += 1;
if (rx_fifo->get_index >= serial->config.bufsz) rx_fifo->get_index = 0;
if (rx_fifo->is_full == RT_TRUE)
{
rx_fifo->is_full = RT_FALSE;
}
/* enable interrupt */
rt_hw_interrupt_enable(level);
*data = ch & 0xff;
data ++; length --;
}
return size - length;
}
这是之前的写的,我现在还不熟悉,不敢改呢?
先看串口中断触发了没有
再去用STC或者示波器逻辑分析仪看看串口有没有数据过来