文档库 最新最全的文档下载
当前位置:文档库 › STM32外设SDIO应用之SD卡

STM32外设SDIO应用之SD卡

STM32外设SDIO应用之SD卡
STM32外设SDIO应用之SD卡

STM32外设SDIO 应用之SD 卡

一、SD 原理及内部结构

SD 卡(Secure Digital Memory Card )是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型存储器件,SD 卡允许在两种模式下工作,即SD 模式和SPI 模式。1、SD 卡内部及引脚示意图:

2、SD 模式及SPI 模式引脚名称

P i n 3

P i n 8

P i n 7

P i n 6

P i n 5

P i n 4

P i n 2

P i n 1

P i n 9

3、Micro SD 引脚示意图及模式区别:

二、SD 模式

1、STM32的SDIO 适配器原理框图:

注:R1b与R1格式相同,但可以选择在数据线上发送一个繁忙信号。收到这些命令后,依据收到命令之前的状态,卡可能变为繁忙。主机在收到此响应时应当检测忙状态。

R7中可接受的电压范围定义如下:

6、部分命令详解

CMD8用于初始化符合物理规范2.00版本的SD存储卡。当卡处于空闲状态时,CMD8才是有效的。该命令有两种功能:

a.电压检测:

检测卡是否能在主机提供的电压下工作

b.扩充现有的命令及响应

CMD8能通过重新定义某些现有命令的保留位,增加其新的功能。ACMD41就是被这样被扩展后用于初始化高容量SD存储卡。

其中电源电压定义如下:

当卡处于空闲状态,主机应当在发送ACMD41前发送CMD8。在参数段,电源电压段是主机提供的电压值,而检测模式段可以是任何数值。若主机支持卡的工作电压,卡会把接收到的电源电压及检测模式数值在命令响应中原样返回给主机。若主机不支持卡的工作电压,卡不作响应并停留在空闲状态。

分是高容量卡(SDHC)还是标准容量卡(SDSC)。

7、SD卡寄存器

SD卡寄存器有:卡识别寄存器(CID),相对卡地址寄存器(RCA),驱动级寄存器(DSR),特殊数据寄存器(CSD),SD卡配置寄存器(SCR),工作状态寄存器(OCR),SD状态寄存器(SSR),卡状态寄存器(CSR)。

7.1 工作状态寄存器(OCR)

OCR的格式如下表

注:1、当卡的供电状态位被设置时,该位才有效

2、如果卡没有完成启动程序,该位会被设置为低

OCR的第15~23位分别对应着一个电压值,表示可支持电压。若返回的命令响应R3中对应的OCR位为1,则表示这个SD卡支持该位对应的电压值。第30位即为CCS位,若响应R3中这一位为一则表示这个SD卡为高容量卡,否则为标准容量卡。只要卡处于忙状态,对应的位(31)就会被设置为低。

7.2 卡识别寄存器(CID)

卡识别寄存器有128位,它包含的卡的识别信息在卡识别阶段使用。每张卡都有一个唯

特殊数据寄存器提供关于如何访问卡内数据的信息,它定义了数据格式、纠错类型、最大数据访问时间,DSR寄存器是否可用等等。该寄存器可编程的部分(条目中标有W或E,见下)可被CMD27改变。下表中条目的类型按如下定义:R表示可读的,W(1)表示只可写一次,W表示可写多次。

CSD版本1.0格式如下:

CSD版本2.0格式如下:

CSD架构(CSD_STRUCTURE):

不同物理规范版本和卡片容量的CSD的字段结构寄存器是不同的,CSD寄存器中的

7.4

卡相对地址寄存器中可写的16位记录着卡在识别期间发布的相对地址,该地址用于主

机与卡之后的通信。RCA默认值为0,发送CMD7时该值为0表示设置所有卡进入备用状态。

7.5 驱动级寄存器(DSR Register)(可选)

驱动级寄存器可用于提高总线扩展时的性能(表现取决于总线宽度、传输速率及卡的数量),特殊数据寄存器(CSD Register)保存有该寄存器的使用信息,默认值为0x404。7.6 SD卡配置寄存器(SCR Register)

SD卡配置寄存器作为特殊数据寄存器的补充,提供每个SD存储卡特有的配置信息。该

SCR架构:

8、SD上电流程

电子营业执照驱动程序使用说明

电子营业执照由上海市工商行政管理局颁发。它作为企业在互联网上的身份标识,为企业上网办事(如:“网上年检”等)提供安全服务。因此,用户应予妥善保存。初次使用电子营业执照时,请先安装驱动程序,并使用驱动光盘内电子营业执照密码修改工具更改初始密码,初始密码为123456。 电子营业执照驱动安装说明 一.驱动程序安装 1、用户用鼠标双击打开安装文件:Setup.exe,进行电子营业执照驱动程序安装,将出现如下欢迎画面: 2、单击“下一步”选择目的安装地址;

3、用户单击“下一步”,创建快捷方式文件夹,单击“取消”,则取消驱动程序安装; 4、单击“下一步”,准备驱动程序安装;

