stm32f030移植到stm32f072

1、检测固件库包是否匹配,老版本的固件库包不支持stm32f072的一些配置。

 

2、基本的硬件接口修改,相应的外设配置。

 

3、添加对应型号的启动文件,并且设置为始终编译。(程序在初始化阶段进入hardfault,是由于编译的启动文件不匹配,有时也得注意启动文件的版本,一次我的启动文件为startup_stm32f0xx.s,我想这是适合stm32f072启动编译的,然而程序一直在初始化的时候进入hardfault,后来我试着把启动文件改为startup_stm32f072.s,程序就OK了。血的教训)

 

4、别忘了宏定义,在使用stm32f030的时候,会定义stm32f030,这个在keil软件C/C++选项Define一栏,当移植到stm32f072硬件平台的时候,得修改为stm32f072,否则关于stm32f072一些定义是无法使用的。

 

5、当需要使用微控制器输出时钟这一功能时,需要注意void SystemInit(void)这个函数,该函数位于system_stm32f0xx.c系统文件中。在函数开始部分有一些预编译选项,该预编译主要用于是否使用对于微控制器输出时钟的预分频以及PLL时钟为MCO的时钟分割,有兴趣的可以去查看参考手册。

 

6、在外部晶振使用不是8M时,在两个文件中都需要做相应的修改。

第一stm32f0xx.h文件,在文件131 line左右可以查找到这样几句定义:

#if !defined (HSE_VALUE)

#define HSE_VALUE  ((uint32_t)8000000)

#endif

默认是定义HSE_VALUE为8M,你所使用多少hz的晶振就修改一下8M这个值。

第二,system_stm32f0xx.c文件里面的static void SetSysClock(void)函数:

RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));

RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMUL6);

第一句为把等会需要配置的位清零,也就是reset。

第二句是在启用外部晶振的时候,选择进入PLL时钟源以及进入时钟分割情况。最后一个参数为PLL倍频,这个倍频系数有讲究,倍频后的值不能超过芯片主频所能允许的最大值,比如你所使用的外部晶振为16M,stm32f0所能允许的最大主频为48M,哪这个倍频系数最大只能为3,当然初始化时钟配置不使用外部晶振哪又另当别论了。

 

总结:以上是我移植时候的一点心得,希望能够帮助到大家,有什么不对的地方,还请多多指教。

分享:

 

 

星空小蜗牛

 

STM32使用16M外部晶振时串口乱码

1.出现的问题:

修改RCC配置代码如下:

将语句:RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //之前使用8MHz外部晶振,9倍频到72MHz

修改为:RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_9); //使用16MHz外部晶振之后,2分频再9倍频到72MHz

测试中发现串口1一直是乱码。

 

2.解决办法:

(1).去除库文件:stm32f10x.h的只读属性。

(2).此文件中找到语句:#define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */

(3).将这条语句更改为:#define HSE_VALUE    ((uint32_t)16000000) /*!< Value of the External oscillator in Hz */

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值