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开发工程建立
前段时间一直忙一个项目,同时在生活上时时提防和抵抗中国地沟油.国外核心转基因调和油.大豆油.色拉油.大米玉米.可怕的喂药鱼.药水泡农药喷无虫咬的青菜,所以没时间打理自己的博客,让开发攻略停顿了一段时间 ...
随机推荐
- select ,update 加锁
最近我在弄一个项目,其中涉及到了数据批量导入数据库的过程,在导入数据的时候,每一条数据会生成一个唯一标识,但是我发现有些数据的标识重复了.我在网上查了一下说这是“数据库 并发性”的问题解决方案,上锁. ...
- C# 委托参数方法实例
/// <summary> /// 方法委托 /// </summary> /// <param name="dwEnrollNum">< ...
- chrome 仿手机
很多网站都通过User-Agent来判断浏览器类型,如果是3G手机,显示手机页面内容,如果是普通浏览器,显示普通网页内容. 谷歌Chrome浏览器,可以很方便地用来当3G手机模拟器.在Windows的 ...
- qt sql事务操作
事务是数据库的一个重要功能,所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位.在Qt中用transaction()开始一个事务操作,用commit()函数或 ...
- Delphi子类调用祖父类的虚函数
因为看Delphi书的时候,就产生了疑惑.老讲调用父类虚函数,但是万一需要调用祖父虚函数怎么办?后来又经常在C++里看到,就更疑惑了 type TA = class procedure ShowMsg ...
- 发布一个Django项目
一.部署环境准备,准备python3和虚拟环境解释器,virtualenvwrapper 1.修改python3的环境变量 PATH=/opt/python36/bin:/usr/local/sbin ...
- java多线程之管道流
java语言中提供了各种各样的流供我们操纵数据,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据. 一个线程发送数据到输出管道,另一个线程从输入管道读取数据,通过使用管道 ...
- python列表的内置方法
list数据类型还有更多的方法.这里是list对象的所有方法: list.append(x) 添加一个元素到列表的末尾:相当于a[len(a):] = [x]. list.extend(L) 将指定列 ...
- HTML连载10-details标签&summary标签&marquee标签
1.详情(details)与概要(summary)标签 (1)作用:我们希望用尽可能少的空间来表达更多的信息,利用summary标签来描述概要信息,用details标签来描述详情信息 (2)格式: ...
- Java逆序输出整数
题目要求:编写方法reverseDigit,将一个整数作为参数,并反向返回该数字.例如reverseDigit(123)的值是321.同时编写程序测试此方法. 说明:10的倍数的逆序,均以实际结果为准 ...