查看: 10609|回复: 5

[3D_stm32]STM32F1平台到STM32F4平台的移植要点

[复制链接]
  • TA的每日心情
    郁闷
    2013-6-21 11:38
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2013-8-24 18:25:37 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 wangzheyu1989 于 2013-8-24 18:30 编辑

    本文主要介绍从stm32f1芯片到stm32f4芯片的软硬件移植要点,水平有限,仅供参考。首先,我们的移植主要需要用到以下两个官方App Notes:
    AN3364 Migration and compatibility guidelines for STM32(软件移植参考)
    AN3427 Migrating a microcontroller application from STM32F1 to STM32F2 series 1.0(硬件移植参考)
    看到这里大家可能有疑问了,AN3427怎么是F1到F2的移植手册,其实原因就是在硬件方面,F2系列和F4系列完全是pin-to-pin兼容的,因此在硬件上,ST公司也就没有再出和F4有关的移植手册了。有了这两个手册后,我们将开始详细的移植讨论。
    硬件部分:
    从硬件部分来说,移植的思路是比较明确的,主要参考以下两幅图
    QQ图片20130824173448.jpg

    QQ图片20130824182836.jpg
    由于本大赛采用的是100pin的系列,这里就仅仅讨论一下100pin的封装,其余封装大同小异。从上图我们可以看到,F1和F4(F2)系列的主要区别在于有些电源和地的管脚互换了,也就是电源变成了地,地变成了电源,而保持两系列兼容性的方法也很简单,就是通过0欧姆的电阻来选择即可。
    软件部分:
    从上文可以看出,硬件部位的移植和兼容性保持还是非常容易的,但是到了软件部分,就不得不吐槽一下F1和F4两个系列的软件库了,看似大同小异,其实陷阱多多,由于本文作者用F4系列也不久,也只移植了一个比较大的程序,因此本文所列出的注意点,可能只是两个系列软件库兼容性问题中的一部分,如有遗漏,还望补充。AN3364 Migration and compatibility guidelines for STM32这个APP notes可以作为移植时的参考,并无太大的参考意义。
    1、总线变化:
    F1系列到F4的系列最大的变化就是系统总线的不同,也就导致了系统外设在初始化时需要修改时钟初始化的函数。区别如下:
    F1系列:AHB+(APB1 APB2)
    F4系列:(AHB1 AHB2 AHB3)+(APB1 APB2)
    例子1:使能GPIOE的时钟
    F1:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
    F4:RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
    如此改动的原因就是F4系列的GPIO总线从APB上变成了AHB,这一点的影响深远,将在下一节时钟树中再做讨论。
    2、时钟树变化:
    QQ图片20130824173158.jpg
    F1系列时钟树


    QQ图片20130824173448.jpg

                                                                                            F4系列时钟树
    从图中可以看到(可能不是很清晰,详细的可以参考手册),由于F系列总线变多,因此时钟树也变得更为复杂,因此在移植使能时钟树的代码时,也需要特别注意,例如上文章中的例子1。同时,由于F4系列的主频从原来的72Mhz,变成了168Mhz,并且很多外设所挂载的总线也都不同了,对于外设最高频率的计算,也许额外的注意。
    3、库函数的改变:
    从F1到F4,库函数看似大同小异,但在GPIO上,似乎改动不小,下面就以一个实际例子来说明。
    例子2:将GPIO管脚配置成SPI的外设管脚:
    F1代码:
        /* Configure SPI1 pins: SCK, MISO and MOSI ---------------------------------*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
    F4代码:    GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
            
        /* Configure SPI1 pins: SCK, MISO and MOSI ---------------------------------*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
    从以上代码可以看出,首先是添加了GPIO_PinAFConfig函数,并且其中的GPIO_PinSource5很容易被搞错成GPIO_Pin_5,这点需要特别注意,其次F1的库函数中的GPIO_Mode_AF_PP宏,已经包含了alternative function和push-pull两重含义,但在F4的库函数中,这些都被分开单独定义。
    4、总结:
    以上提到的这些移植要点,可能只是F1平台到F4平台移植要点中的一部分,这里只是抛砖引玉,希望大家能多讨论。下面总结一下移植步骤:
    1、替换库函数版本,F1-》F4。
    2、编译,查看错误。
    3、根据编译错误,将旧函数或旧宏替换成新的版本。
    4、针对具体的外设,查看是否有新的函数添加,若有,则确认新函数的功能是否需要使用。

    谢谢阅读。



    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2013-11-18 15:04
  • 签到天数: 35 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-8-24 19:34:37 | 显示全部楼层
                顶     支持楼主               
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-8-24 19:45:14 | 显示全部楼层
    大神发文章了,前来围观,先顶后看好习惯。。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-8-24 19:54:40 | 显示全部楼层
    顶一个支持楼主!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-8-24 21:29:54 | 显示全部楼层
    顶!!!!支持楼主!!!!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-7-23 15:39
  • 签到天数: 246 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-9-20 10:10:52 | 显示全部楼层
    顶一个!!!!!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 08:19 , Processed in 0.173467 second(s), 28 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.