STM32F072从零配置工程-建立工程文件
快速建立工程有两种方法:
第一种是通过官方提供的外设库来搭建,好处是使用库函数,而不需要深入研究寄存器配置;
第二种是通过STM32CubeMX,好处是直观快速,可以直接帮你配置好功能和时钟,不过使用的是HAL库,在扩展功能逻辑时需要了解相应的寄存器和宏定义来配置;
如果你对芯片构造和外设原理较为了解,可以直接使用CMSIS文件和System Startup文件,接下来采用寄存器配置的方式,自己全部配置;
第一种方法:
第一步:找到官方外设库



第二步:使用KeilMDK建立新的工程文件
个人工程目录结构如下:
CORE:存放CMSIS Core Support文件(core_cm0.h)和System Startup文件(.s);
LIB:存放标准外围设备驱动程序库文件,分为inc(.h)和src(.c)两个部分;
OUT:存放Keil输出文件,分别存放LIST和OBJ;
SYS:存放自己编写的外设文件;
USER:Keil工程文件、main.c文件、外设驱动配置文件(stm32f0xx_config.h)、片上外设访问层头文件(stm32f0xx.h)、中断服务函数文件(stm32f0xx_it.c/stm32f0xx_it.h)、片上外设接入层系统头文件(system_stm32f0xx.c/system_stm32f0xx.h)