5.单击“下一步”继续安装文件,画面如下; 6.确认是否将证书添加到根存储区中,单击“是”,添加证书,该证书将作为用户信任证书导入到系统证书库,请单击“是”继续安装。

7.若在此次安装前系统已经安装过本驱动程序,则在本次安装时需先删除原有证书,界面如下图,请单击“是”删除原有证书; 8.用户单击“是”,重新将证书添加到根存储区中;

9.电子营业执照驱动程序安装完成,并出现如下界面,单击“完成”,退出安装程序。 二.驱动程序卸载 1.用户进入「开始」菜单,选择程序\电子营业执照驱动程序,单击“卸载电子营业执照驱动程序”;或进入“控制面版”中的“添加或删除程序”,选中电子营业执照驱动程序,单击“更改/删除”按钮,出现如下确认对话框,单击“是”继续卸载,“否”取消卸载。 2.确认将证书从根证书中删除,单击“是”删除证书。

3.卸载程序,出现如下画面,卸载完成后单击“关闭”。完成卸载。

STM32建工程详细方法步骤

1、首先找到ST官方最新版本的固件库:STM32F10x_StdPeriph_Lib_V3.5.0 STM32F10x_StdPenph_Ub_V3.5. 0 文件实 2、新建一个工程文件夹:比如led工程文件夹 3、在led工程文件夹中新建 5个文件夹:COREHARDWARESTM32F10x_FWL、 SYSTEM USER COR用来存放启动文件等 HARDWARE来存放各种硬件驱动代码 STM32F10x FWLi文件夹顾名思义用来存放ST官方提供的库函数源码文件 SYSTEM文件夹下包含了delay、sys、usart等三个文件夹。分别包含了delay.c、sys.c、usart.c 及其头文件 delay.h、sys.h、usart.h

USER用来存放我们主函数文件 main.c ,以及其他包括system_stm32f10x.c 等 4、将固件库包里面相关的启动文件复制到我们的工程目录COR之下 打开固件库STM32F10x_StdPeriph_Lib_V3.5.0文件夹,定位到目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,将文件core_cm3.c和文件core_cm3.h复制到COR下面去。然后定位到目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\S TM32F10x\startup\arm 下面,将里面 startup_stm32f10x_md.s、 startup_stm32f10x_ld.s 、startup_stm32f10x_hd 复制到 COREF面。这里我们解释一下,其实我们只用到 arm目录下面的startup_stm32f10x_md.s 文件,这个文件是针对中等容量芯片的启动文件。其他两个主要的为 startup_stm32f10x_ld.s 为小容量,startup_stm32f10x_hd.s 为大容量芯片的 启动文件。这里copy进来是方便其他开发者使用小容量或者大容量芯片的用户。现在看看我们的CORE文件夹下面的文件:

C++中所有函数的使用说明

C++函数大全 2010-04-10 10:11 数学函数,所在函数库为math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fabs(double x) 返回双精度参数x的绝对值 long labs(long n) 返回长整型参数n的绝对值 double exp(double x) 返回指数函数ex的值 double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中 double ldexp(double value,int exp); 返回value*2exp的值 double log(double x) 返回logex的值 double log10(double x) 返回log10x的值 double pow(double x,double y) 返回xy的值 double pow10(int p) 返回10p的值 double sqrt(double x) 返回+√x的值 double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度 double asin(double x) 返回x的反正弦sin-1(x)值,x为弧度 double atan(double x) 返回x的反正切tan-1(x)值,x为弧度 double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x为弧度 double cos(double x) 返回x的余弦cos(x)值,x为弧度 double sin(double x) 返回x的正弦sin(x)值,x为弧度 double tan(double x) 返回x的正切tan(x)值,x为弧度 double cosh(double x) 返回x的双曲余弦cosh(x)值,x为弧度 double sinh(double x) 返回x的双曲正弦sinh(x)值,x为弧度 double tanh(double x) 返回x的双曲正切tanh(x)值,x为弧度 double hypot(double x,double y) 返回直角三角形斜边的长度(z), x和y为直角边的长度,z2=x2+y2 double ceil(double x) 返回不小于x的最小整数 double floor(double x) 返回不大于x的最大整数 void srand(unsigned seed) 初始化随机数发生器 int rand() 产生一个随机数并返回这个数 double poly(double x,int n,double c[])从参数产生一个多项式 double modf(double value,double *iptr)将双精度数value分解成尾数和阶double fmod(double x,double y) 返回x/y的余数 double frexp(double value,int *eptr) 将双精度数value分成尾数和阶double atof(char *nptr) 将字符串nptr转换成浮点数并返回这个浮点数double atoi(char *nptr) 将字符串nptr转换成整数并返回这个整数 double atol(char *nptr) 将字符串nptr转换成长整数并返回这个整数 char *ecvt(double value,int ndigit,int *decpt,int *sign) 将浮点数value转换成字符串并返回该字符串 char *fcvt(double value,int ndigit,int *decpt,int *sign) 将浮点数value转换成字符串并返回该字符串

STM32的Keil工程文件建立过程

