STM32F10x_StdPeriph_Template
试验原因
已经做完了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相关推荐
- 在 Keil uVision4 MDK下配置开发STM32F103Z完整教程
转载的,请原作者勿怪,以下为原链接: http://www.51hei.com/bbs/dpj-30359-1.html(欢迎直接查看原作者) 环境搭建: 1.安装 Keil uVision4 MDK ...
- IAR建立stm32工程
版本1: stm32是一个当下非常流行的微控制器,很多人都加入了学习stm32的行列中,常用的stm32编译器有IAR和mdk两种,接下来是利用stm32固件库3.5在IAR下的建立的工程模板历程: ...
- stm32学习之新建工程
新建一个文件夹Template,再新建一个子文件夹USER 打开keil5,Project –>New Uvision Project 定位到USER文件夹,随便取个工程名 弹出选择芯片类型 我 ...
- IAR环境下STM32+IAP方案的实现(转)
–基于STM32F103ZET6的UART通讯实现 一.什么是IAP,为什么要IAP IAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x ...
- IAR新建stm32工程,完美移植stm32标准库(附源码)
开发环境:Window 10 64bit 开发工具:IAR Embedded Workbench 硬件:stm32f103c8t6 基于IAR 开发工具,新建立STM32F1系列的最小开发例程,并加入 ...
- STM32F103构建固件库模板(PS固件库文件树介绍)
参考:STM32F103ZE新建固件库模板 作者:追兮兮 发布时间:2020-10-14 10:31:45 网址:https://blog.csdn.net/weixin_44234294/artic ...
- Linux下STM32开发环境的搭建
目录 一.概述 1.目的 2.开发环境描述 3.Eclipse构建的STM32集成开发环境结构 4.GDB / GDB Server 调试模型 二.搭建步骤 三.详细的搭建过程 1.安装eclipse ...
- stm32新建工程(详细)
原文地址:http://blog.csdn.net/lbl1234 下载固件函数库 stm32标准外设库是stm32全系列芯片的外设驱动,有了它可以大大加速我们开发stm32. 首先从st公司 ...
- stm32实验报告心得体会_stm32实训心得体会.docx
stm32实训心得体会 stm32实训心得体会 篇一:STM32 实验2报告 实验2MINI STM32按键控制LED灯实验 一. 实验目的 1. 掌握嵌入式程序设计流程. 2. 熟悉STM32固件库 ...
- STM32工程文件的建立以及Keil软件的基本设置和修改
STM32工程文件的建立 1. 解压STM32官方库 2. 建立启动文件夹Libraries. 2.1 内核寄存器描述文件 2.2 外设寄存器描述文件.配置时钟文件 3. 建立输出文件夹Output. ...
最新文章
- ExtJs之自定义事件
- es6与java的相似度_计算字符串的相似度-两种解法
- 2016/8/18 Linux常用命令 :目录、文件处理命令
- js渲染模板html,一个javascript模板渲染组件,laytpl
- 约数研究问题的算法优化和推导证明(洛谷P1403题题解,Java语言描述,含Latex公式编辑知识)
- 回归、插值、逼近、拟合的区别
- 沉浸式状态栏的简易实现
- [日志]怎样的男人才会讨美女喜欢?
- spring boot配置ip_Zookeeper作为配置中心使用说明
- c语言飞机大战游戏素材,jQuery飞机大战游戏
- 常用汉字2504个(无重复)
- 高通camera结构(摄像头基础介绍)
- 虚拟机通过无线设置静态ip连外网,不同环境的wifi照常使用
- AI医疗落地挑战:需求“实打实存在”,商业价值如何挖掘?
- 完整的js写的省市级的程序
- java-php-python-ssm-旅游系统-计算机毕业设计
- 我是一个创业者,也是一个开发者!
- Tipard DVD Ripper for Mac(DVD刻录工具)
- Windows路由功能及DHCP中继服务
- matplotlib绘图(菜鸟开始入门) 个人学习记录
热门文章
- 遥感学习笔记:遥感数据源免费数据获取途径
- 油猴【QQ空间自动点赞-模拟点击】
- lamp一键安装包不安装mysql_lamp一键安装包的一些注意点
- FPGA 控制 RGMII 接口 PHY芯片基础
- 修复IE主页被篡改劫持的方法之一:自定义xxx.reg文件
- 二进制和十六进制的转换操作
- 插值算法(数学建模学习)
- 高淇300集Java——零基础开发桌球小游戏项目
- HTML深海骑兵制作,深海迷航代码独眼巨人号护盾发生器 | 手游网游页游攻略大全...
- 上市公司频推高送转 年报预告掘金“白马股”(名单)