打印
[国产单片机]

串口的波特率怎么实现自适应?

[复制链接]
2924|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
MJM_WSY|  楼主 | 2013-10-26 21:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
谈的元| | 2013-10-26 22:50 | 只看该作者
本帖最后由 谈的元 于 2013-10-26 22:54 编辑

先设置高频率,串口出错的话,然后降低频率试探,直到正确,

还可以加一个IO口测量电平时间来计算

使用特权

评论回复
板凳
pattywu| | 2013-10-28 08:27 | 只看该作者

使用特权

评论回复
地板
老鱼探戈| | 2013-10-28 16:35 | 只看该作者
楼主的意思是系统时钟改变时导致通信双方不匹配
可以通过宏定义固定通信双方的波特率

使用特权

评论回复
5
MJM_WSY|  楼主 | 2013-10-28 17:26 | 只看该作者
谈的元 发表于 2013-10-26 22:50
先设置高频率,串口出错的话,然后降低频率试探,直到正确,

还可以加一个IO口测量电平时间来计算 ...

我怎么感觉第一个一个一个实验的办法不太靠谱呢?
第二种你有没有实现的代码?

使用特权

评论回复
6
MJM_WSY|  楼主 | 2013-10-28 17:26 | 只看该作者
pattywu 发表于 2013-10-28 08:27
我的帖子。
    http://www.amobbs.com/thread-5478970-1-1.html

哈哈!你这帖子我看比较靠谱!

使用特权

评论回复
7
MJM_WSY|  楼主 | 2013-10-28 17:28 | 只看该作者
老鱼探戈 发表于 2013-10-28 16:35
楼主的意思是系统时钟改变时导致通信双方不匹配
可以通过宏定义固定通信双方的波特率 ...

你理解我的意思!但是你的实现方式   有何代码?

使用特权

评论回复
8
老鱼探戈| | 2013-10-28 17:44 | 只看该作者
MJM_WSY 发表于 2013-10-28 17:28
你理解我的意思!但是你的实现方式   有何代码?

串口的波特率大小,无非就是初值的大小,通过宏定义系统时钟自由选择初始值就可以了。
例如:
//#define        SYS_CLOCK         8000000
#define        SYS_CLOCK         16000000

#if        SYS_CLOCK == 8000000
#define UART_BAUD_RATE                        (65536-(SYS_CLOCK/(32*(UINT32)19200)))  // 19200
#elif        SYS_CLOCK == 16000000
#define UART_BAUD_RATE                        (65536-(SYS_CLOCK/(32*38400)))  // 38400
#elif
#error "BAUD RATE ERROR!"
#endif
这里只用到两种系统时钟,你可以随意发挥。
接下来就是装载初始值了:
 RCAP2H = UART_BAUD_RATE>>8 ;
        RCAP2L =UART_BAUD_RATE & 0xff;
        TH2 = UART_BAUD_RATE>>8 ;
        TL2 =UART_BAUD_RATE & 0xff;

使用特权

评论回复
9
谈的元| | 2013-10-28 22:43 | 只看该作者
MJM_WSY 发表于 2013-10-28 17:26
我怎么感觉第一个一个一个实验的办法不太靠谱呢?
第二种你有没有实现的代码? ...

哪里不靠谱呢?说说看

使用特权

评论回复
10
MJM_WSY|  楼主 | 2013-10-29 13:56 | 只看该作者
谈的元 发表于 2013-10-28 22:43
哪里不靠谱呢?说说看

我是用单片机给串口发送数据,怎么才能知道有没有发送成功?

使用特权

评论回复
11
谈的元| | 2013-10-29 21:16 | 只看该作者
本帖最后由 谈的元 于 2013-10-29 21:22 编辑

有接收出错标记

使用特权

评论回复
12
谈的元| | 2013-10-29 21:22 | 只看该作者
有接收吧,莫非你不接收?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:技术没有制高点

13

主题

367

帖子

2

粉丝