RTT笔记-串口2

该笔记类别主要是在自己学习时做的一些记录,方便自己很久不用忘掉时进行快速回忆

本文表述串口的使用,工程基于官方GIT代码库中的STM32F10X-HAL。
首先打开scons,进入rtt\bsp\stm32f10x-test目录下
运行

menuconfig

进入配置页面后,选择芯片种类,我这开使用的是STM32F103ZE系列,然后打开串口2(默认1是开启了的)
在编译工程

scons --target=mkd5

rt_kprintf调试打印接口

因为默认打开了串口1,系统的shell已经打印都被分配到了这个口上,直接烧写程序将会发现串口1进行如下打印

 \ | /
- RT -     Thread Operating System
 / | \     3.1.1 build Sep 18 2018
 2006 - 2018 Copyright by rt-thread team

main.c中应该就是一个空的主函数,这里其实应该叫做用户主函数,实际主函数不是它,具体在其他文章再讨论。这里系统封装了rt_kprintf函数,可以当做C中的printf用,例如

int main(void)
{
      rt_kprintf("lissettecarlr\n");
    return 0;
}

下载运行会发现,在串口1输出了这个字符串。

串口使用

不仅仅是串口,只要是按照设备操作接口编写的通讯外设都可以按照如下方式使用

  • 根据设备名称查找该设备
  • 绑定回调函数
  • 打开设备
  • 进行通讯
    那么以串口为例,最简单的使用方式如下
static rt_err_t uart_intput(rt_device_t dev, rt_size_t size)
{    
    return RT_EOK;
}

static rt_device_t uart_device = RT_NULL;
static char* str ="lissettecarlr";
int main(void)
{
      uart_device=rt_device_find("uart2");
      rt_device_set_rx_indicate(uart_device, uart_intput);
      rt_device_open(uart_device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX );  
      rt_device_write(uart_device, 0, str, strlen(str));
    return 0;
}

上列代码没有进行错误判断,主要是对其使用驱动的几个步骤,所以还可以写成:

rt_err_t uart_open(const char *name)
{
    rt_err_t res;
    uart_device = rt_device_find(name);   
    if (uart_device != RT_NULL)
    {   
        res = rt_device_set_rx_indicate(uart_device, uart_intput);
        if (res != RT_EOK)
        {
            rt_kprintf("set %s rx indicate error.%d\n",name,res);
            return ERROR;
        }
        res = rt_device_open(uart_device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX );       
        if (res != RT_EOK)
        {
            rt_kprintf("open %s device error.%d\n",name,res);
            return ERROR;
        }
    }
    else
    {
        rt_kprintf("can't find %s device.\n",name);
        return -RT_ERROR;
    }
    return RT_EOK;
}

接下来针对上列函数简单说明一下

rt_device_set_rx_indicate(rt_device_t dev,rt_err_t (*rx_ind)(rt_device_t dev,rt_size_t size))

该函数主要绑定数据接收的回调函数,第二个参数是一个函数,rt_size_t size表示进入该回调时接收到的数据长度。进入回调后可以使用rt_device_read函数读取接收到的哪一个字节。例如测试可以写成这样

static rt_err_t uart_intput(rt_device_t dev, rt_size_t size)
{   
      int res=0;
      rt_kprintf("size:%d\n",size);
      res=rt_device_read(uart_device, 0, rcvBuff, 1);
      if(res>0)
        rt_kprintf("data:%d\n",rcvBuff[0]);
       else
          rt_kprintf("!!!!!");
    return RT_EOK;
}

通过给串口2发送一个字节,串口1将会打印。该回调函数是在芯片读取到一个字节并且将其保存到了buffer中后才发生的,想要一次接收多个数据的话,只需要等待到多少次回调发生即可,还有就是在串口中进行打印是会打断后面数据接收的,如果仅仅想测试接收多个数据可以写成下列

static rt_err_t uart_intput(rt_device_t dev, rt_size_t size)
{   

      int res=0;
      if(size>=5)
        {
            res=rt_device_read(uart_device, 0, rcvBuff, 5);
            if(res>0)
            {
                for(int i=0;i<5;i++)
                  rt_kprintf("data:%02X ",rcvBuff[i]);
                 rt_kprintf("\n");
            }
            else
                rt_kprintf("!!!!!");
      }
    return RT_EOK;
     
}

串口2发送5个字节,串口1将其打印。因为是笔记所以这些测试函数也就随便写,实际上数据接收回调接收到数据时,应该对外抛事件或者信号量,各种骚操作都不要写到这里面。

关于串口参数的修改

/* 串口设备句柄 */
static rt_device_t uart_device = RT_NULL;

     /* 查找系统中的串口设备 */
    uart_device = rt_device_find("uart1");

    /* 串口配置结构体,使用serial.h的宏定义 */
    struct serial_configure gps_use_config = 
    {
        BAUD_RATE_9600,   /* 9600 bits/s */
        DATA_BITS_8,      /* 8 databits */
        STOP_BITS_1,      /* 1 stopbit */
        PARITY_NONE,      /* No parity  */ 
        BIT_ORDER_LSB,    /* LSB first sent */
        NRZ_NORMAL,       /* Normal mode */
        1024,             /* Buffer size */
        0   
    };
            /* 先打开串口设备,才能修改 */
            if (rt_device_open(device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX ) != RT_EOK)
    {
        rt_kprintf("uart open error.\n");
    }
        /* 修改串口配置参数 */
     if (RT_EOK != rt_device_control(uart_device, RT_DEVICE_CTRL_CONFIG,(void *)&gps_use_config))
    {
        rt_kprintf("uart config baud rate failed.\n");
    }

如果仅仅修改波特率可以如下

struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
config.baud_rate = 115200;
rt_device_control(serial1, RT_DEVICE_CTRL_CONFIG, &config);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,956评论 1 13
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    JasonShi6306421阅读 1,240评论 0 1
  • 大学的时候,帮朋友写的操作系统调研的作业,最近整理过去的文档时候偶然发现,遂作为博客发出来。 从串口驱动到Linu...
    free_will阅读 7,389评论 7 59
  • 这里节奏很慢,但你身边一定不是这样的。
    你好请叫我大王阅读 208评论 0 0
  • 近段时间参加了朝夕日历的打卡,打卡35天,让我见识到了太多努力的人,更加激励自己继续早起。 参加早起计划的人有36...
    冬后春初阅读 257评论 4 2