试验原因

已经做完了LWIP在STM32F103上的裸机移植试验,再作下一步试验之前,总结一下。

LWIP裸机移植需要一个试验模板。
我并不想使用官方的模板或第三方的模板,自己移植一个干净的SPL库模板出来。

看第三方的教程,他告诉你步骤,但是为啥这么移植,你是看不到的。
他为啥那么移植,一定是他也先看了官方的模板和工程, 才知道怎么移植。
所以,最新鲜的资料是官方的模板工程。

官方STM32F10X的SPL库下载地址为STSW-STM32054

下载解压后,能看到版本是3.5 => STM32F10x_StdPeriph_Lib_V3.5.0

如果自己移植一个模板工程,官方的参考工程是 \STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\MDK-ARM\Project.uvproj
打开工程编译后,会看到官方模板是针对STM32100E-EVAL评估板的。

参考官方工程模板,不加入STM32100E-EVAL相关的实现就是我们自己的模板工程。

迁移好的工程模板

MDK5工程 : my_STM32F10x_StdPeriph_Template.zip

试验

工程组成

移植好的工程组成有4部分:

  • ARM启动文件的包含
  • CM3内核的包含
  • SPL库的包含
  • 自己的实现

ARM启动文件的包含

\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm

这些启动文件只需要选一个, e.g. 我的开发板上MCU是STM32F103VE, 那我选的就是startup_stm32f10x_hd_vl.s

其他不需要的启动文件可以设置为不包含,这样换了MCU, 只需要再包含一种新MCU类型的启动文件就可以了,不用去重新找启动文件。

CM3内核的包含

\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport

SPL库的包含

SPL库的头文件 \STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc
SPL库的实现文件 \STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src

自己的实现


自己要实现的文件如下:
main.c, main.h 自己新增的逻辑实现(设备初始化, 外设的查询和控制)

stm32f10x_it.c, stm32f10x_it.h 是从官方固件库模板工程中拷贝过来的(目录位置 - \STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template), SPL库本身没有这2个文件。 如果有中断要响应, 需要改这2个实现.

从SPL库中拷贝过来的文件, 不用改的文件:

stm32f10x_conf.h 如下位置拷贝, 这个头文件是官方固件库模板中提供的, SPL库本身没这文件。
\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template

system_stm32f10x.c 如下位置拷贝
\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

测试 - SPL库本身

// @file main.c#include <main.h>/*
选择芯片后就不需要在option->c/c++中再定义类似STM32F103_HD的东西了
因为选择芯片时已经加进去了。而且当你的定义和你选择的芯片不同时,会报错:
..\..\Libraries\CMSIS\stm32f10x.h(298): error: #67: expected a "}"ADC1_2_IRQn = 18,
*/int main(void)
{return 0;
}

在main.c中直接写个空的main函数,编译一下,过了就移植完了。
剩下的活,就是将这个工程归档svn, 当作其他F103工程的模板。

测试 - 操作开发板上简单的设备

当这个模板工程完工后,可以结合自己手头的开发板,写个简单的设备操作(e.g. 点亮LED灯),看看SPL库API的调用是否正常。

// @file main.c#include <main.h>/*
选择芯片后就不需要在option->c/c++中再定义类似STM32F103_HD的东西了
因为选择芯片时已经加进去了。而且当你的定义和你选择的芯片不同时,会报错:
..\..\Libraries\CMSIS\stm32f10x.h(298): error: #67: expected a "}"ADC1_2_IRQn = 18,
*/void RCC_Configuration(void);
void LED_Config(void);
void Delay(__IO uint32_t nCount);#define LED1_ON GPIO_SetBits(GPIOB, GPIO_Pin_5);
#define LED1_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_5); #define LED2_ON GPIO_SetBits(GPIOD, GPIO_Pin_6);
#define LED2_OFF GPIO_ResetBits(GPIOD, GPIO_Pin_6); #define LED3_ON GPIO_SetBits(GPIOD, GPIO_Pin_3);
#define LED3_OFF GPIO_ResetBits(GPIOD, GPIO_Pin_3);  int main(void)
{RCC_Configuration();LED_Config();while (1){LED1_ON; LED2_OFF; LED3_OFF;        //LED1亮  LED2,LED3灭(LED2,LED3 仅V5  V3,V2,V2.1板有)Delay(0xAFFFF);LED1_OFF; LED2_ON; LED3_OFF;      //LED2亮  LED1,LED3灭(LED2,LED3 仅V5  V3,V2,V2.1板有)Delay(0xAFFFF);LED1_OFF; LED2_OFF; LED3_ON;      //LED3亮  LED1,LED2灭(LED2,LED3 仅V5  V3,V2,V2.1板有)Delay(0xAFFFF);    }return 0;
}void RCC_Configuration(void)
{   SystemInit();
}void LED_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD , ENABLE);  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                   //LED1  V6    //将V6,V7,V8 配置为通用推挽输出  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;            //口线翻转速度为50MHzGPIO_Init(GPIOB, &GPIO_InitStructure);                    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_3;       //LED2, LED3    V7 V8GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOD, &GPIO_InitStructure);GPIO_Init(GPIOD, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;                  //LCD背光控制GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOD, &GPIO_InitStructure);GPIO_ResetBits(GPIOD, GPIO_Pin_13);                       //LCD背光关闭
}void Delay(__IO uint32_t nCount)
{for(; nCount != 0; nCount--);
}

