4574|2

1891

帖子

2

TA的资源

纯净的硅(中级)

楼主
 

SAMR21串口通信 [复制链接]

SAMR21串口通信
串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。(以上内容来自百度百科,详见百度百科(http://baike.baidu.com/link?url=Cf6G7A7nVdH_FM1PYo5U8Ga6z6sQPPqO1sA2X4OPeTemKJLKq3LMsjzEymkQIJZI7XdB1uX017BvhsXjDe9UKq))
串口通信也是经常使用的通信方式,TXD、RXD、GND即可完成通信,对于信息量要求不是太大的数据传输,一般使用串口比较简单。USB传输速度以及稳定性都很好,适合数据量大的传输,通信协议相比USART自然复杂很多。
Atmel Studio中也是提供了很多的例程供大家来参考,但是总是感觉ASF比较臃肿,可能是Atmel要兼容公司大部分产品,各种选择性编译语句也是醉了,真的希望Atmel可以实现高内聚,低耦合,如ST一样提供库函数,用户选择性的添加和使用。AtmelStudio相对于IARkeil有点慢,可能一个原因就是要编译很多的东西,但是自动补全功能还是蛮不错的,因为是自家开发环境,自己的产品,又有强大的ASFAtmelSoftwe Frame),自然开发比第三方好入门。
包装上,写着的三本即可开发:
一、下载安装Atmel Studio
二、打开Atmel Studio
三、将开发板通过USB连接到电脑上
如此简单。
首先来看一下官方给提供的样例程序吧,打开AtmelStudio开发环境,新建一个ExampleProject
ASF中选择SAMR21 搜索USART,可以看到官方提供的四个关于USART的程序,如下:

3-1 ATMEL SAMR21 USART Example
TXDEXT1PIN9  (PA22)
RXDEXT1PIN15 (PB03)
/* Speed totest USART at */
#define TEST_USART_SPEED   115200
我使用的是USBTTLCH340 芯片),与USBTTL连接好之后,配置好与电脑连接ok,之后,电脑上位机配置波特率115200,无校验位,停止位1
现在在AtmelStudio中修改程序如下:

usart_write_buffer_job(&usart_tx_module,"HelloWorld\n",11);
usart_read_buffer_job(&usart_rx_module, usart_temp,5);

上面两个函数分别是串口发出和读取字符串

3-1 ATMEL SAMR21 USART Example

最新回复

你好,我最近在用samd21G17A的usart, 在usart callback example里面也是用到了 usart_write_buffer_job(&usart_tx_module,"HelloWorld\n",11); usart_read_buffer_job(&usart_rx_module, usart_temp,5); 我现在对于接收数据有个问题,在这个例子里面 是必须在mainloop里面不断的读buffer 然后读完了 之前设置好的5 bytes 数据以后,会产生一个中断。 这个是必须要一直在主循环里面执行 usart_read_buffer_job(&usart_rx_module, usart_temp,5); 才能产生中断吗? 可不可以让芯片自动在接收了5个字节之后产生中断呢?而不是在主循环里面一直这样读buffer.  我试着去掉usart_read_buffer_job(&usart_rx_module, usart_temp,5); 然后通过终端给我的板子发送5 bytes数据,但是好像产生不了中断,不知道哪边需要改一下设置?   详情 回复 发表于 2015-3-24 23:39
点赞 关注
个人签名
分享铸就美好未来。。。




 

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你好,我最近在用samd21G17A的usart, 在usart callback example里面也是用到了

usart_write_buffer_job(&usart_tx_module,"HelloWorld\n",11);
usart_read_buffer_job(&usart_rx_module, usart_temp,5);

我现在对于接收数据有个问题,在这个例子里面 是必须在mainloop里面不断的读buffer 然后读完了 之前设置好的5 bytes 数据以后,会产生一个中断。 这个是必须要一直在主循环里面执行 usart_read_buffer_job(&usart_rx_module, usart_temp,5); 才能产生中断吗? 可不可以让芯片自动在接收了5个字节之后产生中断呢?而不是在主循环里面一直这样读buffer.  我试着去掉usart_read_buffer_job(&usart_rx_module, usart_temp,5); 然后通过终端给我的板子发送5 bytes数据,但是好像产生不了中断,不知道哪边需要改一下设置?

点评

发数据很好办,收数据我也在研究,感觉第一次挺正确,后面顺序就报错了,我也跟上位机没调试通,好难过  详情 回复 发表于 2015-3-27 13:20
 
 
 

回复

1891

帖子

2

TA的资源

纯净的硅(中级)

板凳
 
yrhmeamail 发表于 2015-3-24 23:39
你好,我最近在用samd21G17A的usart, 在usart callback example里面也是用到了

usart_write_buffer_job(&usart_tx_module,"HelloWorld\n",11);
usart_read_buffer_job(&usart_rx_module, usart_temp,5);

我现在对于接收数据有个问题,在这个例子里面 是必须在mainloop里面不断的读buffer 然后读完了 之前设置好的5 bytes 数据以后,会产生一个中断。 这个是必须要一直在主循环里面执行 usart_read_buffer_job(&usart_rx_module, usart_temp,5); 才能产生中断吗? 可不可以让芯片自动在接收了5个字节之后产生中断呢?而不是在主循环里面一直这样读buffer.  我试着去掉usart_read_buffer_job(&usart_rx_module, usart_temp,5); 然后通过终端给我的板子发送5 bytes数据,但是好像产生不了中断,不知道哪边需要改一下设置?

发数据很好办,收数据我也在研究,感觉第一次挺正确,后面顺序就报错了,我也跟上位机没调试通,好难过
 
个人签名
分享铸就美好未来。。。




 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表