APM32F103RCT6替代STM32F107RCT6程序不变

由于芯片价格上涨,产品成本增加,选用APM32F103RCT6替代STM32F107RCT6,原本板子上使用的是STM32F107RCT6,没有使用网络功能,使用的时钟源是25MHZ的外部晶振,开发平台是keil5。

1、是根据引脚的数量和容量大小进行区分的,两款芯片可以通用。

2、标准固件库也一样。

3、外部晶振有差异107默认使用25MHZ 103一般默认8MHZ。

4、如果不使用网络,OTG、以太控制器,两款芯片基本可以完成替换。

这些是背景的介绍。

要完成芯片的替换,主要考虑两件事:

1、考虑外部晶振、107是互联型 MCU区别与F103,因为他们具有USB OTG功能,因此需要特别的时钟。一般我们使用外部25MHZ振晶,方便提供USB或以太网相关时钟频率。而103 HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。因此很明显,我们第一个要考虑的是外部晶振的适配。对于此问题,有两种解决方式,一、是修改外部晶振,把25MHZ的晶振替换为4MHz~16MHz这个范围内的晶振,最好是8MHZ,官方推荐的是8MHZ,但是8MHZ价格比较高,国内的8MHZ精度达不到。价格大概是2元一块,如果是用于生产产品,则推荐使用16MHZ,因为16MHZ的晶振价格便宜,大约是0.4元。由于,我手头只有一块12MHZ的晶振,下面我将以12MHZ晶振芯片为例,介绍一下,我的配置过程。二、是使用内部的HSI 8MHZ晶振。

2、考虑107和103芯片型号的替换。

下面是具体操作步骤。

(1)、首先把板卡上的25MHZ晶振替换成12MHZ晶振芯片,然后,用烙铁把STM32F107RCT6芯片去掉,重新焊接APM32F103RCT6。

(2)点击魔术棒,

选择APM32103RC这个包,其实选择STM32103RC的包也能用,我试过可以用。然后点击OK

(3)选择12MHZ

(4)、F103对应的startup_stm32f10x_hd.s文件和F107对应的startup_stm32f10x_cl.s文件。

F103对应STM32F10X_HD(大容量),F107对应STM32F10X_CL。(互联型产品)

在stm32f10x.h中有对外部晶振频率的宏定义,并且在注释中有提到为了避免修改该库文件,用户可以在工具链编译器预处理中定义该值

(5)、根据上图步骤8和下表选择第十步要添加的内容。

#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) &&
!defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) 
  /* #define STM32F10X_LD */     /*!< STM32F10X_LD: STM32 Low density devices */
  /* #define STM32F10X_LD_VL */  /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */  
  /* #define STM32F10X_MD */     /*!< STM32F10X_MD: STM32 Medium density devices */
  /* #define STM32F10X_MD_VL */  /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */  
  /* #define STM32F10X_HD */     /*!< STM32F10X_HD: STM32 High density devices */
  /* #define STM32F10X_HD_VL */  /*!< STM32F10X_HD_VL: STM32 High density value line devices */  
  /* #define STM32F10X_XL */     /*!< STM32F10X_XL: STM32 XL-density devices */
  /* #define STM32F10X_CL */     /*!< STM32F10X_CL: STM32 Connectivity line devices */
#endif

(6)、修改程序配置

进入SetSysClockTo72()函数 由于在步骤8中选的是CL因此实际执行的是else的内容,外部晶振为12,目标是72 72 =12*6 按照如图修改。

剩下的就是编译烧写程序。

因本人知识能力有限,可能存在错漏之处,欢迎指正。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>