stm32串口接收到乱码

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

stm32串口接收到乱码_第1张图片

 

为此,特地百度了一下,发现可能是频率的原因。为此,我也查看了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.。

stm32串口接收到乱码_第2张图片

 

改成8M后数据正常

stm32串口接收到乱码_第3张图片

 

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

你可能感兴趣的:(stm32串口接收到乱码)