测试过了好使,说明这个工程模板是可用的。

STM32F10x_StdPeriph_Template相关推荐

  1. 在 Keil uVision4 MDK下配置开发STM32F103Z完整教程

    转载的,请原作者勿怪,以下为原链接: http://www.51hei.com/bbs/dpj-30359-1.html(欢迎直接查看原作者) 环境搭建: 1.安装 Keil uVision4 MDK ...

  2. IAR建立stm32工程

    版本1: stm32是一个当下非常流行的微控制器,很多人都加入了学习stm32的行列中,常用的stm32编译器有IAR和mdk两种,接下来是利用stm32固件库3.5在IAR下的建立的工程模板历程: ...

  3. stm32学习之新建工程

    新建一个文件夹Template,再新建一个子文件夹USER 打开keil5,Project –>New Uvision Project 定位到USER文件夹,随便取个工程名 弹出选择芯片类型 我 ...

  4. IAR环境下STM32+IAP方案的实现(转)

    –基于STM32F103ZET6的UART通讯实现 一.什么是IAP,为什么要IAP  IAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x ...

  5. IAR新建stm32工程,完美移植stm32标准库(附源码)

    开发环境:Window 10 64bit 开发工具:IAR Embedded Workbench 硬件:stm32f103c8t6 基于IAR 开发工具,新建立STM32F1系列的最小开发例程,并加入 ...

  6. STM32F103构建固件库模板(PS固件库文件树介绍)

    参考:STM32F103ZE新建固件库模板 作者:追兮兮 发布时间:2020-10-14 10:31:45 网址:https://blog.csdn.net/weixin_44234294/artic ...

  7. Linux下STM32开发环境的搭建

    目录 一.概述 1.目的 2.开发环境描述 3.Eclipse构建的STM32集成开发环境结构 4.GDB / GDB Server 调试模型 二.搭建步骤 三.详细的搭建过程 1.安装eclipse ...

  8. stm32新建工程(详细)

    原文地址:http://blog.csdn.net/lbl1234 下载固件函数库 stm32标准外设库是stm32全系列芯片的外设驱动,有了它可以大大加速我们开发stm32.     首先从st公司 ...

  9. stm32实验报告心得体会_stm32实训心得体会.docx

    stm32实训心得体会 stm32实训心得体会 篇一:STM32 实验2报告 实验2MINI STM32按键控制LED灯实验 一. 实验目的 1. 掌握嵌入式程序设计流程. 2. 熟悉STM32固件库 ...

  10. STM32工程文件的建立以及Keil软件的基本设置和修改

    STM32工程文件的建立 1. 解压STM32官方库 2. 建立启动文件夹Libraries. 2.1 内核寄存器描述文件 2.2 外设寄存器描述文件.配置时钟文件 3. 建立输出文件夹Output. ...

最新文章

  1. ExtJs之自定义事件
  2. es6与java的相似度_计算字符串的相似度-两种解法
  3. 2016/8/18 Linux常用命令 :目录、文件处理命令
  4. js渲染模板html,一个javascript模板渲染组件,laytpl
  5. 约数研究问题的算法优化和推导证明(洛谷P1403题题解,Java语言描述,含Latex公式编辑知识)
  6. 回归、插值、逼近、拟合的区别
  7. 沉浸式状态栏的简易实现
  8. [日志]怎样的男人才会讨美女喜欢?
  9. spring boot配置ip_Zookeeper作为配置中心使用说明
  10. c语言飞机大战游戏素材,jQuery飞机大战游戏
  11. 常用汉字2504个(无重复)
  12. 高通camera结构(摄像头基础介绍)
  13. 虚拟机通过无线设置静态ip连外网,不同环境的wifi照常使用
  14. AI医疗落地挑战:需求“实打实存在”,商业价值如何挖掘?
  15. 完整的js写的省市级的程序
  16. java-php-python-ssm-旅游系统-计算机毕业设计
  17. 我是一个创业者,也是一个开发者!
  18. Tipard DVD Ripper for Mac(DVD刻录工具)
  19. Windows路由功能及DHCP中继服务
  20. matplotlib绘图(菜鸟开始入门) 个人学习记录

热门文章

  1. 遥感学习笔记:遥感数据源免费数据获取途径
  2. 油猴【QQ空间自动点赞-模拟点击】
  3. lamp一键安装包不安装mysql_lamp一键安装包的一些注意点
  4. FPGA 控制 RGMII 接口 PHY芯片基础
  5. 修复IE主页被篡改劫持的方法之一:自定义xxx.reg文件
  6. 二进制和十六进制的转换操作
  7. 插值算法(数学建模学习)
  8. 高淇300集Java——零基础开发桌球小游戏项目
  9. HTML深海骑兵制作,深海迷航代码独眼巨人号护盾发生器 | 手游网游页游攻略大全...
  10. 上市公司频推高送转 年报预告掘金“白马股”(名单)