在USER中新建工程,然后分别导入c文件和s文件、引入头文件目录;
需要注意几点:
开启C99模式,或在MiscControls中添加关键词-C99;
在Define中添加关键定义
USE_STDPERIPH_DRIVER,STM32F072,USE_DEFAULT_TIMEOUT_CALLBACK
由于库函数配置需要自己设定时钟,结合具体的硬件设计,比如应用到了哪些外设时钟源(HSE、HSI、是否需要使用PLL),因此不可避免地会需要了解库函数的结构与整体框架来实现与具体外设硬件的对接配置;
而采取官方的STM32CubeMX进行配置就会好很多,配置较为直观,但是对工程和硬件以及软件HAL库需要都有一个很好的了解,如果习惯了寄存器编程的话会很容易上手,毕竟都是底层操作寄存器,而HAL库与库函数之间的设计思路相似,上手也不难;
STM32F072从零配置工程-建立工程文件的更多相关文章
- STM32F072从零配置工程-自定义时钟配置详解
从自己的板子STM32F407入手,参考官方的SystemInit()函数: 核心在SetSysClock()这个函数,官方默认是采用HSE(设定为8MHz)作为PLL锁相环的输入输出168MHz的S ...
- STM32F072从零配置工程-实现delay功能
因为是使用SysTick来作为延时时钟,因此在这里给出SysTick时钟的寄存器: CTRL:SysTick控制及状态寄存器 位段 名称 类型 复位值 描述 16 COUNTFLAG R/W 0 如果 ...
- STM32F072从零配置工程-串口USART配置
也是使用HAL库进行配置,通过STMCube生成代码,可以通过这个简单的配置过程看到STMCube生成代码的一种规范: 从main函数入手观察其外设配置结构: 首先是HAL_Init()进行所有外设的 ...
- STM32F072从零配置工程-基于HAL库的串口UART中断配置
先上一个采用串口直接传输的Demo: 此处的思路是完全采用HAL库来实现的,核心是运用HAL_UART_Transmit_IT和HAL_UART_Receive_IT两个函数来实现的,可以作为一个De ...
- Spring Web工程web.xml零配置即使用Java Config + Annotation
摘要: 在Spring 3.0之前,我们工程中常用Bean都是通过XML形式的文件注解的,少了还可以,但是数量多,关系复杂到后期就很难维护了,所以在3.x之后Spring官方推荐使用Java Conf ...
- H5新人福音~零配置搭建现代化的前端工程
X-BUILD一套基于Webpack(v4.21.0)快速搭建H5场景开发环境的脚手架,只需要几分钟的时间就可以运行起来.X-BUILD是针对H5开发的一套自动化构建工具,致力于提升开发效率,减小开发 ...
- maven的安装、路径配置、修改库文件路径和eclipse中的配置、创建maven工程。
注:本文来源于:杨四郎2018 <maven的安装.路径配置.修改库文件路径和eclipse中的配置.创建maven工程> 一.maven的安装 首先,先到官网去下载maven.这里是官 ...
- Borland C++建立工程菜鸟教程
实在不敢相信,学校里现在教学用的编译器还是七八十年代的老古董,难道这东西更能培养从没接触过代码的学生深刻理解c语言的运行流程,不得不说像VisualStdio这样的重量级开发环境确实屏蔽了很多底层的运 ...
- Davinci DM6446开发攻略——DSP开发工程建立
前段时间一直忙一个项目,同时在生活上时时提防和抵抗中国地沟油.国外核心转基因调和油.大豆油.色拉油.大米玉米.可怕的喂药鱼.药水泡农药喷无虫咬的青菜,所以没时间打理自己的博客,让开发攻略停顿了一段时间 ...
随机推荐
- shell转义符
转义是一种引用单个字符的方法. 一个前面放上转义符 (\)的字符就是告诉shell这个字符按照字面的意思进行解释, 换句话说, 就是这个字符失去了它的特殊含义. 在某些特定的命令和工具中, 比如ech ...
- 为javasript中对象与json串之间转换的总结。
jQuery.json 是 jQuery 的一个插件,可轻松实现对象和 JSON 字符串之间的转换.可序列化 JavaScript 对象.数值.字符串和数组到 JSON 字符串,同时可转换 JSON ...
- ML:机器学习中常用的Octave语句
coursera上吴恩达的机器学习课程使用Octave/Matlab实现算法,有必要知道Octave简单的语句.最重要的:在遇到不会的语句,使用'''help '''或者'''doc '''查看官方文 ...
- 奇虎360选择IPO “壳概念”很受伤
黄一帆 “市场正呈现出为一幕经典影像:在绚丽的霞光笼罩下,蔚蓝色的大海边,在金色的海岸上,欢笑的孩子们踮起脚尖,刚好看见原来海平面露出的航船桅杆——那是缓缓驶来的注册制号:而转过头来,则是沙滩上大 ...
- CopyMemory、FillMemory、MoveMemory、ZeroMemory
CopyMemory 复制内存,第一个参数为目的地址,第二个参数为源地址,第三个参数为复制数据的大小,单位字节,源内存区域不能重叠,如果重叠,可以使用MoveMemory()函数.函数原型如下: vo ...
- CheckSynchronize实现的不必要的复杂
在system.classes单元中,CheckSynchronize在ThreadLock上持续调用TMonitor的Exit和Enter以保护SyncList. 因为代码做的第一件事是换出Sync ...
- .NET错误:未找到类型或命名空间名称
现象:编译项目时提示未找到类型或命名空间名称"... " 解决方法:如果是未找到类型,检查是否引用了类型所在的命名空间,使用using指令:如果是未找到命名空间,那么检查是否引用了 ...
- /etc/vsftpd/vsftpd.conf
# Example config file /etc/vsftpd/vsftpd.conf## The default compiled in settings are fairly paranoid ...
- SYN1610型B码时统设备
SYN1610型B码时统设备 产品概述 SYN1610型B码时统设备是由西安同步电子科技有限公司精心设计.自行研发生产的一款模块化配置的通用性时统终端,可接收北斗/ GPS信号/ IRIG-B码 ...
- MQ消息队列搭建命令及方法
MQ 是一款稳定.安全又可靠的消息传递中间件.它使用消息和队列来支持应用程序.系统.服务和文件之间的信息交换.它可以简化和加速多个平台中不同应用程序和业务数据的集成.支持各种 API 和语言,并可以在 ...