【主要区别】:
STM32F103与STM32F107使用同一套库函数以及同一个参考手册。只是F107属于互联型设备,比F103多了OTG USB和Ethernet模块,因此两款单片机的.s启动文件不同(STM32F107完全可以按照STM32F103建工程的方式建立,只是使用的.s启动文件不同,其他完全一样)。
①. STM32F103使用startup_stm32f10x_hd.s(以STM32F103ZET6为例,后面103均以该型号单片机举例)文件, STM32F107使用startup_stm32f10x_cl.s文件。
②. STM32F103库函数中默认使用外部晶振为8M进行时钟的配置,最后得到的系统时钟频率为72M。而STM32F107库函数中默认使用的外部晶振为25M进行时钟的配置,最后得到的系统时钟频率也为72M。
【程序移植配置】:
1. 程序工程建立完成后,对预编译头文件更改。Options->C/C++->Define,F103对应STM32F10X_HD(大容量),F107对应STM32F10X_CL。
2. STM32F103标准外设库中默认使用的外部晶振为8M,STM32F107标准外设库中默认使用的外部晶振为25M。如果107也使用8M的外部晶振,则需要对库函数中的系统总线时钟进行重新配置,否则得到的默认库函函数使用25M晶振会导致计算得到的系统总线时钟不准确。
打开库文件stm32f10x.h,找到如下图所示位置,将HSE_VALUE的宏定义改为8M(根据自己实际使用的外部晶振进行修改)。:
3. 107计算总线时钟也是默认按照25M的外部晶振来计算的。因此,需要在system_stm32f10x.c文件中对总线时钟的计算方式进行修改。如下所示:
我们使用8M晶振的话,直接将上图红色箭头所示部分直接删除即可,如果使用其他型号的外部晶振,则需要对上图红色箭头部分的计算公式进行调整,无论是103还是107最后计算得到的总线时钟频率都为72M。
参考资料:
STM32F107(互联网型)外部晶振用25MHZ 而STM32F103却用8MHZ的原因及其时钟来源分析_指 纹的博客-CSDN博客