查看: 3051|回复: 2

SAM4L Xplained Pro starter kit之库函数实现usart串口

[复制链接]
  • TA的每日心情
    奋斗
    2015-10-5 14:38
  • 签到天数: 175 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-11-15 21:45:29 | 显示全部楼层 |阅读模式
    分享到:
        串口,这个对于大家学过MCU的人来说,都不陌生。在ATSAM4L这个系列的单片机上的串口是。普通MCU的串口是是通用异步收发器,简称UART,全称是Universal Asynchronous Receiver/Transmitter,而在ATSAM4L单片机中的串口是是通用同步和异步收发器,简称USART,全称是Universal Synchronous Asynchronous Receiver/Transmitter
    关于串口的基本知识请大家自行百度了。
    下面,我来教大家怎样使用ATSAM4LUSART模块。
    我是在之前自己新建的模板基础上添加的,用的是库函数。
    这次使用了两个函数新的函数,ioport_set_pin_mode(xx,xx)ioport_disable_pin(xx,xx);
    还要增加4个文件,write.cread.cusart.cusart.h文件。把write.cread.cusart.c文件放到LIB->src文件夹中,usart.h放在LIB->inc文件夹中,大家也可以放到别的文件夹,我建议是分类
    QQ截图20141115202505.png
    现在我来说说该怎样配置usart模块吧,我这次是用usart1模块。
    我们的步奏是:
    (1)打开IO口外设的时钟
    (2)设置IOusart口复用
    (3)设置usart
    (4)用户功能实现
    首先打开IO口外设的时钟是用arch_ioport_init()函数,不打开时钟外设是工作不了的,这个大家要注意一下。
    接着设置IOusart口复用,这里要用到ioport_set_pin_mode(xx,xx)ioport_disable_pin(xx,xx);
    这两个函数,第一个函数是设定IO的模式,第二个函数是打开复用功能。笔者我粗心,一开始没注意打开外设复用,导致串口不能工作。我放出ioport_disable_pin的底层吧,如图:
    QQ截图20141115203752.png
    这个在手册能查到它是打开外设功能的作用,如图:
    QQ截图20141115204849.png
    当这个GPER位写0就代表打开外设功能。
    接下来就是串口的参数设置了,我就贴上函数了:
    1. static void configure_console(void)
    2. {
    3. #if 0
    4.         const usart_serial_options_t uart_serial_options = {
    5.                 .baudrate = CONF_UART_BAUDRATE,
    6. #ifdef CONF_UART_CHAR_LENGTH
    7.                 .charlength = CONF_UART_CHAR_LENGTH,
    8. #endif
    9.                 .paritytype = CONF_UART_PARITY,
    10. #ifdef CONF_UART_STOP_BITS
    11.                 .stopbits = CONF_UART_STOP_BITS,
    12. #endif
    13.         };
    14. #else
    15.        usart_serial_options_t uart_serial_options;  
    16.        uart_serial_options.baudrate = CONF_UART_BAUDRATE;
    17.        uart_serial_options.charlength = CONF_UART_CHAR_LENGTH;
    18.        uart_serial_options.paritytype = CONF_UART_PARITY;
    19.        uart_serial_options.stopbits  = CONF_UART_STOP_BITS;
    20. #endif      
    21.         /* Configure console UART. */
    22.         stdio_serial_init(CONF_UART, &uart_serial_options);
    23. }
    复制代码
    上面有两种的串口初始化的方式,我用条件编译把他们区分开来,两种初始化的方式实现效果都是一样的。一些参数的宏定义是:
    /** USART Interface */
    #define CONF_UART              USART1
    /** Baudrate setting */
    #define CONF_UART_BAUDRATE     115200
    /** Character length setting */
    #define CONF_UART_CHAR_LENGTH  US_MR_CHRL_8_BIT
    /** Parity setting */
    #define CONF_UART_PARITY       US_MR_PAR_NO
    /** Stop bits setting */
    #define CONF_UART_STOP_BITS    US_MR_NBSTOP_1_BIT
    做好这些工作后,就可以开始用个printf函数打印了,我就贴上主函数的代码了:
    1. int main()
    2. {
    3.   sysclk_init();
    4.   arch_ioport_init();
    5.   ioport_set_pin_dir(PIN_PC07, IOPORT_DIR_OUTPUT);
    6.   ioport_set_pin_level(PIN_PC07, IOPORT_PIN_LEVEL_LOW);
    7.   
    8.   
    9.   ioport_set_pin_mode(PIN_PC26A_USART1_RXD, MUX_PC26A_USART1_RXD);
    10.   ioport_disable_pin(PIN_PC26A_USART1_RXD);
    11.   ioport_set_pin_mode(PIN_PC27A_USART1_TXD, MUX_PC27A_USART1_TXD);
    12.   ioport_disable_pin(PIN_PC27A_USART1_TXD);
    13.   
    14.   configure_console();

    15.   while (1)
    16.   {
    17.       //printf("\r\n\r\n-- GPIO interrupt and event example --\r\n");
    18.       printf("\r\n\r\n-- 爱板越办越火 --\r\n");
    19.       printf("\r\n\r\n-- 爱板越办越火 --\r\n");
    20.   }
    21.   
    22. }
    复制代码
    功能就是不断打印"爱板越办越火"的信息。
    套件的串口接线如图:
    IMG_20141115_212410.jpg
    串口打印的信息:
    QQ截图20141115212351.png

    下面放出我的工程文件:
    串口.zip (856.63 KB, 下载次数: 5)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-7-21 12:58
  • 签到天数: 907 天

    连续签到: 2 天

    [LV.10]以坛为家III

    发表于 2014-11-17 10:36:41 | 显示全部楼层
    不错顶起来 大家好好学!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-5 14:38
  • 签到天数: 175 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-11-17 12:31:57 | 显示全部楼层
    expertss 发表于 2014-11-17 10:36
    不错顶起来 大家好好学!!!

    谢谢支持
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-23 02:36 , Processed in 0.133599 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.