OpenEdv-开源电子网

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

关于原子哥程序串口部分计算波特率的问题

[复制链接]

16

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2011-1-27
在线时间
0 小时
发表于 2013-5-24 10:57:02 | 显示全部楼层 |阅读模式

直接调用,原子哥关于计算波特率部分的程序:
float temp;
 u16 mantissa;
 u16 fraction;

 temp=(float)(36*1000000)/(dwBaudrate*16);  //得到USARTDIV
 mantissa=temp;      //得到整数部分
 fraction=(temp-mantissa)*16;          //得到小数部分  
 mantissa<<=4;
 mantissa+=fraction;
 return mantissa;

但是我仿真之后发现:写进寄存器的部分只有整数部分,无小数部分,不知道原因是什么,因此,我就改用了IAR例程中的,没有问题。下面是我的程序
u32 tmpreg = 0x00;
u32 integerdivider = 0x00;
u32 fractionaldivider = 0x00;
 integerdivider = ((0x19 * 36 * 1000000) / (0x04 * (dwBaudrate)));
tmpreg = (integerdivider / 0x64) << 0x04;

fractionaldivider = integerdivider - (0x64 * (tmpreg >> 0x04));
tmpreg |= ((((fractionaldivider * 0x10) + 0x32) / 0x64)) & ((u8)0x0F);  
return tmpreg;

有人遇到过我这个问题吗?

【补充】,我又测试了一下,只仿真没有问题,只要下载程序就有问题。我用的IAR5.2,用IAR6.0没有问题。有人知道原因吗??

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

180

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2013-4-23
在线时间
25 小时
发表于 2013-5-24 13:10:09 | 显示全部楼层
回复【楼主位】玉珊瑚:
---------------------------------
波特率是多少,从上面的计算9600算出来是没小数
回复 支持 反对

使用道具 举报

16

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2011-1-27
在线时间
0 小时
 楼主| 发表于 2013-5-24 13:38:15 | 显示全部楼层
波特率是9600
最后返回的时候应该是EA6,但是返回的是EA0
我用的是USART2
回复 支持 反对

使用道具 举报

15

主题

180

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2013-4-23
在线时间
25 小时
发表于 2013-5-24 14:12:57 | 显示全部楼层
回复【3楼】玉珊瑚:
---------------------------------
按你那个代码算下来是3750,没有错。是你自己看的返回值错了,3744是没有加上小数*16的
回复 支持 反对

使用道具 举报

53

主题

608

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2013-3-29
在线时间
18 小时
发表于 2013-5-24 18:39:35 | 显示全部楼层
mantissa=temp;      //得到整数部分
fraction=(temp-mantissa)*16;          //得到小数部分
这样算出来,fraction永远是0啊??
学电子,学音乐!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-24 19:41:35 | 显示全部楼层
回复【5楼】XINSI:
---------------------------------
你实际仿真看看吧!
软件仿真就可以看出来.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

53

主题

608

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2013-3-29
在线时间
18 小时
发表于 2013-5-24 20:31:23 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
恩,就是想不明白,
mantissa=temp;      //得到整数部分 
fraction=(temp-mantissa)*16;          //得到小数部分 
这样算出来,fraction应该是0啊。很奇怪
学电子,学音乐!!
回复 支持 反对

使用道具 举报

16

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2011-1-27
在线时间
0 小时
 楼主| 发表于 2013-5-30 16:22:01 | 显示全部楼层
回复【7楼】XINSI:
---------------------------------
temp是浮点数,所以应该是带小数点的
mantissa是整数,所以不带小数点,他俩相减得到的就是小数点部分,然后乘以16,就得到小数点转换之后的了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-19 05:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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