STM32
直播中

可口可甜

8年用户 844经验值
私信 关注
[问答]

stm32串口接收到乱码的原因?如何解决?

STM32串口接收到乱码的原因?如何解决?

回帖(1)

云甫太

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




   
  为此,特地百度了一下,发现可能是频率的原因。为此,我也查看了USART1->BRR的值,发现其值为0x2D9.
  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,所以这个没什么问题
  根据他所讲的,我找到了stm32f4xxx.h,发现文件给的晶振频率为25M,我找到之前的那块板子发现,其频率也是25M,而我现在用的这块板子为8M.。
  




   
  改成8M后数据正常
  

举报

更多回帖

发帖
×
20
完善资料,
赚取积分