4956|13

1291

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

SAM4L Xplained Pro starter kit之库函数实现usart串口 [复制链接]

      串口,这个对于大家学过MCU的人来说,都不陌生。在ATSAM4L这个系列的单片机上的串口是。普通MCU的串口是是通用异步收发器,简称UART,全称是Universal Asynchronous Receiver/Transmitter,而在ATSAM4L单片机中的串口是是通用同步和异步收发器,简称USART,全称是Universal Synchronous Asynchronous Receiver/Transmitter。关于串口的基本知识请大家自行百度了。下面,我来教大家怎样使用ATSAM4L的USART模块。我是在之前自己新建的模板础上添加的,用的是库函数。这次使用了两个函数新的函数,ioport_set_pin_mode(xx,xx),ioport_disable_pin(xx,xx);
还要增加4个文件,write.c和read.c,usart.c和usart.h文件。把write.c,read.c和usart.c文件放到LIB->src文件夹中,usart.h放在LIB->inc文件夹中,大家也可以放到别的文件夹,我建议是分类

现在我来说说该怎样配置usart模块吧,我这次是用usart1模块。
我们的步奏是:
(1)打开IO口外设的时钟
(2)设置IO为usart口复用
(3)设置usart
(4)用户功能实现
首先打开IO口外设的时钟是用arch_ioport_init()函数,不打开时钟外设是工作不了的,这个大家要注意一下。
接着设置IO为usart口复用,这里要用到ioport_set_pin_mode(xx,xx),ioport_disable_pin(xx,xx);
这两个函数,第一个函数是设定IO的模式,第二个函数是打开复用功能。笔者我粗心,一开始没注意打开外设复用,导致串口不能工作。我放出ioport_disable_pin的底层吧,如图:

这个在手册能查到它是打开外设功能的作用,如图:

当这个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. }
复制代码
上面有两种的串口初始化的方式,我用条件编译把他们区分开来,两种初始化的方式实现效果都是一样的。一些参数的宏定义是:
  1. /** USART Interface */
  2. #define CONF_UART              USART1
  3. /** Baudrate setting */
  4. #define CONF_UART_BAUDRATE     115200
  5. /** Character length setting */
  6. #define CONF_UART_CHAR_LENGTH  US_MR_CHRL_8_BIT
  7. /** Parity setting */
  8. #define CONF_UART_PARITY       US_MR_PAR_NO
  9. /** Stop bits setting */
  10. #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-- eeworld越办越火 --\r\n");
  18.       printf("\r\n\r\n-- eeworld越办越火 --\r\n");
  19.   }
  20.   
  21. }
复制代码

串口打印的信息:


最新回复

就是一个单片机配置多个usart串口同时进行工作  详情 回复 发表于 2015-7-29 11:58

赞赏

2

查看全部赞赏

点赞 关注
 

回复
举报

1071

帖子

7

TA的资源

纯净的硅(中级)

沙发
 
很详细  感谢楼主分享

点评

谢谢支持,后续还会有教程  详情 回复 发表于 2014-11-29 12:16
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

板凳
 
dj狂人 发表于 2014-11-29 12:06
很详细  感谢楼主分享
谢谢支持,后续还会有教程

点评

期待楼主的更多分享  详情 回复 发表于 2014-11-29 15:32
 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

4
 
强仔00001 发表于 2014-11-29 12:16
谢谢支持,后续还会有教程


期待楼主的更多分享

点评

一定滴,刚弄完了段码液晶屏  详情 回复 发表于 2014-11-30 23:42
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

5
 
dj狂人 发表于 2014-11-29 15:32
期待楼主的更多分享
一定滴,刚弄完了段码液晶屏
 
 
 

回复

1万

帖子

24

TA的资源

版主

6
 
很详细。
 
 
 

回复

79

帖子

1

TA的资源

一粒金砂(中级)

7
 
支持一下!

点评

谢谢支持,你也拿到不错的东西呀  详情 回复 发表于 2014-12-15 22:45
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

8
 
谢谢支持,你也拿到不错的东西呀
 
 
 

回复

6

帖子

2

TA的资源

一粒金砂(中级)

9
 
您好,我有个问题想请教您,对于sam d21要实现多串口usart同时运行要如何配置。谢谢!

点评

我也是刚拿到这个片子,没有了解  详情 回复 发表于 2015-7-26 20:15
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

10
 
江南烟雨梦 发表于 2015-7-26 11:59
您好,我有个问题想请教您,对于sam d21要实现多串口usart同时运行要如何配置。谢谢!

我也是刚拿到这个片子,没有了解
 
 
 

回复

6

帖子

2

TA的资源

一粒金砂(中级)

11
 
那我想问,你有没有试过别的单片机同时进行串口传输。

点评

好像没有,你在两个单片机串口通信?  详情 回复 发表于 2015-7-27 19:52
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

12
 
江南烟雨梦 发表于 2015-7-26 21:26
那我想问,你有没有试过别的单片机同时进行串口传输。

好像没有,你在两个单片机串口通信?

点评

就是一个单片机配置多个usart串口同时进行工作  详情 回复 发表于 2015-7-29 11:58
 
 
 

回复

6

帖子

2

TA的资源

一粒金砂(中级)

13
 
强仔00001 发表于 2015-7-27 19:52
好像没有,你在两个单片机串口通信?

就是一个单片机配置多个usart串口同时进行工作

点评

这个应该不难吧,我最多开两个工作  详情 回复 发表于 2015-7-29 23:22
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

14
 
江南烟雨梦 发表于 2015-7-29 11:58
就是一个单片机配置多个usart串口同时进行工作

这个应该不难吧,我最多开两个工作
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表