• stm32 串口乱码的解决


    前几天在中移物联网申请了一个迷你开发板,运行官方提供的程序,感觉板子是正常的。但是自己写的程序能够刷到板子上,但是串口却是乱码。官方和我的额程序都是用的库函数的方式写的。在网上,有人说库函数默认是8兆晶振,但是“option for target”->"target"里将Xtal(MHz)设置为12,也不起作用。
     
    对比发现,官方的库函数,都是在程序文件里的,mdk应该是4.X版的。我用的mdk5.X版的,后来在官网下载了5.21a的版本依然是同样的错误。
    我自己的程序的库文件是从 mdk的“Manage Run-Time Environment”界面下的Device -> StdPeriph Drivers 里选择对应文件。
    这些由系统提供的文件上都有一个锁,在编辑器里也无法修改。
     
    在官方和我的程序里都加上 printf("3-USART1->BRR %d ",USART1->BRR); 语句,发现
     
    在设定波特率为115200下,官方数值为625,而我的程序为521
    在设定波特率为9600下,官方数值为7500,我的程序为6250
     
    依此判断,还频率的问题造成的。怎么修正还得研究。
     
    找到 “MDK安装目录ARMPACKKeilSTM32F1xx_DFP2.1.0DeviceIncludestm32f10x.h”,在120行开始显示:
    #if !defined  HSE_VALUE
     #ifdef STM32F10X_CL   
      #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
     #else 
      #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
     #endif /* STM32F10X_CL */
    #endif /* HSE_VALUE */
     
     
    曾经也尝试着自行定义 “#define HSE_VALUE    ((uint32_t)12000000)”也不起作用。
    后来,无意间发现,系统提供的文件,都是只读属性。去掉只读属性,在mdk里,钥匙图标没有了,可以修改stm32f10x.h文件了。
     
    结论,1、“option for target”->"target"里将Xtal(MHz)的参数仅用于模拟调试,不影响实际板卡的参数设置。系统提供的文件可以被修改。3、在错位的情况下,芯片可能被超频了。但是还能运行(没坏)。
     
    看似上述不多的文字,却耗费了我几周的业余时间做各种验证测试。希望能够帮助有此类问题的朋友。
  • 相关阅读:
    3D标签云
    IntelliJ IDEA 13.1.1版本偶然的错误
    414. Third Maximum Number
    217. Contains Duplicate
    442.Find All Duplicates in an Array
    3D轮播图
    448. Find All Numbers Disappeared in an Array
    Beautifulsoup模块
    MySQL数据库
    常用模块
  • 原文地址:https://www.cnblogs.com/htsky/p/5923422.html
Copyright © 2020-2023  润新知