前几天在中移物联网申请了一个迷你开发板,运行官方提供的程序,感受板子是正常的。可是本身写的程序可以刷到板子上,可是串口倒是乱码。官方和个人额程序都是用的库函数的方式写的。在网上,有人说库函数默认是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 \t %d\r\n",USART1->BRR); 语句,发现
在设定波特率为115200下,官方数值为625,而个人程序为521
在设定波特率为9600下,官方数值为7500,个人程序为6250
依此判断,还频率的问题形成的。怎么修正还得研究。
找到 “MDK安装目录\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include\stm32f10x.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文件了。
结论,一、“option for target”->"target"里将Xtal(MHz)的参数仅用于模拟调试,不影响实际板卡的参数设置。系统提供的文件能够被修改。三、在错位的状况下,芯片可能被超频了。可是还能运行(没坏)。
看似上述很少的文字,却耗费了我几周的业余时间作各类验证测试。但愿可以帮助有此类问题的朋友。