固件库采用3.5.0版本 USE_STDPERIPH_DRIVER,STM32F10X_CL 1.首先建立工程文件,将固件库中的文件复制过来 建立工程文件夹project,包含文件夹 user:用户可自己修改的文件 CMSIS:Cortex-M3内核相关文件 startup:启动单片机的汇编文件 driver:外设操作的驱动文件 具体向工程文件夹中添加的文件为: 将路径:固件库文件夹\Project\STM32F10x_StdPeriph_Template中的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h文件添加到user文件夹,再在其中建立一个main.c主文件 将路径:固件库文件夹\Libraries\CMSIS\CM3\CoreSupport中的core_cm3.c、core_cm3.h 文件,以及固件库文件夹\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x中的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h文件添加到CMSIS文件夹 将路径:固件库文件夹\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 中的startup_stm32f10x_cl.s(互联型启动文件)文件添加到startup文件夹 将路径:固件库文件夹\Libraries\STM32F10x_StdPeriph_Driver中的src和inc文件夹全部复制到driver文件夹

2.在Keil中建立工程并管理工程文件

STM32工程建立(F4系列)

使用MDK(Keil)建立一个STM32工程模板的流程如图所示: 一.获取ST库源码。到ST公司的官网进行查找并下载,如图所示: 1.新建工程文件夹——《STM32工程模板》。首先,新建工程文件夹《STM32工程模板》,然后再在该文件夹下新建6个文件夹,分 别:《Doc》、《BSP 》、《Listing》、《Output》、《Project》和《User》。其中, 2.《Doc》用于存放各种说明文档; 《BSP 》用于存放各种库文件; 《Listing》用于存放编译时产生的中间文件; 《Output》用于存放生成的下载所需的文件; 《Project》用于存放工程文件; 《User》用于存放用户文件,即我们自己编写的各种源文件。具体情况如下图所示: 具体步骤,以KEIL5 MDK5.18中建立STM32F417工程为例: 二.STM32工程建立(F4系列) 2016年4月13日16:57

将下载的stm32f4_dsp_stdperiph_lib_zip 压缩包中的文件复制到工程模板文件 夹下的STM32F4XX_StdPeriph_Driver 文件夹。如下图: 1)将stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1 \Libraries\CMSIS\Include 文件夹中对应的core_cm 文件复制到工程模板文件夹下的CMSIS文件夹。具体操作情况如下图: 2)向建立的工程文件夹中添加库文件。 3.

将stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1 \Libraries\CMSIS\Device\ST\STM32F4xx\Include 文件夹中文件复制到工程模板文件夹下的CMSIS 文件夹。具体操作情况如下图: 3)将stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1 \Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm 文件夹中对应芯片的startup 文件复制到工程模板文件夹下的CMSIS 文件夹。具体操作情况如下图: 4)将库文件中Project文件夹下的相关文件复制到工程模板文件夹下的User文件 夹中。具体操作情况如下图: 5)

Keil4 建立STM32工程详解

Keil4 建立STM32工程详解 1:安装mdk412,用注册机注册,这个过程不详细叙述了。 2:在本地某个路径下建立STM32工程文件夹,命名:my_STM32,并在my_STM32下建立rvmdk文件夹,并在rvmdk文件夹内建立 obj,list两个文件夹。 3: 打开Keil4. 4: 选择Project菜单->New uVision Project...,选择.../my_STM32/rvmdk文件夹的路径,并命名工程文件:my_STM32,回车 5:选择器件名称,见图1

图1 单击OK。 6:如图2所示:选择否,不添加Startup.s,以后自己添加。 图2 7:如图3,建立几个Group:startup(即将装入启动文件等),usr(即将装入应用程序文件),FWlib(即将装入库文件的.c文件),doc(即将装入说明文档)

图3 8:右键单击FWlib,Add Files to Group 'FWlib',选择库文件的路径下的src 文件内的所有文件,并点击Add,如图4所示:

图4 9:将cortexm3_macro.s,stm32f10x_vector.s,stm32f10x_it.c, stm32f10x_it.h,stm32f10x_conf.h,main.c,readme.txt拷贝到my_STM32文件夹内。 10:右键单击usr,Add Files to Group 'usr',选择main.c,stm32f10x_it.c,stm32f10x_it.h,stm32f10x_conf.h,并Add,如图5所示

(仅供参考)STM32F105RBT6最小系统原理及工程的建立

市面上的许多stm32开发板都是使用ULINK2作为调试仿真工具,鉴于ULINK2所需引脚过多在学习时还可以,但应用于实际电路设计生产会造成许多硬件资源的浪费。鉴于此,本人经实验得出利用ST-LINK作为仿真下载工具的实验最小系统电路。希望给大家作为参考。 一、最小系统原理图 二、建立工程的步骤 1、先在一个文件夹内建6个子文件夹: DOC:放说明文件 Libraries:放库文件(CMSIS、FWlib) Listing:放编译器的中间文件 Output:放编译器的输出文件 Project:放项目工程 User:放自己编写的程序、main、stm32f10x_conf、stm32f10x_it.C、stm32f10x_it.h

2、双击桌面UV4图标启动软件,,---NWE uVision Project--选择保存地方----选择芯片型号------在左边处建立5个GOP(STARTUP放启动文件)、(CMSIS放内核文件)、(FWLIB放库里面的src的.C文件)、(USER 放自己写的程序文件及stm32f10x_conf.h、stm32f10x_it.h、stm32f10x_it.c、main.c)

