搜索
bottom↓
回复: 2

RT-thread usart初步调试成功,请前辈们指教

[复制链接]

出0入0汤圆

发表于 2012-12-30 22:21:33 | 显示全部楼层 |阅读模式
看了几天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[20];        //先暂且用全局变量,以后再尝试使用动态分配
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是不是也可以这样?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-12-31 00:48:07 | 显示全部楼层
这里用到了rt_serial_write(),它在serial.c中(但是发现是文件内部程序,前面加了static,我取消了static修饰,并在usart.c中调用,所以不知道这样修改会不会有问题,请指教。)


你不觉得应该是用 rt_device_write 吗?

出0入0汤圆

 楼主| 发表于 2012-12-31 14:05:38 | 显示全部楼层
aozima 发表于 2012-12-31 00:48
你不觉得应该是用 rt_device_write 吗?

嗯,试了一下,直接调用devic的API是可以的。原来系统是利用回调函数结构把usart添加到设备层了,所以usart的api进行了static修饰,当初没理解,谢谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 21:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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