OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5958|回复: 15

串口通讯的一些概念 求解释!!!!

[复制链接]

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
发表于 2014-3-21 14:18:08 | 显示全部楼层 |阅读模式
 USART UART RS232 RS485  CAN总线   这些东西概念很混(不要吐槽我,非相关专业学习者),学STM32上只知道USART与PC通信过而已,其他经常看见这些(RS232 RS485 MAX232),而不能准确知道。    有没有人能耐下心来  简要的解答一下     


USART和UART的寄存器基本一致有,他们区别联系?

RS232仅仅是个DB9的接口而已吧?

UART与RS485是啥关系?

MAX232是电平转换的东西,为啥要转换?意义和作用是什么?

最后一个问题  怎么学CAN总线比较科学 高效
1369813157  衣冠民
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-3-21 14:25:24 | 显示全部楼层
UART 是同步通信,USART是同步/异步通信。RS232,RS485是不同的总线标准,串口通信是负逻辑电平,需要转换为TTL电平,所以需要MAX232进行转换

CAN的资料可以在论坛里搜下,挺多的
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-21 15:39:32 | 显示全部楼层
回复【2楼】745021926:
---------------------------------网上有人说USART跟RS232其实是一回事  你怎么看?
1369813157  衣冠民
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-21 15:40:20 | 显示全部楼层
回复【3楼】衣冠民:
---------------------------------
 我理解中的USART是一个打包处理的过程  而RS232是接口跟传输的过程  我理解的有偏差吗?
1369813157  衣冠民
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-3-21 15:47:47 | 显示全部楼层
回复【4楼】衣冠民:
---------------------------------
差不多
回复 支持 反对

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-3-21 15:49:34 | 显示全部楼层
USART是设备名,RS232是接口标准
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-26 21:47:37 | 显示全部楼层
回复【2楼】745021926:
---------------------------------
UART是异步通信~~~~~
1369813157  衣冠民
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-26 21:49:40 | 显示全部楼层
回复【6楼】745021926:
---------------------------------
USART应该是内核外设吧?  请问你说USART是设备名  是什么意思呢?
1369813157  衣冠民
回复 支持 反对

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-3-26 21:51:22 | 显示全部楼层
回复【8楼】衣冠民:
---------------------------------
恩 ,一个意思,外设就是外部设备啊...   :-)
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-26 21:57:25 | 显示全部楼层
回复【9楼】745021926:
---------------------------------
恩  内核外设跟外设在我看来差距蛮大的  谢谢你啊
1369813157  衣冠民
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-26 21:57:56 | 显示全部楼层
回复【9楼】745021926:
---------------------------------
能问你一个串口的问题吗
1369813157  衣冠民
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-26 21:58:03 | 显示全部楼层
void RS485_Receive_Data(u8 *buf,u8 *len)
{
 u8 rxlen=RS485_RX_CNT;
 u8 i=0;
 *len=0;  
 delay_ms(10);  
 if(rxlen==RS485_RX_CNT&&rxlen)
 {
  for(i=0;i<rxlen;i++)
  {
   buf=RS485_RX_BUF
  }  
  *len=RS485_RX_CNT; 
  RS485_RX_CNT=0; 
 }
}
问题1:头指针*buf 指向接收缓冲首地址中的内容 len表示发送的字节数那么*len时表示接收的位数吗?如果是那么len是不是也是数组?
问题2:RS485_RX_CNT表示STM32接收数据寄存器接收到数据的长度,rxlen==RS485_RX_CNT&&rxlen为什么能表示是否接收完成?
问题3:  buf=RS485_RX_BUF;  这两个缓冲寄存器分别代表什么?>
1369813157  衣冠民
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-26 21:58:33 | 显示全部楼层
今天看了一天的书 看到现在反而糊涂了  求指导啊
1369813157  衣冠民
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-26 22:00:50 | 显示全部楼层
回复【9楼】745021926:
---------------------------------
void RS485_Receive_Data(u8 *buf,u8 *len) 

 u8 rxlen=RS485_RX_CNT; 
 u8 i=0; 
 *len=0;   
 delay_ms(10);   
 if(rxlen==RS485_RX_CNT&&rxlen) 
 { 
  for(i=0;i<rxlen;i++) 
  { 
   buf=RS485_RX_BUF;  
  }   
  *len=RS485_RX_CNT;  
  RS485_RX_CNT=0;  
 } 

问题1:头指针*buf 指向接收缓冲首地址   len表示发送的字节数那么*len时表示接收的位数吗?如果是那么len是不是也是数组? 
问题2:RS485_RX_CNT表示STM32接收数据寄存器接收到数据的长度,rxlen==RS485_RX_CNT&&rxlen为什么能表示是否接收完成? 
问题3:  buf=RS485_RX_BUF;  这两个缓冲寄存器分别代表什么?>
1369813157  衣冠民
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-27 00:20:46 | 显示全部楼层
回复【14楼】衣冠民:
---------------------------------
1,len是用来告诉上一级函数,此次接收了多少个字节,这是个指针而已,不是数组,改变的是指针指向地址的值。
2,因为如果10ms内,还没收到一个字节,说明一次发送完成了(如果是连续发送,2个字节之间的间隔,不可能大于10ms@波特率9600)
3,buf代表输出的数组首地址,RS485_RX_BUF是485接收缓存器 。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-27 21:52:11 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------谢谢你的解答  真心感谢  学了固件库感觉到我的c差到好像未曾学习过   现在有点挫败感  尤其是问题如雨后春笋般冒出来的时候   有人告诉能用就行   这些人我感觉太没追求了   拿着你的代码改一下   但是我感觉改完了我还是没深入的理解  汗颜啊
1369813157  衣冠民
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 00:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表