Hugh
Hugh
This guy hasn't written anything yet

注册于 2 years ago

回答
0
文章
0
关注者
0

console_device配置如下
rt_device_t rt_console_set_device(const char *name)
{
rt_device_t new, old;

/* save old device */
old = _console_device;

/* find new console device */
new = rt_device_find(name);
if (new != RT_NULL)
{
if (_console_device != RT_NULL)
{
/* close old console device */
rt_device_close(_console_device);
}

/* set new console device */
_console_device = new;
rt_device_open(_console_device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_STREAM);
}

return old;
}
RTM_EXPORT(rt_console_set_device);

tyustli 发表于 2019-10-9 17:44
看看这个是不是你要找的
https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/docs/STM32%E7% ...


是的是的,谢谢

tyustli 发表于 2019-9-24 16:22
env 打开串口的时候会有选项,是否使用 DMA 功能,如果没有这个选项可以参考已有的 BSP 改一下 Kconfig 文 ...


请教一下,如果我看别的env中有很多选项比如DMA,关于那一块的配置是在哪里有文档啊

flyboy 发表于 2019-6-17 16:57
是需要添加一个 DMA 发送的函数

可以参考这个驱动,有DMA发送的功能,https://github.com/RT-Thread/rt-th ...


我想请问下DMA接收是不是也要用到这个函数啊?
我在RT-2.0version看到有这么一段代码
/*
* Serial DMA routines
*/
rt_inline int _serial_dma_rx(struct rt_serial_device *serial, rt_uint8_t *data, int length)
{
rt_base_t level;
int result = RT_EOK;
struct rt_serial_rx_dma *rx_dma;

RT_ASSERT((serial != RT_NULL) && (data != RT_NULL));
rx_dma = (struct rt_serial_rx_dma*)serial->serial_rx;
RT_ASSERT(rx_dma != RT_NULL);

level = rt_hw_interrupt_disable();
if (rx_dma->activated != RT_TRUE)
{
rx_dma->activated = RT_TRUE;
serial->ops->dma_transmit(serial, data, length, RT_SERIAL_DMA_RX);
}
else result = -RT_EBUSY;
rt_hw_interrupt_enable(level);

if (result == RT_EOK) return length;

rt_set_errno(result);
return 0;
}

tyustli 发表于 2019-10-9 14:25
楼主可以看一下这篇文章:
https://www.rt-thread.org/qa/thread-11854-1-1.html


好,谢谢

tyustli 发表于 2019-9-24 16:22
env 打开串口的时候会有选项,是否使用 DMA 功能,如果没有这个选项可以参考已有的 BSP 改一下 Kconfig 文 ...


配置好DMA_Configuration后程序卡在了
serial->ops->dma_transmit(serial, data, length, RT_SERIAL_DMA_RX);
这个函数官网有说是stm32_dma_transmit(),这个是需要自己添加吗?
/*
* Serial DMA routines
*/
rt_inline int _serial_dma_rx(struct rt_serial_device *serial, rt_uint8_t *data, int length)
{
rt_base_t level;
int result = RT_EOK;
struct rt_serial_rx_dma *rx_dma;

RT_ASSERT((serial != RT_NULL) && (data != RT_NULL));
rx_dma = (struct rt_serial_rx_dma*)serial->serial_rx;
RT_ASSERT(rx_dma != RT_NULL);

level = rt_hw_interrupt_disable();
if (rx_dma->activated != RT_TRUE)
{
rx_dma->activated = RT_TRUE;
serial->ops->dma_transmit(serial, data, length, RT_SERIAL_DMA_RX);
}
else result = -RT_EBUSY;
rt_hw_interrupt_enable(level);

if (result == RT_EOK) return length;

rt_set_errno(result);
return 0;
}

tyustli 发表于 2019-9-24 16:22
env 打开串口的时候会有选项,是否使用 DMA 功能,如果没有这个选项可以参考已有的 BSP 改一下 Kconfig 文 ...


嗯嗯,谢谢,发现没有DMA_Configuration这个函数,准备补上这个函数试一下

RTT 发表于 2019-9-20 14:58
1、DMA RX需要在ENV中开启 DMA支持的,目前rtt的bsp只支持DMA_RX


在env中怎么配置呢?

Summer_gift 发表于 2019-9-20 13:52
/* 以 DMA 接收及轮询发送方式打开串口设备 */
rt_device_open(serial, RT_DEVICE_FLAG_DMA_RX);



是可以发送数据的,在串口中接收到了单片机发过来的字符串了

回到
顶部

发布
问题

投诉
建议