RT-thread usart初步调试成功,请前辈们指教
看了几天RTT的usart模块,发现串口功能很完善但也很复杂,呵呵。查资料后自己用finsh简单调试了发送和接收。虽然能成功,但是不知道符不符合RTT系统的要求,希望前辈们指导。在RTT中usart采用了循环缓冲+动态分配内存方式,我选用了usart3的DMA方式发送+中断接收。(RTT功能非常强大,先没有仔细分析内部结构,准备先正确使用起来再去分析)
首先在rt_config.h中配置
#define RT_USING_DEVICE
#define RT_USING_UART1//usart1用作finsh输出
#define RT_USING_CONSOLE
#define RT_USING_FINSH
#define RT_USING_UART3 //usart3用作普通串口输出
调试环境Stm32f103rc mdk4 RTT1.0.2
注:application.c中没有进行修改,仍然是led1和led2两个任务
bernard前辈有详细介绍usart的程序结构,我就不献丑了,呵呵。
------------------------发送--------------------------------
void usart3_send(void)
{
char sdata[]="hello rtt!";
rt_serial_write(&uart3_device,0,sdata,strlen(sdata));
}
#include <finsh.h>
FINSH_FUNCTION_EXPORT(usart3_send,just a test function);
这里用到了rt_serial_write(),它在serial.c中(但是发现是文件内部程序,前面加了static,我取消了static修饰,并在usart.c中调用,所以不知道这样修改会不会有问题,请指教。)
这样利用finsh就可以正常使用usart3_send()发送了。
------------------------中断接收------------------------------------
static char rdata; //先暂且用全局变量,以后再尝试使用动态分配
void usart3_send(char *p,u8 size)
{
rt_serial_write(&uart3_device,0,p,size);
}
void usart3_read(void)
{
rt_serial_read(&uart3_device,0,rdata,20);
usart3_send(rdata,strlen(rdata));
}
#include <finsh.h>
FINSH_FUNCTION_EXPORT(usart3_read,just a test function);
先串口发送“hello mcu”给单片机板子,再调用finsh组件调试usart3_read(),单片机能够再把”hello mcu”发回给PC串口助手。
函数原型rt_size_t rt_serial_read (rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size)
我有几点不是很明白,
1、为什么要提前设定rt_serial_read()第4个形参rt_size_t size,是不是有什么巧妙的用途我没有理解,呵呵。
2、在RTT的IO设备层,一般都要先注册,再进行初始化但是这个程序
先rt_device_init_all();再rt_application_init();
请问其他的device是不是也可以这样?
这里用到了rt_serial_write(),它在serial.c中(但是发现是文件内部程序,前面加了static,我取消了static修饰,并在usart.c中调用,所以不知道这样修改会不会有问题,请指教。)
你不觉得应该是用 rt_device_write 吗? aozima 发表于 2012-12-31 00:48 static/image/common/back.gif
你不觉得应该是用 rt_device_write 吗?
嗯,试了一下,直接调用devic的API是可以的。原来系统是利用回调函数结构把usart添加到设备层了,所以usart的api进行了static修饰,当初没理解,谢谢!
页:
[1]