野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18663|回复: 19

火哥,问你个串口通讯的问题

[复制链接]
发表于 2017-3-3 10:19:40 | 显示全部楼层 |阅读模式
怎么自己写一套通信协议,数据包包括起始位,数据,结束位,要求接收到错误数据会自动排除,有超时等待。

回复

使用道具 举报

发表于 2017-3-3 10:35:11 | 显示全部楼层
参考一下成熟的协议,例如modbus等
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-3 10:43:08 | 显示全部楼层
那你有没有modbus的例程
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-3 10:44:10 | 显示全部楼层
flyleaf 发表于 2017-3-3 10:35
参考一下成熟的协议,例如modbus等


那你有没有modbus的例程
回复 支持 反对

使用道具 举报

发表于 2017-3-3 10:46:57 | 显示全部楼层
爱学习的小伙伴 发表于 2017-3-3 10:44
那你有没有modbus的例程

没有,协议标准的话网上搜下就好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-3 10:47:49 | 显示全部楼层
flyleaf 发表于 2017-3-3 10:46
没有,协议标准的话网上搜下就好

好的,谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-3 10:52:18 | 显示全部楼层
flyleaf 发表于 2017-3-3 10:46
没有,协议标准的话网上搜下就好

你可以写给我看看么?
回复 支持 反对

使用道具 举报

发表于 2017-3-3 11:05:55 | 显示全部楼层
协议自己定义就好了,收发两端统一就没有问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-3 12:23:11 | 显示全部楼层
wmaxwell 发表于 2017-3-3 11:05
协议自己定义就好了,收发两端统一就没有问题。

那你可以写给我看看么?
回复 支持 反对

使用道具 举报

发表于 2017-3-3 13:03:31 | 显示全部楼层
比如你可以定义一个包头<
包尾>
中间表示你的内容

比如你发一帧数据,应该这样发:
<123456>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-3 16:01:05 | 显示全部楼层
wmaxwell 发表于 2017-3-3 13:03
比如你可以定义一个包头<
包尾>
中间表示你的内容

表示不太懂,可以具体点么
回复 支持 反对

使用道具 举报

发表于 2017-3-3 16:53:34 | 显示全部楼层
还没动啊……你看看modbus吧,理解就明白我的意思了
回复 支持 反对

使用道具 举报

发表于 2017-3-3 17:03:49 | 显示全部楼层
爱学习的小伙伴 发表于 2017-3-3 16:01
表示不太懂,可以具体点么

你问的太牛逼了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-3 19:04:06 | 显示全部楼层
fire 发表于 2017-3-3 17:03
你问的太牛逼了

不可能吧,火哥,你不会么?我不相信
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-3 19:05:43 | 显示全部楼层
wmaxwell 发表于 2017-3-3 16:53
还没动啊……你看看modbus吧,理解就明白我的意思了

就是不懂,写给我看看咯
回复 支持 反对

使用道具 举报

发表于 2017-7-25 19:00:55 | 显示全部楼层
fire 发表于 2017-3-3 17:03
你问的太牛逼了

火哥,在串口通信实验中(polling),我用串口2打印数据,RXD接PA2,TXD接PA3,其他的没变,串口指示灯是亮
  1.         /* config USART1 clock */
  2.                 RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB2Periph_GPIOA, ENABLE)
复制代码
的,GPIO修改为2,3,相关代码我也改了,没有报错,下载进去时按复位没有打印数据,怎么解?
回复 支持 反对

使用道具 举报

发表于 2017-7-26 09:49:02 | 显示全部楼层
zhaoyang 发表于 2017-7-25 19:00
火哥,在串口通信实验中(polling),我用串口2打印数据,RXD接PA2,TXD接PA3,其他的没变,串口指示灯是 ...

串口1和串口2的时钟不一样,你修改了没有。
回复 支持 反对

使用道具 举报

发表于 2017-7-29 15:17:43 | 显示全部楼层
串口2的时钟我看了一下书,也查了百度,串口1时钟最大为72M,预分频APB2。串口2时钟最大为36M,APB1.
你看一下这样修改后的时钟代码,是不是这样:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB2Periph_GPIOA, ENABLE);

编译无错误,打开串口后什么数据都没有。!!
回复 支持 反对

使用道具 举报

发表于 2017-7-29 16:45:46 | 显示全部楼层
谢谢火哥帮忙,找到原因了,串口1时钟需要和管脚的时钟是相同的,而串口的则不同,需要分开定义。
回复 支持 反对

使用道具 举报

发表于 2017-7-29 18:10:53 | 显示全部楼层
fire 发表于 2017-7-26 09:49
串口1和串口2的时钟不一样,你修改了没有。

火哥,下午好,再问你一个问题啊!我用DMA2实现LED1闪烁,同时串口打印数据,DMA2与UART4挂钩的,通道是3,串口4中TX是PC10,RX是PC11,(串口通信(polling)实验中我实现了用串口4打印数据),各个时钟我都是分开设置的,结果是:编译都是没错的,只有复位后串口4有数据打印,但是串口4没有一直打印“A”,我把串口4的基地址0x40004C直接加数据寄存器偏移地址0X04,对吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 21:51 , Processed in 0.036344 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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