3、将Output重置到一开始时所建的“Output”文件夹中。 4、将Listing重置到一开始时所建的“Listing”文件夹中。 5、在C、C++处的“Define”输入:STM32F10X_HD,USE_STDPERIPH_DRIVER。对于不同的芯片容量,可对HD进行更改(LD、MD、HD、XL、XC)。然后在“Include Paths”处指定相关的搜库位置。 6、Debug处选好下载器

统计函数的简介及用法

2011年2月

统计函数的简介及用法 SUM(number1,number2, ...) 返回某一单元格区域中所有数字之和。 语法 Number1, number2, ... 为1 到30 个需要求和的参数。 说明 直接键入到参数表中的数字、逻辑值及数字的文本表达式将被计算,请参阅下面的示例一和示例二。 如果参数为数组或引用,只有其中的数字将被计算。数组或引用中的空白单元格、逻辑值、文本或错误值将被忽略。请参阅下面的示例三。 如果参数为错误值或为不能转换成数字的文本,将会导致错误。 示例 如果您将示例复制到空白工作表中,可能会更易于理解该示例。 操作方法 创建空白工作簿或工作表。 请在“帮助”主题中选取示例。不要选取行或列标题。 从帮助中选取示例。 按Ctrl+C。 在工作表中,选中单元格A1,再按Ctrl+V。 若要在查看结果和查看返回结果的公式之间切换,请按Ctrl+`(重音符),或在“工具”菜单上,指向“公式审核”,再单击“公式审核模式”。 1 2 3 4 5 6 A 数据 -5 15 30 '5 TRUE 公式说明(结果) =SUM(3, 2) 将 3 和 2 相加 (5) =SUM("5", 15, TRUE) 将5、15 和 1 相加,因为文本值被转换为数字,逻辑值 TRUE 被转换成数字 1 (21) =SUM(A2:A4) 将此列中前三个数相加 (40) =SUM(A2:A4, 15) 将此列中前三个数之和与 15 相加 (55) =SUM(A5,A6, 2) 将上面最后两行中的值之和与 2 相加。因为引用非数值的值 不被转换,故忽略上列中的数值 (2)

keil_MDK建立工程步骤方法

KEIL工程建立步骤点击Next,勾选安装协议:

下一步,选择安装路径(笔者因硬盘空间不足安装在E盘,但若读者硬盘资源充裕,则建议安装在C盘,跑起来快些): 下一步,填写用户信息,个人用户随意填入即可:

点击Next 就进入实质的安装过程啦,Wait for a Whle…… 很快安装完毕,看到2 个可选项: 1、保持当前uVision 的设置。 2、载入以下选择的工程实例,默认即可。

点击Next,来到最后一个安装界面: 1.是否安装ULINK Pro Driver V1.0驱动? 2.是否显示软件发布说明? 读者可以按照自己的需求勾选。 点击Finish,KEIL MDK就完成安装了,可以发现桌面上生成了名为“Keil uVision4”的可执行文件快捷方式。双击“Keil uVision4”图标打开Keil uVision4开发环境,此时Keil uVision4会自动载入一个工程项目(依安装的倒数第二步勾选而定),我们就此可以简单地看看KEIL MDK 的用户界面。

如图所示,KEIL MDK的基本用户界面也是很简洁的,也是由一些菜单栏,工具栏,状态栏等区域构成。当然KEIL MDK的软件界面远远不止这么简单,读者可以在日后漫长的工程师生涯逐一熟悉。 至此,KEIL MDK的安装工作已经完毕了。接下来我们要开始建立我们的第一个工程。在开始之前,请读者先从网上获取ST公司提供的STM32固件库“stm32f10x_fw_archive v2.0 (May 2009)”,然后将其解压。 首先请读者在任意一个地方建立一个空文件夹,并将其命名为“STM32_FW”。然后在STM32_FW 里新建6个文件夹,分别命名为“boot”、“library”、“src”、“obj”、“list”、“library”。 如下图所示: 接下来请执行如下操作:

使用VC6.0 DDK编译驱动程序的实用技巧详解(经典总结版)

VC6编译驱动的方法(含32和64位) 设计初衷 我对VC6较熟悉,尤其喜欢他的Go To Definition的右键功能,我可以随时找到我程序 中用到的函数,结构体等详细信息,可以知道他在哪个头文件中。但我以前写的一篇用makefile 来创建的工程虽然可以在VC6下编译驱动,但是在编程时想查找一下某个函数或 结构,总要借助于DDK的帮助文档来查看,实在不方便! 带着一点试试的想法,居然我在VC6下也可以象做应用程序一样的开发驱动。总之, 这是利用了VC6的IDE环境,用了VC6下的一些工具(BSCMAKE.EXE),又利用了DDK 下的编译工具,MAKE程序来实现的。就是按下VC6下的编译命令,我需要调用的编译器, 连接器应该是DDK下的,而其他工具我还是用VC6自带的。这样,我居然成功了。下面 将方法分享给大家,有不正确的地方还请指教。 准备工作 首先,如果你使用的是WINXPDDK,那么安装之后(默认安装在c 盘),找到 C:\WINDDK\2600\bin\x86。 然后,如果你安装了VC6,那么到C:\Program Files\Microsoft Visual Studio\VC98下,你会看到一个bin 文件夹,我们将这个文件夹先改名为binVC6。然后我们创建一个新的bin 文件夹。将C:\WINDDK\2600\bin\x86文件夹下的所有文件拷贝到C:\Program Files\Microsoft Visual Studio\VC98\bin 目录下。注意:这个bin 目录是我们新建的,原来VC6自带的BIN 文件夹我们已经改成了BINVC6。

STM32F4XX新建工程步骤

一:建立文件夹 1.复制库函数中Libraries文件夹到你所需建立工程的文件夹下,例:我在Example文件夹下建立工程,那么把Libraries文件夹复制到Example。 2.在你所需建立工程的文件夹下新建文件夹User。我在Example下建立User文件夹。 https://www.wendangku.net/doc/b03042305.html,er文件夹下建立Obj和List文件夹 4.拷贝库函数里Periject/STM32F4xx_StdPeriph_Templates文件夹下main.c,stm32f4xx_it.c 和stm32f4xx_it.h到User文件夹下 5.拷贝库函数里Periject/STM32F4xx_StdPeriph_Templates文件夹下stm32f4xx_conf.h到 Libraries\CMSIS\Device\ST\STM32F4xx\Include 6.在你所需建立工程的文件夹下新建文件夹CMSIS。 7.在你所需建立工程的文件夹下新建文件夹MDK-ARM。 8.在你所需建立工程的文件夹下新建文件夹STM32F4xx_StdPeriph_Driver。 目前建立的文件夹如图所示: 二:建立工程: 1.打开Keil4新建工程文档,路径选择为MDK-ARM,选择芯片,然后点否:不添加。 2.然后添加刚刚新建文件夹名字的组。 添加完成后如图:

三:给各个组添加文件: https://www.wendangku.net/doc/b03042305.html,er文件夹下添加添加步骤一中User文件夹中的main.c和stm32f4xx_it.c。 2.CMSIS文件夹下添加步骤一中Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates中的system_stm32f4xx.c。 3.MDK-ARM文件夹下添加Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm中的startup_stm32f4xx.s。这个我是用的Keil,所以选arm文件夹下的,其他软件就选其他软件的吧。 4.STM32F4xx_StdPeriph_Driver是驱动,用到哪个外设就添加哪个外设就是,在这个路径Libraries\STM32F4xx_StdPeriph_Driver\src 添加完成后如图: 四:Target设置: 1.output选项:输出指定到步骤一中Obj文件夹。 2.List选项:输出指定到步骤一中List文件夹中。 3.C/C++选项:Define框中填入:“STM32F4XX,USE_STDPERIPH_DRIVER”(不要引号) 如图: IncludePaths框中填入:Libraries\STM32F4xx_StdPeriph_Driver\inc Libraries\CMSIS\Device\ST\STM32F4xx\Include 添加完成后如图:

如何为STM32F030建立工程模板6

如何为STM32F030建立工程模板最近在学习STM32F030的相关知识,在建立工程模板过程中总结了一些经验; 这些经验大多是通过网络找到的;实际上是炒了正点原子的剩饭,望其莫怪; 现在共享给大家,希望对大家能有帮助; 首先、在建立工程之前,建议各位童鞋在电脑的某个目录下面建立一个文件夹,后面所建立的工程文件都放在这个文件夹下面,这里我们建立一个文件夹为LED。 注意,关于文件夹的命名,建议大家都用英文, 也就是说让这个工程创建在一个全英文的路径下,这样可以避免在链接的过程出现错误; 1、回到MDK主界面,可以看到工程中有一个默认的工程, 点击这个工程名字,然后选择菜单Project->Close Project,就关闭掉这个工程了! 这样整个MDK就是一个空的了,接下来我们将建立我们的工程模版。 2、点击Keil的菜单:Project–>New Uvision Project, 然后将目录定位到刚才建立的文件夹LED之下, 在这个目录下面建立子文件夹USER(我们的代码工程文件都是放在USER目录,很多人喜欢新建“Project”目录放在下面,这也是可以的,这个就看个人喜好了), 然后定位到USER目录下面,我们的工程文件就都保存到USER文件夹下面。 工程命名为LED,点击保存。 接下来,我们在LED工程目录下面,新建3个文件夹CORE,OBJ以及STM32F0_FWLib。CORE用来存放核心文件和启动文件, OBJ是用来存放编译过程文件以及hex文件, STM32F10x_FWLib文件夹顾名思义用来存放ST官方提供的库函数源码文件。 USER目录除了用来放工程文件外, 还用来存放主函数文件main.c,以及其他包括system_stm32f10x.c、等等

研华设备驱动程序编程使用介绍.pdf

研华设备驱动程序编程使用介绍 (本文件内容适用于所有数字量和模拟量采集卡) 这一部分包括了创建DA&C应用的基本信息,介绍了设备驱动程序文件的特点,讲解了基本的使用方法。 ?Visual C++ 5.0或更高版本 ?Visual Basic5.0或更高版本 ?Delphi4.0或更高版本 ?Borland C++ 5.0或C++ builder 1.0或更高版本 如果您正在使用的开发工具不是上面所述的几种,请仔细查阅您所使用的工具的文档,了解该工具如何调用动态连接库来创建应用程序。 Windows 95/98/NT/2000的32位DLL的函数库是动态连接,这就是说动态连接库并不直接编译到应用程序的可执行文件中,而只是将动态连接库的路径信息保存在可执行文件中。设备驱动程序只是在可执行程序执行过程中动态连接库被调用的时候才被连接到应用程序。 导入库(*.LIB)包含了它们它们的动态连接库定义的外部函数。它们隐含了动态连接库的位置。如何为您的应用程序引入动态连接库的路径信息,例如:是通过导入函数库还是通过函数声明的方法,取决于您所使用的编程工具。 使用函数原型是良好的编程习惯,这也是为什么设备驱动程序总是被打包成函数原型形式。安装工具为您选择的的开发工具拷贝正确的的原型文件。如果你不打算使用研华驱动程序支持的开发工具,那么您需要创建您自己的函数原型。 按照下面的步骤开始对研华的硬件设备编程应用: 这一部分我们推荐您采用研华的设备驱动程序结合微软的可视化平台来开发您的系统!研华设备驱动程序支持Visual C++ 5.0及其以上的版本。 要使用DA&C函数,需要按照下面的步骤使用研华驱动程序提供的DLL(动态连接库,Dynamic Linked Library) 1.象编写一般的Windows应用程序一样创建您的应用程序代码,在这些代码中可以象典型的函数调用一样调用研华驱动程序中提供的动态连接库中(DLL)的函数。 2.声明在您的程序中用到的函数,即:包含动态连接库(DLL)的头文件,该函数声明了所有的动态连接库中的函数,如下所示: #include “driver.h”

STM32工程文件建立的方法

STM32根据库建立自己的工程 ■利用STM32的官方库在Keil uVision 4中新建一个工程的步骤: 一. 新建工程时的软件操作,工程配置方法: 1. 点击菜单栏的Project → New uVision Project,新建一个工程文件,取名,设置好保存路径后,点击“保存”即可。 2. 接着弹出一个对话框,选择芯片型号,我们用的是ST公司的STM 32F103VE,选择该芯片,点击“OK”即可。 3. 接着弹出的对话框,如下,问我们是否要拷贝STM 32的启动代码到工程文件中,这份启动代码在M 3系列中都是适用的,我们可以点击“是”。但是,这里用ST的固件库创建工程,库里面也有启动代码文件,为了保持库的完整性,我们就不需要开发环境自带的启动代码了,稍后,我们手动添加,所以这里,我们点击“否”。 4. 此时,已经新建了一个工程,但是,里面还没有我们所需的文件,接下来,就该添加所需文件了。在工程的根目录( 即,保存工程的文件夹下) 新建以下3个文件夹,User,FWlib,CMSIS。User用来存放工程文件和用户代码,包括主函数main.c。FWlib用来存放固件库里面的inc和src这两个文件夹以及它们里面的所有文件,这里面包含了芯片上的所有外设的驱动。CMSIS用来存放固件库的启动文件,和,M 3系列通用的文件。CMSIS里面的文件适合所有M 3内核的单片机。CMSIS的缩写为,Cortex Microcontroller Software Interface Standard,是ARM Cortex 微控制器软件接口标准,是ARM公司为芯片厂商提供的一套通用的且独立于芯片厂商的处理器软件接口。 5. 把固件库的Libraries \ STM32F10x_StdPeriph_Driver目录下的inc和src这两个文件夹复制到刚才新建的FWlib文件夹中。 6. 把固件库的Project \ STM32F10x_StdPeriph_Template目录下的main.c,stm32f10x_conf.h,stm32f10x_it.h,stm32f10x_it.c复制到User文件夹下。main.c也可以不复制,稍后,自己新建一个main.c文件在User文件夹下,也可以。stm32f10x_it.h,stm32f10x_it.c这两个文件里面是中断函数,里面为空,用户需要时,可以自己添加中断服务程序。stm32f10x_conf.h 是需要用户配置的头文件,当我们需要用到芯片中某部分外设的驱动时,只需要在该文件中把相应注释标记去掉,即可,这样就可以把相应头文件包含进来了。片上外设的驱动在Libraries \ STM32F10x_StdPeriph_Driver目录下的src文件夹中,它们的头文件在inc文件夹中。 7. 将固件库的Libraries \ CMSIS \ Core \ CM3文件夹下的全部文件和文件夹复制到刚才新建的CMSIS文件夹中,Startup / arm目录下一般有三个启动文件,分别为,startup_stm32f10x_ld.s,startup_stm32f10x_md.s,startup_stm32f10x_hd.s,按顺序是小,中,大容量Flash单片机的启动文件。我们这里用的是STM32F103VE有512 K Flash,属于大容量的。所以,稍后,把startup_stm32f10x_hd.s添加到我们的工程中。不同大小的Flash对应的启动文件不同,这点要注意。 8. 最后,可以把我们的工程文件,和,其它一些编译产生的文件都放在User文件夹下,这样,看起来比较整洁。 9. 回到Keil软件的工程中,鼠标右击“Target”,在弹出的菜单中选择“Add Group”选项,新建4个分组。分别命名为,STARTCODE,USER,FWlib,CMSIS。STARTCODE管理启动代码,USER

C++函数使用方法

C++中数学函数,所在函数库为cmath.h、cstdlib.h、cstring.h、cfloat.h 所以只要加头文件#include、#include、#include、#include C中数学函数,所在函数库为math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fabs(double x) 返回双精度参数x的绝对值 long labs(long n) 返回长整型参数n的绝对值 double exp(double x) 返回指数函数ex的值 double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中 double ldexp(double value,int exp); 返回value*2exp的值 double log(double x) 返回logex的值 double log10(double x) 返回log10x的值 double pow(double x,double y) 返回xy的值 double pow10(int p) 返回10p的值 double sqrt(double x) 返回+√x的值 double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度 double asin(double x) 返回x的反正弦sin-1(x)值,x为弧度 double atan(double x) 返回x的反正切tan-1(x)值,x为弧度 double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x为弧度 double cos(double x) 返回x的余弦cos(x)值,x为弧度 double sin(double x) 返回x的正弦sin(x)值,x为弧度 double tan(double x) 返回x的正切tan(x)值,x为弧度 double cosh(double x) 返回x的双曲余弦cosh(x)值,x为弧度 double sinh(double x) 返回x的双曲正弦sinh(x)值,x为弧度 double tanh(double x) 返回x的双曲正切tanh(x)值,x为弧度 double hypot(double x,double y) 返回直角三角形斜边的长度(z), x和y为直角边的长度,z2=x2+y2 double ceil(double x) 返回不小于x的最小整数 double floor(double x) 返回不大于x的最大整数 void srand(unsigned seed) 初始化随机数发生器 int rand() 产生一个随机数并返回这个数 double poly(double x,int n,double c[])从参数产生一个多项式 double modf(double value,double *iptr)将双精度数value分解成尾数和阶 double fmod(double x,double y) 返回x/y的余数 double frexp(double value,int *eptr) 将双精度数value分成尾数和阶 double atof(char *nptr) 将字符串nptr转换成浮点数并返回这个浮点数 double atoi(char *nptr) 将字符串nptr转换成整数并返回这个整数 double atol(char *nptr) 将字符串nptr转换成长整数并返回这个整数 char *ecvt(double value,int ndigit,int *decpt,int *sign) 将浮点数value转换成字符串并返回该字符串 char *fcvt(double value,int ndigit,int *decpt,int *sign) 将浮点数value转换成字符串并返回该字符串 char *gcvt(double value,int ndigit,char *buf)

新建keil工程模板(使用stm32库)

新建keil工程模板(使用stm32库) 1.新建一个文件夹(stm32工程模板) 2.在这个文件夹中新建四个文件夹(参考示例程序),其中bsp存 放外设源文件和头文件,doc存放程序说明文件,libraries存放两个文件夹CMSIS(存放内核支持文件和设备支持文件)和STM32F10X_StdPeriph_Driver(存放外部设备驱动文件),project 存放工程文件,user存放自己的文件(如主函数等) 3.将固件库中bsp文件夹和libraries文件夹中的内容复制到stm32 工程模板相应文件夹中 4.将示例程序中user文件夹下除main.c文件全部复制到stm32工 程模板的user文件夹中,也可从keil5安装路径中寻找stm32官

方库文件并添加user文件夹中,然后修改stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h(比较麻烦,建议用方法1) 5.在keil5 里新建工程:点击工具栏的Project→New Project新 建工程,并选择芯片型号为stm32f103rb,路径选择为刚才新建的project文件夹下,工程命名为template,之后在弹出的manage run-time environment窗口中点击cancel,稍后手动搭建编译环境 6.点击新建文件,然后保存为main.c,保存路径为user文件夹下

7.配置相关文件:点击配置的按钮,打开如下界面,添加相应的组 名,其中CMSIS,stdPeriphDriver,bsp和之前建的文件是一样的,其中后缀是.s,配置的时候要选择所有文件格式才能看到,最终的配置如图:

手把手教你STM32F103ZE新建keil工程

手把手教你STM32F103ZE新建keil工程 接下来我将手把手的教您新建一个基于V3.5版本固件库的STM32F1工程模板。步骤如下: 1)在建立工程之前,我们先在电脑的某个目录下建立文件夹(我建在了桌面),后面所建立的工程都可以放在这个文件夹下面,这里我们建立一个文件夹 为test。 2)点击MDK的菜单:Project→New Uvision Project,然后将目录定位到刚才建立的文件夹test之下,在这个目录下建立子文件夹USER(我们的代码 工程文件都是放在USER目录,很多人喜欢新建“”Project“”目录下面,这也 是可以的,这个就看个人喜好了),然后定位到USER目录下,我们的工 程文件就都保存到USER文件夹下面。工程命名为test,点击保存。 图1新建工程

图2定义工程名称 接下来会出现一个选择CPU的界面,就是选择我们的芯片型号。如图3所示,这里我们选择STM32F103ZET6,操作:STMicroeletronics→STM32F1 Series→STM32F103→STM32F103ZET6(如果使用的是其他系列的芯片,选择相应的型号就可以了,特别注意:一定要安装对应的器件pack才会显示内容哦~) 图3选择芯片型号

3)点击OK,MDK会弹出Manage Run-Time Environment 对话框,如图4: 图4Manage Run-Time Environment 界面 这是MDK5新增的一个功能,,在这个界面,我们可以添加自己需要的组件,从而方便构建开发环境,不过这里我们不做介绍。所以在图 4 所示界面,我们直接点击Cancel,即可,得到如图5所示的界面: 图5工程初步建立 到这里,我们还只是建了一个框架,还需要添加启动代码,以及.c 文件等。

linux内核驱动中_IO, _IOR, _IOW, _IOWR 宏的用法与解析

在驱动程序里,ioctl() 函数上传送的变量cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。cmd的大小为32位,共分 4 个域: bit31~bit30 2位为“区别读写” 区,作用是区分是读取命令还是写入命令。 bit29~bit15 14位为"数据大小" 区,表示ioctl() 中的arg 变量传送的内存大小。 bit20~bit08 8位为“魔数"(也称为"幻数")区,这个值用以与其它设备驱动程序的ioctl 命令进行区别。 bit07~bit00 8位为"区别序号" 区,是区分命令的命令顺序序号。 像命令码中的“区分读写区” 里的值可能是_IOC_NONE (0值)表示无数据传输, _IOC_READ (读),_IOC_WRITE (写) ,_IOC_READ|_IOC_WRITE (双向)。 内核定义了_IO() , _IOR() , IOW() 和_IOWR() 这4 个宏来辅助生成上面的cmd 。下面分析_IO() 的实现,其它的类似: 在asm-generic/ioctl.h 里可以看到_IO() 的定义: #define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0) 再看_IOC() 的定义: #define _IOC(dir,type,nr,size) \ (((dir) << _IOC_DIRSHIFT) | \ ((type) << _IOC_TYPESHIFT) | \ ((nr) << _IOC_NRSHIFT) | \ ((size) << _IOC_SIZESHIFT)) 可见,_IO() 的最后结果由_IOC() 中的4 个参数移位组合而成。 再看_IOC_DIRSHIT 的定义: #define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS) _IOC_SIZESHIFT 的定义: #define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS) _IOC_TYPESHIF 的定义: #define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS) _IOC_NRSHIFT 的定义: #define _IOC_NRSHIFT 0 _IOC_NRBITS 的定义: #define _IOC_NRBITS 8 _IOC_TYPEBITS 的定义: #define _IOC_TYPEBITS 8 由上面的定义,往上推得到: 引用 _IOC_TYPESHIFT = 8 _IOC_SIZESHIFT = 16 _IOC_DIRSHIFT = 30

STM32建工程详细方法步骤

1、首先找到ST官最新版本的固件库:STM32F10x_StdPeriph_Lib_V3.5.0 2、新建一个工程文件夹:比如led工程文件夹 3、在led工程文件夹中新建5个文件夹:CORE、HARDWARE、 STM32F10x_FWLib、SYSTEM、USER

CORE用来存放启动文件等 HARDWARE用来存放各种硬件驱动代码 STM32F10x_FWLib文件夹顾名思义用来存放ST官提供的库函数源码文件SYSTEM文件夹下包含了delay、sys、usart等三个文件夹。分别包含了delay.c、sys.c、usart.c及其头文件delay.h、sys.h、usart.h USER用来存放我们主函数文件main.c,以及其他包括system_stm32f10x.c 等等。 4、将固件库包里面相关的启动文件复制到我们的工程目录CORE之下 打开固件库STM32F10x_StdPeriph_Lib_V3.5.0文件夹,定位到目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下面,将文件core_cm3.c和文件core_cm3.h 复制到CORE下面去。然后定位到目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ ST\STM32F10x\startup\arm下面,将里面startup_stm32f10x_md.s、

startup_stm32f10x_ld.s、startup_stm32f10x_hd复制到CORE下面。这里我们解释一下,其实我们只用到arm目录下面的startup_stm32f10x_md.s文件,这个文件是针对中等容量芯片的启动文件。其他两个主要的为 startup_stm32f10x_ld.s为小容量,startup_stm32f10x_hd.s为大容量芯片的启动文件。这里copy进来是便其他开发者使用小容量或者大容量芯片的用户。现在看看我们的CORE 文件夹下面的文件: 5、将官的固件库包里的源码文件复制到我们的工程目录STM32F10x_FWLib之下。 打开固件库STM32F10x_StdPeriph_Lib_V3.5.0文件夹,定位到目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Drive r下面,将目录下面的src,inc文件夹copy到我们刚才建立的 STM32F10x_FWLib文件夹下面。src存放的是固件库的.c文件,inc存放的是对应的.h文件,您不妨打开这两个文件目录过目一下里面的文件,每个外设对应一个.c文件和一个.h头文件。

相关文档
相关文档 最新文档