Keil新建Stm32标准工程中 Preprocessor Symbols的作用_hb69222的博客-程序员秘密

技术标签: STM32  新建工程  KEil  

(转自正点原子的回复)

标准的工程新建办法,是要添加" USE_STDPERIPH_DRIVER,STM32F10X_HD的.
USE_STDPERIPH_DRIVER,是告诉编译器,我们需要使用标准库了(实际上是.c/.h文件里面的一个宏,通过这个宏决定是不是要用某些资源,比如库函数的使用)
STM32F10X_HD,则是表示我们使用的芯片是大容量的stm32,从而告诉那些.c/.h文件,使用相关代码.

另外,很重要的一个文件,常被初学者忽略,那就是:stm32f10x_conf.h
很多库函数相关的.h文件,是在这个里面被包含进来的.
所以你很多时候,只看到我们代码包含了stm32f10x.h了,事实上,由于我们定义了:USE_STDPERIPH_DRIVER,所以在stm32f10x.h里面,会包含:stm32f10x_conf.h
而stm32f10x_conf.h会包含各种外设的.h文件,如下:
#ifndef __STM32F10x_CONF_H
#define __STM32F10x_CONF_H

/* Includes ------------------------------------------------------------------*/
/* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */
//#include "stm32f10x_adc.h"
//#include "stm32f10x_bkp.h"
//#include "stm32f10x_can.h"
//#include "stm32f10x_cec.h"
//#include "stm32f10x_crc.h"
//#include "stm32f10x_dac.h"
#include "stm32f10x_dbgmcu.h"
//#include "stm32f10x_dma.h"
//#include "stm32f10x_exti.h"
//#include "stm32f10x_flash.h"
//#include "stm32f10x_fsmc.h"
#include "stm32f10x_gpio.h"
//#include "stm32f10x_i2c.h"
//#include "stm32f10x_iwdg.h"
//#include "stm32f10x_pwr.h"
#include "stm32f10x_rcc.h"
//#include "stm32f10x_rtc.h"
//#include "stm32f10x_sdio.h"
//#include "stm32f10x_spi.h"
//#include "stm32f10x_tim.h"
#include "stm32f10x_usart.h"
//#include "stm32f10x_wwdg.h"
..............


这样,我们就把这些.h文件添加到了你的工程里面,上面的代码,我们很多.h文件都是被屏蔽了,所以如果你在使用的时候,遇到提示对应外设的定义没有而出错的时候,不妨看看你的stm32f10x_conf.h里面,有没有注释掉对应外设的头文件.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hb69222/article/details/84581121

智能推荐

【物理应用】Matlab 二维对流扩散温度场_matlab 温度场_Matlab科研辅导帮的博客-程序员秘密

function A=secdim2% 本程序可实现两种可选边界条件的对流扩散实时动态模拟% 采用乘方格式% 初始温度场为10,速度可选% 时间差分采用全隐式格式clcdt=0.001; bc=input('南北边界条件:1-第一类,2-第二类: ');q=0;ddt=input('迭代次数: ');L1=0.02;r=1000;k=0.017;sp=0;L2=0.01;u=input('横向速度: ');if bc==2 v=0;else v=inpu...

linux更新grub内核启动参数的方法_你狗的博客-程序员秘密

#!/bin/bashset -xset -eexport PS4=+{$LINENO:${FUNCNAME[0]}}trap 'echo "---NEWKERNARGS=$NEWKERNARGS xx=$xx------"' DEBUGNEWKERNARGS=""grubby --info=`/sbin/grubby --default-kernel` 2>...

2 snippets vue 修改配置_二、vue之 使用vscode配置_weixin_39907850的博客-程序员秘密

vue之 使用vscode配置visual studio code 简称vscode,下图为图标...开启vscode...1.导入文件夹,选择菜单栏 文件-打开文件夹-》选择相应已经创建好的项目文件夹2.添加扩展插件插件列表Auto Rename Tag修改HTML标签时,自动修改匹配的标签Can I UseHTML5、CSS3、SVG的浏览器兼容性检查Code Runner运行选中代码...

