智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4829|回复: 7
打印 上一主题 下一主题

用野火K60库的麻烦看一下串口波特率的问题

[复制链接]

31

主题

509

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3671
威望
1728
贡献
923
兑换币
1150
注册时间
2013-1-14
在线时间
510 小时
跳转到指定楼层
1#
发表于 2013-6-5 18:35:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是野火K60的底层驱动,
使用的UART2,内核频率125MHZ,总线频率62.5MHZ
只能使用9600的波特率,
波特率一高就乱码,连15200的波特率都不能使用,
我知道是串口时钟频率设置的问题,
不知道如何修改uart_init()函数?



在论坛上看到的是修改这里的总线频率,说是把bus_clk_khz改成90000,但是依然没有效果,
要修改哪里才能使波特率正常?
求大神帮忙解答。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
推荐
发表于 2013-6-5 20:37:17 | 只看该作者
修改波特率,直接在 k60_fire.h 文件里修改
  1. /*************************************************************************
  2. *                             野火嵌入式开发工作室
  3. *
  4. *  功能说明:定义 printf函数 的 串口输出端口 和 串口信息
  5. *  备    注:
  6. *************************************************************************/
  7. #define FIRE_PORT           UART2
  8. #define FIRE_BAUD           115200
复制代码
回复 支持 1 反对 0

使用道具 举报

31

主题

509

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3671
威望
1728
贡献
923
兑换币
1150
注册时间
2013-1-14
在线时间
510 小时
2#
 楼主| 发表于 2013-6-5 18:36:43 | 只看该作者
sofa
回复 支持 反对

使用道具 举报

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
3#
发表于 2013-6-5 20:19:57 | 只看该作者
本帖最后由 野火 于 2013-6-5 20:33 编辑

实测我们的代码可用 UART2 ,内核125M,bus 62.5M 下正常使用,波特率 115200 、19200 、9600 都可正常使用

先重新 rebuild 一下工程试试能不能用更高的波特率,如果不行,

请考虑是否硬件问题,例如 无线模块的波特率本来受限于无线模块,或者 使用质量较差的 USB转串口线等


回复 支持 反对

使用道具 举报

31

主题

509

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3671
威望
1728
贡献
923
兑换币
1150
注册时间
2013-1-14
在线时间
510 小时
5#
 楼主| 发表于 2013-6-5 21:27:16 | 只看该作者
野火 发表于 2013-6-5 20:37
修改波特率,直接在 k60_fire.h 文件里修改

火哥,这个地方我改过了,是按照那个教程来设置的。
回复 支持 反对

使用道具 举报

31

主题

509

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3671
威望
1728
贡献
923
兑换币
1150
注册时间
2013-1-14
在线时间
510 小时
6#
 楼主| 发表于 2013-6-5 21:30:29 | 只看该作者
野火 发表于 2013-6-5 20:19
实测我们的代码可用 UART2 ,内核125M,bus 62.5M 下正常使用,波特率 115200 、19200 、9600 都可正常使用 ...

恩,好的,火哥,我检查一下硬件的问题
回复 支持 反对

使用道具 举报

31

主题

509

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3671
威望
1728
贡献
923
兑换币
1150
注册时间
2013-1-14
在线时间
510 小时
7#
 楼主| 发表于 2013-6-5 22:23:05 | 只看该作者
野火 发表于 2013-6-5 20:19
实测我们的代码可用 UART2 ,内核125M,bus 62.5M 下正常使用,波特率 115200 、19200 、9600 都可正常使用 ...


实践证明,
当波特率为9600时, sbr = (u16)(sysclk / (baud << 4));这里为4时正常。
当波特率为19200时,sbr = (u16)(sysclk / (baud << 3));这里为3时正常。
当波特率为38400时,sbr = (u16)(sysclk / (baud << 2));这里为2时正常。
我不知道为什么,这只是我吃饭的时候想到的可能出现问题的地方,
结果一试验,真的解决了这个问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
8#
发表于 2013-6-6 08:05:01 | 只看该作者
CQQ 发表于 2013-6-5 22:23
实践证明,
当波特率为9600时, sbr = (u16)(sysclk / (baud

baud ,你看看传递进去的值对不对,单步调试进入函数里面,在 watch 看

按理是不需要那样的设置的

回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-20 18:39 , Processed in 0.049897 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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