在eCos源码包的examples中有一个串口编程的应用例子。针对stm32平台,串口也可以这样应用吗?在eCos的stm32应用中,我们还需要移植或编写串口驱动吗?还是eCos中已有stm32的串口驱动了吗?

带着这些疑问和问题,我们一一来解开这些疑团!

串口驱动

实际上,eCos中已实现了stm32的串口驱动。但eCos中提供的模板(Templates)没有配置为使能。因此,如果我们要在应用程序中使用串口,则需要配置它为使能状态。

串口驱动的配置项名称:ST STM3210E EVAL board,默认值:禁止。

在图形配置工具中,搜索找到这个配置项,然后使能它。如下图所示。

image

串口驱动配置项的子配置项可根据需要修改(如修改波特率、设备名等),默认情况下,只使能了串口1和串口2的驱动。

串口编程

eCos串口编程也很简单,甚至比linux的还要简单。利用eCos的I/O子系统,可以非常快捷的编写出一个应用示例,就像eCos源码包中examples的serial示例那样。

需要开启eCos的I/O子系统,默认是启用的,如下图所示。

image

 

有一点与examples的serial示例不同,那就是指定的设备名不一样了,应该是:”/dev/ser0″。

包含的头文件:

#ifdef CYGPKG_IO_SERIAL
# include <pkgconf/io_serial.h>
#endif

#include <cyg/io/io.h>                  /* I/O functions */

应用实例:

static void test_thread_(cyg_addrword_t data)
{
    cyg_io_handle_t handle;
    Cyg_ErrNo err;
    cyg_uint32 len;
    char buf[1];

    err = cyg_io_lookup("/dev/ser0", &handle);
    if (ENOERR != err) {
        diag_printf("Open /dev/ser0 failed!\n");
        diag_printf("Please check if enable 'CYGPKG_IO_SERIAL_DEVICES' or not.\n");
        return;
    }

    diag_printf("%s\n", TEST_HELP_INFO);

    while(1) {
        len = sizeof(buf);
        err = cyg_io_read(handle, buf, &len);
        if (ENOERR == err) {
            switch (buf[0]) {
                case '0': test_gpio_led(); break;

                case 'h': diag_printf("%s\n", TEST_HELP_INFO); break;
                default:
                    diag_printf("\n!!!Invalid enter!!!\n\n");
                    diag_printf("%s\n", TEST_HELP_INFO);
                    break;
            }
        } else {
            diag_printf("Read failed from serial!\n");
        }
    }
}

上面的应用例子中:

err = cyg_io_lookup(“/dev/ser0”, &handle),打开串口1设备;err = cyg_io_read(handle, buf, &len),从串口设备读取指定长度的数据。

注:这个示例是我正在编写的测试程序的一部分。有些定义没有给出来,所以直接使用的话,会编译不过。但串口编程应用很简单,就是2步:使用cyg_io_lookup()函数打开串口设备,使用cyg_io_read()或cyg_io_write()函数从串口中读写数据。

» 文章出处: reille博客—http://velep.com , 如果没有特别声明,文章均为reille博客原创作品
» 郑重声明: 原创作品未经允许不得转载,如需转载请联系reille#qq.com(#换成@)
分享到:

  One Response to “stm32移植ecos #14,串口驱动和串口编程”

  1. 串口驱动的配置项名称:ST STM3210E EVAL board,默认值:禁止。
    要使能他,请问怎么使能啊,修改cdl,配置界面上没看到可以使能他的项啊

 Leave a Reply

(必须)

(我会替您保密的)(必须)

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.

   
© 2012 velep.com | reille blog | 管理| 粤ICP备15065318号-2| 谷歌地图| 百度地图| Suffusion theme|Sayontan Sinha

无觅相关文章插件,快速提升流量