va_list、va_start、va_arg、va_end_骑自行车的博客-程序员秘密

http://www.cppblog.com/qiujian5628/archive/2008/01/21/41562.html http://www.cnblogs.com/BloodAndBone/archive/2011/01/18/1938053.html

华为OJ——在字符串中找出连续最长的数字串_jvm原理_一朵小冯花的博客-程序员秘密

题目描述样例输出输出123058789,函数返回值9输出54761,函数返回值5 接口说明函数原型:   unsignedint Continumax(char** pOutputstr,  char* intputstr)输入参数:   char* intputstr  输入字符串;输出参数:   char** 

(转载)macOS 解决apue.h不存在的问题_Ciruy B.Heimerdinger的博客-程序员秘密

如果在 macOS 上编译 UNIX 环境高级编程的实例代码时,发现 'apue.h' file not found ,以下是解决方法:1. 去 官网 下载对应版本的源代码2. 解压之后在 apue.h 文件中 #endif 之前添加如下语句 #include "error.c",并将 include 文件夹下的 apue.h 和 lib 文件夹下的 error.c 复制到 /usr/in...

随便推点

Java语言基础(方法的练习)_扎瓦的博客-程序员秘密

Java语言基础(方法的练习) * A:案例演示 * 需求:键盘录入两个数据,返回两个数中的较大值 1.明确返回值类型 int 2.明确参数列表 int a,int bB:案例演示 需求:键盘录入两个数据,比较两个数是否相等 1.明确返回值类型 boolean 2.明确参数列表 int a,int bimport java.util.Scanner...

Python 用户登录_phyon登录_hugejihu9的博客-程序员秘密

文章来自:源码在线https://www.shengli.me/php/314.html 

VLSI —— 运算模块设计_平方根进位选择加法器_草芥小白的博客-程序员秘密

二进制加法器1. 基础知识A、B为输入,Ci为进位输入,S为和,Co为进位输出基础的加法器:逐位进位加法器 或 行波进位加法器(ripple carry adder) , 进位路径为关键路径,critical path2. 加法器的反向特性3. 加法器们1. 静态加法器 —— 用互补CMOS2. 镜像加法器3. 传输门型加法器 —— S和Co有相同时间4. Manchester曼切斯特进位链加法器如果P(传播)=1,Ci直接传播到Co。动态实现更加简单,减少了Di

api讲座_z序列是什么_long for的博客-程序员秘密

第一课∶认识API 一、什么是API 首先,有必要向大家讲一讲,什么是API。所谓API本来是为C和C++程序员写的。API说来说去,就是一种函数,他们包含在一个附加名为DLL的动态连接库文件中。用标准的定义来讲,API就是Windows的32位应用程序编程接口,是一系列很复杂的函数,消息和结构,它使编程人员可以用不同类型的编程语言编制出的运行在Windows95和Windows NT操作系统上的...

js-事件捕获与事件冒泡原理 IE和DOM之间存在哪些主要差别_Vincent前端路漫漫的博客-程序员秘密

转自博客园《JavaScript事件捕获与事件冒泡原理 IE和DOM之间存在哪些主要差别》 作者:LM事件——怎样使用事件以及IE和DOM事件模型之间存在哪些主要差别。(1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。  IE 5.5: div -> body -> document  IE 6.0:

C语言之函数调用10—重复函数的多次调用_刘志祥-兰州铁道设计院有限公司的博客-程序员秘密

//函数的重复调用!/*===================================================================================题目:W=((1-a)/(1+a+a*a))*(((1-b)/(1+b+b*b))+((1-c)/(1+c+c*c))*((1-c)/(1+c+c*c))),a=7.2,b=6.25,c=10.

推荐文章

热门文章

相关标签