STM32
直播中

汪潇潇

7年用户 806经验值
私信 关注
[问答]

如何解决使用stm32f103xx工程移植到stm32f105xx后时钟不正常的问题?

如何解决使用STM32f103xx工程移植到stm32f105xx后时钟不正常的问题?

回帖(1)

李铭鑫

2021-12-14 10:15:08
记录一下最近移植stm32f103工程至stm32f105单片机中踩的坑,103工程直接原封不动下载到105单片机中,因为它们完全兼容,是可以正常运行的。但是如果一些配置不进行修改,很多功能(105具备但是103不具备的)是不能正常运行的,所以还是不要心存侥幸,该改的就要改。
首先,105属于互联网型产品,系统宏定义要改,




启动文件要换,





然后,改后如果发现时钟不正常(串口波特率、can通信速率等异常),这是因为stm32f105 为互联网型产品,默认外部接25MHz晶振,当外部接8MHz晶振时,需要作出如下修改

修改一:
//在system_stm32f10x.h文件中的static void SetSysClockTo72(void)函数(Line1030)中修改代码段

/* Configure PLLs ------------------------------------------------------/
/
PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz /
/
PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */

RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |                          RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |                         RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);1234/* Configure PLLs ------------------------------------------------------/
/
PLL2 configuration: PLL2CLK = (HSE / 8) * 8 = 1 MHz /
/
PREDIV1 configuration: PREDIV1CLK = PLL2 / 1 = 8 MHz */

RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |                          RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV8 | RCC_CFGR2_PLL2MUL8 |                         RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV1);1234//修改参考:http://www.stmcu.org.cn/module/forum/thread-604584-1-1.html
修改二:
//在stm32f10x.h文件中的Line117中修改宏定义


#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz /
改为
#define HSE_VALUE ((uint32_t)8000000) /
!< Value of the External oscillator in Hz */
举报

更多回帖

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