新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32啟動文件的選擇及宏定義

        STM32啟動文件的選擇及宏定義

        作者: 時間:2016-11-24 來源:網絡 收藏
        startup_stm32f10x_cl.s 互聯型的器件,STM32F105xx,STM32F107xx
        startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx
        startup_stm32f10x_hd_vl.s 大容量的STM32F100xx
        startup_stm32f10x_ld.s 小容量的STM32F101xx,STM32F102xx,STM32F103xx
        startup_stm32f10x_ld_vl.s 小容量的STM32F100xx
        startup_stm32f10x_md.s 中容量的STM32F101xx,STM32F102xx,STM32F103xx
        startup_stm32f10x_md_vl.s 中容量的STM32F100xx
        startup_stm32f10x_xl.s FLASH在512K到1024K字節的STM32F101xx,STM32F102xx,STM32F103xx
        cl:互聯型產品,stm32f105/107系列
        vl:超值型產品,stm32f100系列
        xl:超高密度產品,stm32f101/103系列
        ld:低密度產品,FLASH小于64K
        md:中等密度產品,FLASH=64 or 128
        hd:高密度產品,FLASH大于128
        在KEIL下可以在項目的選項C/C++/PREPROMCESSOR symbols的Define欄里定義,比如STM32F10X_CL
        也可以在STM32F10X.H里用宏定義
        #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)




        #define STM32F10X_HD


        #endif
        如果芯片更換,除了做如上所述的更改外,還需以下幾步
        第一步 system_stm32f10x.c的系統主頻率,依實際情況修改
        #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL)

        #define SYSCLK_FREQ_24MHz 24000000
        #else





        #define SYSCLK_FREQ_72MHz 72000000
        #endif
        另外外部時鐘在文件:stm32f10x.h 依實際修改
        第二步 定時器的參數依系統主時鐘做適當修改
        第三步 flash地址misc.h中的NVIC_VectTab_Flash 0x08000000 要與KEIL選項target的IROM1的地址一致,如果是IAP程序,依ISP程序占用大小,APP的FLASH地址向后延,比如0X8002000,那么KEIL選項target的IROM1的地址也要就0x8002000,SIZE因為ISP占用了2000,所以就為0x40000-0x2000,即只能填寫0X3E000
        第四步 ISP程序與APP程序連接----(這一步我還不明白意思,需要驗證)
        打開 User 選項卡 在 Run User Programs Before Build/Rebuild 中,勾選 Run#1,并在
        其中填入
        D:KeilARMBIN40fromelf.exe --bin -o ./obj/Project.bin ./obj/Project.axf
        其中,Project.bin 和 Project.axf 要和 Output 選項卡中的 Name of Executable 的名字
        IAP我的總結
        1 先FLASH_Unlock();
        2 小于或等于128K的STM每頁為1k bytes,大于128K的每頁為2K BYTES,減去從地址0x8002000占用的0x2000后,算出頁數,比如IAP占用8K,則64K的MD的STM32F系列用for(i=0;i<(64-8);i++) FLASH_ErasePage(0x8002000+0x400*i);循環按頁擦除FLASH
        3 按從外部串口獲取到的數據,FLASH_ProgramWord(address,dat);//注意是按4字節方式寫入的
        if (*(uint32_t*)address!= dat)//字編程后校驗



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 兴义市| 莱芜市| 惠来县| 南华县| 会宁县| 靖西县| 新民市| 雷州市| 宾阳县| 新津县| 加查县| 靖远县| 永仁县| 皋兰县| 巴青县| 景谷| 博乐市| 拜城县| 湄潭县| 井研县| 莆田市| 扎兰屯市| 和田市| 同仁县| 峡江县| 满城县| 张家界市| 武夷山市| 云龙县| 长子县| 长葛市| 略阳县| 登封市| 白玉县| 喀喇沁旗| 苏州市| 开封县| 宁津县| 桂平市| 湖南省| 南溪县|