stm32串口接收到乱码

前言:之前用的是神州stm32f4那款单片机,但是最近,老师发了一块跟正点原子芯片一样的核心板,当我准备用串口调试时发现发出来的是乱码。本以为是单片机的问题,于是打开之前串口模板程序,发现出来的仍然是乱码。如图:

 

为此,特地百度了一下,发现可能是频率的原因。为此,我也查看了USART1->BRR的值,发现其值为0x2D9.

 

其含义如下:(此部分原文请看 http://www.51hei.com/bbs/dpj-36270-1.html)

BRR中的第四位(DIV_Fraction)作为小数,高12位(DIV_MANtissa)作为整数部分

1,根据公式:波特率=fck/16*usardiv,其中usardivBRR寄存器的值,所以变形得:USARDIV=fck/(16*波特率)

2.算出来BRR寄存器的值后就要把这个值变成16进制数据写入BRR寄存器中,

    遵循以下规则:

   小数部分*16=DIV_Fraction或者取近似的值

   整数部分直接=DIV_MANtissa

3.把这个16进制值写入BRR寄存器

    例如我要算波特率设成9600bps的BRR寄存器值,

    1.先求USARDIV=36000000/16*9600=234.375

    2.换成十六进制:DIV_Fraction=16*0.375=0x6

             DIV_MANtissa=234=0xea

    3.组合并写入寄存器

  USART2->BRR=0x0ea6;值得注意的是这里是16位半字操作,所以不要以为是32位。

 

根据上面的讲解,0x7D9转换成频率就是 83980800,stm32f4的最高频率为84M,所以这个没什么问题

 

我找到一篇文章,作者也遇到同样的问题(原文请看http://www.cnblogs.com/htsky/p/5923422.html),

根据他所讲的,我找到了stm32f4xxx.h,发现文件给的晶振频率为25M,我找到之前的那块板子发现,其频率也是25M,而我现在用的这块板子为8M.。

 

改成8M后数据正常

 

转载于:https://www.cnblogs.com/sjf520528509/p/7121766.html

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值