当前位置:文档之家› STM32库函数说明及示例

STM32库函数说明及示例

STM32库函数说明及示例
STM32库函数说明及示例

STM32库函数说明及示例(版本V1.4.0)

----第一篇:GPIO库

相关术语说明:

gpio:通用输入输出接口

gpio管脚:一个io管脚,这个管脚可以有多个配置。在库函数中用GPIO_Pin_1这样的宏定义表示

gpio端口(gpio分组):一组gpio管脚的信息。在库函数中用宏定义GPIOA GPIOB等表示

1 gpio库说明

库文件名:stm32f4xx_gpio.c

文档提示翻译:

如何使用这个驱动

(1)使用RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE)函数使能GPIO的AHB总线时钟。

(2)使用GPIO_Init()函数对每个引脚进行四种可能的配置

《1》输入状态:Floating(浮空), Pull-up(上拉), Pull-down(下拉)

《2》输出状态:Push-Pull (上拉下拉)(Pull-up(上拉), Pull-down(下拉)or no Pull(不上拉也不下拉)),Open Drain(开漏)(Pull-up(上拉), Pull-down(下拉)or no Pull(不上拉也不下拉)),在输出模式,速度配置成2MHZ,25MHZ,50MHZ和100MHZ. 《3》第二功能:上拉下拉和开漏

《4》模拟:当一个管脚被用作ADC通道或者DAC输出的时候,需要配置成此模式(3)外设的第二功能:

《1》在ADC和DAC模式,使用GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AN 把需要的管脚配置成模拟模式

《2》对于其它的管脚(定时器,串口等):

l 使用GPIO_PinAFConfig()函数把管脚和需要的第二功能进行连接

l 使用GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF把需要的管脚配置成第二功能模式l 通过成员变量GPIO_PuPd, GPIO_OType and GPIO_Speed选择类型,上拉下拉和输出速度

l 调用函数GPIO_Init()

(4)在输入模式,使用函数GPIO_ReadInputDataBit()得到配置好管脚的电平

(5)在输出模式,使用函数GPIO_SetBits()/GPIO_ResetBits()设置配置好IO的高低电平

(6)在复位过程和刚刚复位后,第二功能是无效的,GPIO被配置成了输入浮空模式(JTAG管脚除外)

(7)当LSE振荡器关闭的时候,LSE振荡器管脚OSC32_IN和OSC32_OUT可以作为通过IO来使用(分别用PC14和PC15表示)。LSE的优先级高于GPIO函数

(8)当HSE振荡器关闭的时候,HSE振荡器管脚OSC_IN和OSC_OUT可以作为通用IO(PH0,PH1)来使用。HSE的优先级高于GPIO函数。

2 具体函数说明

初始化和配置相关函数

1. voidGPIO_DeInit(GPIO_TypeDef* GPIOx)

函数解释:gpio的反初始化函数,该函数的作用是把GPIO相关的寄存器配置成上电复位后的默认状态,在第一次初始化前或者不再使用某一个接口后可以调用该函数。

函数参数说明:GPIOx:gpio的分组,如GPIOA GPIOB GPIOC等的宏定义(这些宏定义在头文件stm32f4xx.h中,由厂家写好,我们直接使用即可)

2. voidGPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef*GPIO_InitStruct)

函数解释:gpio的初始化函数,该函数的作用是对io进行初始化。

函数参数说明:(1)GPIOx:gpio的分组,如GPIOA GPIOB GPIOC等的宏定义。

(2)GPIO_InitStruct:gpio的初始化相关结构体。该结构体里面的成员变量决定了我们具体的初始化参数。以下进行说明:

l GPIO_Pin:指定具体的IO脚,如GPIO_Pin_0 GPIO_Pin_1这样的宏定义,这些宏由厂家写好,我们直接使用即可。

l GPIO_Mode:指定gpio的模式,有以下四种模式:

GPIO_Mode_IN(输入),GPIO_Mode_OUT(输出),GPIO_Mode_AF(第二功能),GPIO_Mode_AN(模拟),可以直接使用这四种宏定义。

l GPIO_Speed:指定IO的最快翻转速度,也就是当使用IO产生频率(如PWM)的最快速度。有以下四种速度的配置:

GPIO_Low_Speed(低速),GPIO_Medium_Speed(中等速度),GPIO_Fast_Speed(快速),GPIO_High_Speed(高速),可以直接使用这四种宏定义。

l GPIO_OType:指定选择管脚的输出类型,有以下两种配置:

GPIO_OType_PP(推挽方式输出),GPIO_OType_OD(开漏方式输出),可以直接使用这两种宏定义。

Tips:

推挽输出:推挽输出就是单片机引脚可以直接输出高电平电压。低电平时接地,高电平时输出单片机电源电压。这种方式可以不接上拉电阻。但如果输出端可能会接地的话,这个时候输出高电平可能引发单片机运行不稳定,甚至可能烧坏引脚。推挽方式的驱动力更大。

开漏输出:开漏输出就是不输出电压,低电平时接地,高电平时不接地。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电源电压。这种方式适合在连接的外设电压比单片机电压低的时候。

l GPIO_PuPd。指定选择管脚的上拉和下拉模式。有如下三种配置:

GPIO_PuPd_NOPULL(不上拉也不下拉),GPIO_PuPd_UP(上拉),GPIO_PuPd_DOWN (下拉)。Tips:这些都是IO的内部上拉或者下拉模式,也可以接上拉和下拉电阻通过硬件进行外部上拉和外部下拉。

3. voidGPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)

函数解释:gpio结构体的初始化。对GPIO_InitStruct结构体进行默认配置

函数参数说明:GPIO_InitStruct,直接传入该结构体的指针,在该函数内会对结构体进行初始化。

4. voidGPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

函数解释:锁定gpio的寄存器,锁定的寄存器是GPIOx_MODER,GPIOx_OTYPER, GPIOx_OSPEEDR,GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH。在下一次复位前,被锁定的管脚不能被修改。

函数参数说明:GPIOx:gpio的分组(如GPIOA,GPIOB等)。GPIO_Pin:具体的gpio管脚(如GPIO_Pin_0 GPIO_Pin_1这样的宏定义)

GPIO的读写函数

1. uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_tGPIO_Pin)

函数解释:读取io输入管脚的值

函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚

函数返回值说明:输入管脚的值Bit_SET(高电平) Bit_RESET(低电平)

2. uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)

函数解释:读取输入io数据,该函数用于读取一个IO分组的所有数据

函数参数说明:GPIOx:gpio的分组/gpio端口

函数返回值说明:一个io端口的所有数据(输入状态)

3. uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_tGPIO_Pin)

函数解释:读取io输出管脚的值

函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚

函数返回值说明:输出管脚的值Bit_SET(高电平) Bit_RESET(低电平)

4. uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)

函数解释:读取输出io分组/端口的值

函数参数说明:GPIOx:gpio的分组/gpio端口

函数返回值说明:一个io端口的所有数据(输出状态)

5. voidGPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

函数解释:对io管脚进行置位(输出高电平)。这个函数使用GPIOx_BSRR寄存器来实现原子读或者修改操作。在这种情况下,在读和修改访问时发生一个IRQ中断是没有危险的。函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚或者是io管脚的组合

6. voidGPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

函数解释:对io管脚进行复位(输出低电平)。这个函数使用GPIOx_BSRR寄存器来实现原子读或者修改操作。在这种情况下,在读和修改访问时发生一个IRQ中断是没有危险的。函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚或者是io管脚的组合

7. voidGPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitActionBitVal)

函数解释:对某一位进行写入操作

函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚;BitVal:写入高电平或者低电平(Bit_RESET:写入低电平 Bit_SET:写入高电平)

8. voidGPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)

函数解释:对gpio端口进行写入操作,适用于对统一端口的多个管脚的写入

函数参数说明:GPIOx:gpio的分组/gpio端口; BitVal:写入高电平或者低电平(Bit_RESET:写入低电平 Bit_SET:写入高电平)

9. voidGPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

函数解释:翻转指定的gpio口,也就是说,如果当前的io是低电平,则变成高电平,如果当前io是高电平,则变成低电平

函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚。

Gpio复用功能配置函数

1. voidGPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource,uint8_t GPIO_AF)

函数解释:改变指定管脚的映射关系。即配置指定管脚的复用功能。

函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_PinSource:具体要配置成复用功能的管脚(如GPIO_Pin_0 GPIO_Pin_1这样的宏定义);GPIO_AF:选择该管脚要使用的复用功能。

代码示例:

示例一:把gpioa6配置成输出管脚,并配置成高电平

GPIO_InitTypeDefGPIO_InitStruct;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);

GPIO_InitStruct.GPIO_Pin= GPIO_Pin_6;

GPIO_InitStruct.GPIO_Mode= GPIO_Mode_OUT;

GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_UP;

GPIO_Init(GPIOA,&GPIO_InitStruct);

GPIO_SetBits(GPIOA,GPIO_Pin_6);

示例二:把gpioe4配置成输入

GPIO_InitTypeDefGPIO_InitStruct;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);

GPIO_InitStruct.GPIO_Pin= GPIO_Pin_4;

GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IN;

GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_UP;

GPIO_Init(GPIOE,&GPIO_InitStruct);

示例三:配置复用功能 PA9 PA10 配置成串口1的收发接口

GPIO_InitTypeDefGPIO_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能GPIOA时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟

//串口1对应引脚复用映射

GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//GPIOA9复用为USART1

GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//GPIOA10复用为USART1

//USART1端口配置

GPIO_InitStructure.GPIO_Pin= GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10 GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF;//复用功能

GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; //速度50MHz

GPIO_InitStructure.GPIO_OType= GPIO_OType_PP; //推挽复用输出

GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_UP; //上拉

GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化PA9,PA10

STM32固件库的学习(重要,要常看)

1. stm32的编程中,在stdperiph_drive中添加的misc.c文件是干什么用的啊? 因为STM32 V3.5版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了misc.c中,实际上是代替原来的stm32f10x_nvic.c。 2. STM32F10XXX V 3.5标准外设库文件夹描述 标准外设库的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver,CMSIS 是独立于供应商的Cortex-M处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M上操作系统的移植难度,并减少了新入门的微控制器开发者的学习曲线和新产品的上市时间。 STM32F10x_StdPeriph_Driver则包括了分别对应包括了所有外设对应驱动函数,这些驱动函数均使用C语言编写,并提供了统一的易于调用的函数接口,供开发者使用。Project 文件夹中则包括了ST官方的所有例程和基于不同编译器的项目模板,这些例程是学习和使用STM32的重要参考。Utilities包含了相关评估板的示例程序和驱动函数,供使用官方评估板的开发者使用,很多驱动函数同样可以作为学习的重要参考。 3.文件功能说明

4.CMSIS文件夹结构

在实际开发过程中,根据应用程序的需要,可以采取2种方法使用标准外设库

(StdPeriph_Lib): (1)使用外设驱动:这时应用程序开发基于外设驱动的API(应用编程接口)。用户只需要配置文件”stm32f10x_conf.h”,并使用相应的文件”stm32f10x_ppp.h/.c”即可。 (2) 不使用外设驱动:这时应用程序开发基于外设的寄存器结构和位定义文件。 5. STM32F10XXX标准外设库的使用 标准外设库中包含了众多的变量定义和功能函数,如果不能了解他们的命名规范和使用规律将会给编程带来很大的麻烦,本节将主要叙述标准外设库中的相关规范,通过这些规范的学习可以更加灵活的使用固件库,同时也将极大增强程序的规范性和易读性,同时标准外设库中的这种规范也值得我们在进行其他相关的开发时使用和借鉴。 a.缩写定义 标准外设库中的主要外设均采用了缩写的形式,通过这些缩写可以很容易的辨认对应的外设。

stm32入门C语言详解

阅读flash:芯片内部存储器flash操作函数我的理解——对芯片内部flash进行操作的函数,包括读取,状态,擦除,写入等等,可以允许程序去操作flash上的数据。 基础应用1,FLASH时序延迟几个周期,等待总线同步操作。推荐按照单片机系统运行频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2。所有程序中必须的 用法:FLASH_SetLatency(FLASH_Latency_2); 位置:RCC初始化子函数里面,时钟起振之后。 基础应用2,开启FLASH预读缓冲功能,加速FLASH的读取。所有程序中必须的 用法:FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); 位置:RCC初始化子函数里面,时钟起振之后。 3、阅读lib:调试所有外设初始化的函数。 我的理解——不理解,也不需要理解。只要知道所有外设在调试的时候,EWRAM需要从这个函数里面获得调试所需信息的地址或者指针之类的信息。 基础应用1,只有一个函数debug。所有程序中必须的。 用法:#ifdef DEBUG debug(); #endif 位置:main函数开头,声明变量之后。 4、阅读nvic:系统中断管理。 我的理解——管理系统内部的中断,负责打开和关闭中断。 基础应用1,中断的初始化函数,包括设置中断向量表位置,和开启所需的中断两部分。所有程序中必须的。 用法:void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; //中断管理恢复默认参数 #ifdef VECT_TAB_RAM //如果C/C++ Compiler\Preprocessor\Defined symbols中的定义了 VECT_TAB_RAM(见程序库更改内容的表格) NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //则在RAM调试 #else //如果没有定义VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);//则在Flash里调试 #endif //结束判断语句 //以下为中断的开启过程,不是所有程序必须的。 //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC优先级分组,方式。 //注:一共16个优先级,分为抢占式和响应式。两种优先级所占的数量由此代码确定, NVIC_PriorityGroup_x可以是0、1、2、3、4,分别代表抢占优先级有1、2、4、8、16个和响应优先级有16、8、4、2、1个。规定两种优先级的数量后,所有的中断级别必须在其中选择,抢占级别高的会打断其他中断优先执行,而响应级别高的会在其他中断执行完优先执行。 //NVIC_InitStructure.NVIC_IRQChannel = 中断通道名; //开中断,中断名称见函数库 //NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级 //NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //启动此通道的中断 //NVIC_Init(&NVIC_InitStructure); 中断初始化

stm32库函数解释

部分库函数简介 一、通用输入/输出(GPIO)--------------------------------------------------------------------------------------------3 二、外部中断/事件控制器(EXTI)-----------------------------------------------------------------------------------7 三、通用定时器(TIM)-------------------------------------------------------------------------------------------------9四:ADC寄存器------------------------------------------------------------------------25 五:备份寄存器(BKP)-------------------------------------------------------------------------------------------------33 六、DMA控制器(DMA)---------------------------------------------------------------37 七、复位和时钟设置(RCC)------------------------------------------------------------------------------------------41 八、嵌套向量中断控制器(NVIC)-----------------------------------------------------------------------------------49

STM32固件库详解42324

STM32固件库详解 最近考试较多,教材编写暂停了一下,之前写了很多,只是每一章都感觉不是特别完整,最近把其中的部分内容贴出来一下,欢迎指正。本文内容基于我对固件库的理解,按照便于理解的顺序进行整理介绍,部分参考了固件库的说明,但是也基本上重新表述并按照我理解的顺序进行重新编写。我的目的很简单,很多人写教程只是告诉你怎么做,不会告诉你为什么这么做,我就尽量吧前因后果都说清楚,这是我的出发点,水平所限,难免有很大的局限性,具体不足欢迎指正。基于标准外设库的软件开发 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。

ST公司2007年10月发布了版本的固件库,MDK 之前的版本均支持该库。2008年6月发布了版的固件库,从2008年9月推出的MDK 版本至今均使用版本的固件库。以后的版本相对之前的版本改动较大,本书使用目前较新的版本。 使用标准外设库开发的优势 简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC 等等的所有标准外设。对应的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。 STM32F10XXX标准外设库结构与文件描述 1. 标准外设库的文件结构 在上一小节中已经介绍了使用标准外设库的开发的优势,因此对标准外设库的熟悉程度直接影响到程序的编写,下面让我们来认识一下STM32F10XXX的标准外设库。STM32F10XXX的标准外设库经历众多的更新目前已经更新到最新的版本,开发环境中自带的标准外设库为版本,本书中以比较稳定而且较新的版本为基础介绍标准外设库的结构。

献给新手:解析STM32的库函数

意法半导体在推出STM32微控制器之初,也同时提供了一套完整细致的固件开发包,里面包含了在STM32开发过程中所涉及到的所有底层操作。通过在程序开发中引入这样的固件开发包,可以使开发人员从复杂冗余的底层寄存器操作中解放出来,将精力专注应用程序的开发上,这便是ST推出这样一个开发包的初衷。 但这对于许多从51/AVR这类单片机的开发转到STM32平台的开发人员来说,势必有一个不适应的过程。因为程序开发不再是从寄存器层次起始,而要首先去熟悉STM32所提供的固件库。那是否一定要使用固件库呢?当然不是。但STM32微控制器的寄存器规模可不是常见的8位单片机可以比拟,若自己细细琢磨各个寄存器的意义,必然会消耗相当的时间,并且对于程序后续的维护,升级来说也会增加资源的消耗。对于当前“时间就是金钱”的行业竞争环境,无疑使用库函数进行STM32的产品开发是更好的选择。本文将通过一个简单的例子对STM32的库函数做一个简单的剖析。 以最常用的GPIO设备的初始化函数为例,如下程序段一: GPIO_InitTypeDef GPIO_InitStructure; 1 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; 2 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 4 GPIO_Init(GPIOA , &GPIO_InitStructure 5 这是一个在STM32的程序开发中经常使用到的GPIO初始化程序段,其功能是将GPIOA.4口初始化为推挽输出状态,并最大翻转速率为50MHz。下面逐一分解: 首先是1,该语句显然定义了一个GPIO_InitTypeDef类型的变量,名为GPIO_InitStructure,则找出GPIO_InitTypeDef的原型位于“stm32f10x_gpio.h” 文件,原型如下: typedef struct { u16 GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; }GPIO_InitTypeDef; 由此可知GPIO_InitTypeDef是一个结构体类型同义字,其功能是定义一个结构体,该结构体有三个成员分别是u16类型的GPIO_Pin、 GPIOSpeed_TypeDef 类型的GPIO_Speed和GPIOMode_TypeDef 类型的 GPIO_Mode。继续探查GPIOSpeed_TypeDef和GPIOMode_TypeDef类型,在“stm32f10x_gpio.h”文件中找到对GPIOSpeed_TypeDef的定义: typedef enum { GPIO_Speed_10MHz = 1,

stm32启动文件详解

STM32启动文件详解 一、启动文件的作用 1.初始化堆栈指针SP; 2.初始化程序计数器指针PC; 3.设置堆、栈的大小; 4.设置异常向量表的入口地址; 5.配置外部SRAM作为数据存储器(这个由用户配置,一般的开发板可没有外部SRAM); 6.设置C库的分支入口__main(最终用来调用main函数); 7.在版的启动文件还调用了在文件中的SystemIni()函数配置系统时钟。

二、汇编指令

三、启动代码 ----- 栈 Stack_Size EQU 0x00000400 ; 栈的大小 AREA STACK, NOINIT, READWRITE,ALIGN=3 Stack_Mem SPACE Stack_Size ; 分配栈空间 __initial_sp ; 栈的结束地址(栈顶地址) 分配名为STACK,不初始化,可读可写,8(2^3)字节对齐的1KB空间。 栈:局部变量,函数形参等。栈的大小不能超过内部SRAM大小。 AREA:汇编一个新的代码段或者数据段。STACK段名,任意命名;NOINIT表示不初始化;READWRITE可读可写;ALIGN=3(2^3= 8字节对齐)。 __initial_sp紧挨了SPACE放置,表示栈的结束地址,栈是从高往低生长,结束地址就是栈顶地址。

----- 堆 Heap_Size EQU 0x00000200 ; 堆的大小(512Bytes) AREA HEAP, NOINIT, READWRITE,ALIGN=3 __heap_base ; 堆的起始地址 Heap_Mem SPACE Heap_Size ; 分配堆空间 __heap_limit ; 堆的结束地址 分配名为HEAP,不初始化,可读可写,8(2^3)字节对齐的512字节空间。__heap_base堆的起始地址,__heap_limit堆的结束地址。堆由低向高生长。动态分配内存用到堆。 PRESERVE8 -- 指定当前文件的堆/栈按照8 字节对齐。 THUMB-- 表示后面指令兼容THUMB 指令。THUBM 是ARM 以前的指令集,16bit;现在Cortex-M 系列的都使用THUMB-2 指令集,THUMB-2 是32 位的,兼容16 位和32 位的指令,是THUMB 的超级。 3.向量表 AREA RESET, DATA, READONLY EXPORT __Vectors E XPORT __Vectors_End E XPORT __Vectors_Size 定义一个名为RESET,可读的数据段。并声明__Vectors、__Vectors_End 和__Vectors_Size 这三个标号可被外部的文件使用。 __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler

STM32库函数功能详解

STM32库函数简介 一、通用输入/输出(GPIO)--------------------------------------------------------------------------------------------3 二、外部中断/事件控制器(EXTI)-----------------------------------------------------------------------------------7 三、通用定时器(TIM)-------------------------------------------------------------------------------------------------9 四:ADC寄存器------------------------------------------------------------------------25 五:备份寄存器(BKP)-------------------------------------------------------------------------------------------------33 六、DMA控制器(DMA)---------------------------------------------------------------37 七、复位和时钟设置(RCC)------------------------------------------------------------------------------------------41 八、嵌套向量中断控制器(NVIC)-----------------------------------------------------------------------------------49

STM32固件库详解

STM32固件库详解基于标准外设库的软件开发 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。 ST公司2007年10月发布了版本的固件库,MDK 之前的版本均支持该库。2008年6月发布了版的固件库,从2008年9月推出的MDK 版本至今均使用版本的固件库。以后的版本相对之前的版本改动较大,本书使用目前较新的版本。 使用标准外设库开发的优势 简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC等等的所有标准外设。对应的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。 STM32F10XXX标准外设库结构与文件描述 1. 标准外设库的文件结构 在上一小节中已经介绍了使用标准外设库的开发的优势,因此对标准外设库的熟悉程度直接影响到程序的编写,下面让我们来认识一下STM32F10XXX的标准外设库。STM32F10XXX的标准外设库经历众多的更新目前已经更新到最新的版本,开发环境中自带的标准外设库为版本,本书中以比较稳定而且较新的版本为基础介绍标准外设库的结构。

stm32DAC函数库详解

DAC固件库函数 DAC固件库函数 函数名描述 void DAC_DeInit(void) DAC外围寄存器默认复位值。VoidDAC_Init(uint32_tDAC_Channel,DAC_InitTypeDef* DAC_InitStruct) 根据外围初始化指定的DAC void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct) 把DAC_StructInit 中的每一个参 数按缺省值填入 voidDAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState) 使能或使能指定的DAC通道。 void DAC_ITConfig(uint32_t DAC_Channel, uint32_t DAC_IT, FunctionalState NewState) 使能或者失能指定的DAC 的中断 voidDAC_DMACmd(uint32_tDAC_Channel,FunctionalState NewState) 使能或者失能指定的DAC通道DMA请求。 void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState) 使能或者失能用选定的DAC通道软件触发 voidDAC_DualSoftwareTriggerCmd(FunctionalState NewState) 使能或者使能双软件触发命令 void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState) 使能或者使能选定的DAC通道波的产生。 void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data) 设置通道1 的数据 void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data) 设置通道2 的数据 void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1) 设置双通道的数据 uint16_tDAC_GetDataOutputValue(uint32_t DAC_Channel) 返回选定DAC通道最后的数据输出值。 FlagStatus DAC_GetFlagStatus(uint32_t DAC_Channel, uint32_t DAC_FLAG) 检查指定的DAC标志位设置与否。 void DAC_ClearFlag(uint32_t DAC_Channel, uint32_t DAC_FLAG) 清除指定的DAC标志位。 ITStatus DAC_GetITStatus(uint32_t DAC_Channel, uint32_t DAC_IT) 检查指定的DAC 中断是否发生 void DAC_ClearITPendingBit(uint32_t DAC_Channel, uint32_t DAC_IT) 清除DACx 的中断待处理位

STM32库函数说明及示例

STM32库函数说明及示例(版本V1.4.0) ----第一篇:GPIO库 相关术语说明: gpio:通用输入输出接口 gpio管脚:一个io管脚,这个管脚可以有多个配置。在库函数中用GPIO_Pin_1这样的宏定义表示 gpio端口(gpio分组):一组gpio管脚的信息。在库函数中用宏定义GPIOA GPIOB等表示 1 gpio库说明 库文件名:stm32f4xx_gpio.c 文档提示翻译: 如何使用这个驱动 (1)使用RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE)函数使能GPIO的AHB总线时钟。 (2)使用GPIO_Init()函数对每个引脚进行四种可能的配置 《1》输入状态:Floating(浮空), Pull-up(上拉), Pull-down(下拉) 《2》输出状态:Push-Pull (上拉下拉)(Pull-up(上拉), Pull-down(下拉)or no Pull(不上拉也不下拉)),Open Drain(开漏)(Pull-up(上拉), Pull-down(下拉)or no Pull(不上拉也不下拉)),在输出模式,速度配置成2MHZ,25MHZ,50MHZ和100MHZ. 《3》第二功能:上拉下拉和开漏 《4》模拟:当一个管脚被用作ADC通道或者DAC输出的时候,需要配置成此模式(3)外设的第二功能: 《1》在ADC和DAC模式,使用GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AN 把需要的管脚配置成模拟模式 《2》对于其它的管脚(定时器,串口等): l 使用GPIO_PinAFConfig()函数把管脚和需要的第二功能进行连接 l 使用GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF把需要的管脚配置成第二功能模式l 通过成员变量GPIO_PuPd, GPIO_OType and GPIO_Speed选择类型,上拉下拉和输出速度 l 调用函数GPIO_Init() (4)在输入模式,使用函数GPIO_ReadInputDataBit()得到配置好管脚的电平 (5)在输出模式,使用函数GPIO_SetBits()/GPIO_ResetBits()设置配置好IO的高低电平 (6)在复位过程和刚刚复位后,第二功能是无效的,GPIO被配置成了输入浮空模式(JTAG管脚除外) (7)当LSE振荡器关闭的时候,LSE振荡器管脚OSC32_IN和OSC32_OUT可以作为通过IO来使用(分别用PC14和PC15表示)。LSE的优先级高于GPIO函数 (8)当HSE振荡器关闭的时候,HSE振荡器管脚OSC_IN和OSC_OUT可以作为通用IO(PH0,PH1)来使用。HSE的优先级高于GPIO函数。 2 具体函数说明

STM32电机控制【重量级库函数】解析

STM32电机控制重量级库函数解析 Foc_svpwm.c 归属组:arithmetic 描述:PWM配置和SVPWM计算 函数: 函数功能描述输入参数输出 参数 调用函数在何处被调用 SvpwmLMotorConfig(void) 对左电机用到外设进行配置无无无foc_port.c/ FOCPortPeripheralConfig() SvpwmRMotorConfig(void) 对右电机用到外设进行配置无无无foc_port.c/ FOCPortPeripheralConfig() SvpwmTimerSynchConfig(void) 双电机pwm控制时钟源 Timer1、8同步,配置TIM1、 TIM8、TIM5进行时钟同步无无无foc_port.c/ FOCPortInit() SvpwmCalcDutyCycles(STATOR_VOLTAGE,u8) 又Valpha、Vbeta输入生成 SVPWM波形typedef struct //Valpha Vbeta { s16 V alfa; s16 Vbeta; }STATOR_VOLTAGE; U8 mc_ch //电机通道,左电机or 右电机 无无foc_encoder.c/ FOCEncoderStartUp(u8 mc_ch) foc_port.c/ FOCPortArithmeticModel(u8 mc_ch) Foc_port.c 归属组:arithmetic 描述:FOC配置和算法接口模块 函数: 函数功能描述输入参数输出参数调用函数在何处被调用 FOCPortPeripheralConfig(void) 对电机用到外设进行配置(定 时器、ADC) 无无SvpwmLMotorConfig() SvpwmRMotorConfig() InjectADCConfig() InjectADCRegularDMAConfig() Foc_port.c/ FOCPortInit() FOCPortInit(void) 电机控制配置,外设和变量的 初始化无无FOCCurrentPIDInit() FOCPortPeripheralConfig() InjectADCReadEn() SvpwmTimerSynchConfig() InjectADCPhaseCaliPend() App_main.c/ App_TaskStart()

STM32固件库文件结构及作用详解

STM32标准外设固件库文件结构及用途 文件夹树图及文件作用详述 stm32f10x_stdperiph_lib_V3.5.0--------------ST 公司针对STM32提供的函数接口 ├─Release_Notes.html -------------------------官方网页资源 ├─stm32f10x_stdperiph_lib_um.chm -------------库的帮助文档 ├─stm32f10x_stdperiph_lib_um.chw ├─htmresc -----------------------------------CMSIS 内核和ST 公司Logo │ ├─CMSIS_Logo_Final.jpg │ └─logo.bmp ├─Libraries ----------------------------------固件库 │ ├─CMSIS -Cortex Microcontroller Software Interface Standard(Cortex 内核软件接口标准) │ │ ├─CMSIS debug support.htm ------------官方网页资源 │ │ ├─CMSIS_changes.htm ------------------官方网页资源 │ │ ├─License.doc │ │ ├─CM3 固件库文件夹树形图

│ │ │ ├─CoreSupport----为采用Cortex-M3核设计SOC的芯片商设计的芯片外设提供一个进入M3内核的接口 │ │ │ │ ├─core_cm3.c │ │ │ │ └─core_cm3.h │ │ │ └─DeviceSupport │ │ │ └─ST │ │ │ └─STM32F10x │ │ │ ├─Release_Notes.html │ │ │ ├─stm32f10x.h --------------------定义寄存器的地址及使用的结构体封装 │ │ │ ├─system_stm32f10x.c--------------设备外设访问层,主要配置时钟频率 │ │ │ ├─system_stm32f10x.h--------------配置时钟频率相应的头文件 │ │ │ └─startup--------由汇编编写的系统启动文件,不同的文件对应不同的芯片型号 │ │ │ ├─arm-------ARM编译器启动文件 │ │ │ │ ├─startup_stm32f10x_cl.s------cl:互联型产品,stm32f105/107系列 │ │ │ │ ├─startup_stm32f10x_hd.s------hd:高密度产品,FLASH大于128 │ │ │ │ ├─startup_stm32f10x_hd_vl.s---vl:超值型产品,stm32f100系列 │ │ │ │ ├─startup_stm32f10x_ld.s------ld:低密度产品,FLASH小于64K │ │ │ │ ├─startup_stm32f10x_ld_vl.s │ │ │ │ ├─startup_stm32f10x_md.s------md:中等密度产品,FLASH=64 or 128 │ │ │ │ ├─startup_stm32f10x_md_vl.s │ │ │ │ └─startup_stm32f10x_xl.s----xl:超高密度(容量)产品,stm32f101/103系列│ │ │ ├─gcc_ride7………………GCC编译器启动文件 │ │ │ ├─iar………………………………IAR编译器启动文件 │ │ │ └─TrueSTUDIO……………TrueSTUDIO编译器启动文件 │ │ └─Documentation │ │ └─CMSIS_Core.htm --------------CMSIS_Core网页资源 │ └─STM32F10x_StdPeriph_Driver-----------CMSIS的设备外设函数,由stm32f10x_ppp.c或 stm32f10x_ppp.h ││文件组成,PPP表示外设名称。每个外设驱动库函数对应一个头文件| | 和源文件. │ ├─Release_Notes.html │ ├─inc(include缩写)--------------各个外设的头文件 │ └─src(source缩写)--------------每个设备外设的驱动程序,这些外设是芯片制造商在Cortex-M3核外加的│ ├─misc.c--------------提供了外设对内核中的NVIC(Nested Vectored Interrupt Controller),| |嵌套向量中断控制器的访问函数 │ ├─stm32f10x_adc.c---------------模数转换器 │ ├─stm32f10x_bkp.c---------------备份寄存器 │ ├─stm32f10x_can.c---------------控制器局域网模块 │ ├─stm32f10x_cec.c---------------CEC网络模块 │ ├─stm32f10x_crc.c---------------CRC计算单元 │ ├─stm32f10x_dac.c---------------数模转换器 │ ├─stm32f10x_dbgmcu.c------------调试支持 │ ├─stm32f10x_dma.c---------------直接内存存取控制器 │ ├─stm32f10x_exti.c--------------外部中断事件控制器 │ ├─stm32f10x_flash.c-------------闪存存储器 │ ├─stm32f10x_fsmc.c--------------灵活的静态存储器控制器 │ ├─stm32f10x_gpio.c--------------通用输入输出 │ ├─stm32f10x_i2c.c---------------I2C接口 │ ├─stm32f10x_iwdg.c--------------独立看门狗 │ ├─stm32f10x_pwr.c---------------电源/功耗控制 │ ├─stm32f10x_rcc.c---------------复位与时钟控制器 │ ├─stm32f10x_rtc.c---------------实时时钟 │ ├─stm32f10x_sdio.c--------------SDIO接口 │ ├─stm32f10x_spi.c---------------串行外设接口 │ ├─stm32f10x_tim.c---------------定时器 │ ├─stm32f10x_usart.c-------------通用同步/异步收发器 │ └─stm32f10x_wwdg.c--------------窗口看门狗 ├─Project │ ├─STM32F10x_StdPeriph_Examples------------------标准外设库驱动的完整例程 │ │ ├─Library_Examples.html │ │ ├─Release_Notes.html │ │ ├─ADC---------------------------------------模数转换器 │ │ │ ├─3ADCs_DMA │ │ │ ├─ADC1_DMA │ │ │ ├─AnalogWatchdog │ │ │ ├─ExtLinesTrigger │ │ │ ├─RegSimul_DualMode │ │ │ └─TIMTrigger_AutoInjection │ │ ├─BKP---------------------------------------备份寄存器 │ │ │ ├─Backup_Data │ │ │ └─Tamper │ │ ├─CAN---------------------------------------控制器局域网模块 │ │ │ ├─DualCAN

STM32 V3.5固件库函数调用说明(中文版)

目录 目录 (1) 1.变量定义 (4) 2.GPIO相关函数 (5) 2.1.函数GPIO_Init (5) 2.2.函数GPIO_SetBits (6) 2.3.函数GPIO_ReadInputDataBit (7) 2.4.函数GPIO_ReadOutputDataBit (7) 2.5.函数GPIO_PinRemapConfig (8) 2.6.函数GPIO_Write (9) 2.7.函数GPIO_ReadInputData (10) 3.RCC相关函数 (10) 3.1.函数RCC_APB2PeriphClockCmd (10) 3.2.函数RCC_APB1PeriphClockCmd (11) 3.3.函数RCC_AHBPeriphClockCmd (12) 3.4.函数RCC_ADCCLKConfig (12) 4.SysTick函数——SysTick_Config (12) 5.NVIC相关函数 (14) 5.1.函数NVIC_Init (14) 5.2.函数NVIC_PriorityGroupConfig (17) 5.3.函数NVIC_SetPriority (17) 6.EXTI相关函数 (17) 6.1.函数GPIO_EXTILineConfig (17) 6.2.函数EXIT_Init (18) 6.3.函数EXTI_GetITStatus (19) 6.4.函数EXTI_ClearITPendingBit (19) https://www.doczj.com/doc/d817555895.html,ART相关函数 (20)

7.2.函数USART_Cmd (21) 7.3.函数USART_SendData (21) 7.4.函数USART_ReceiveData (22) 7.5.函数USART_GetFlagStatus (22) 8.6.函数USART_ITConfig (23) 8.7.函数USART_GetITStatus (23) 8.8.函数USART_ClearFlag (24) 8.9.函数USART_ClearITPendingBit (24) 8.TIM相关函数 (24) 8.1.函数TIM_TimeBaseInit (24) 8.2.函数TIM_DeInit (26) 8.3.函数TIM_ITConfig (26) 8.4.函数TIM_Cmd (27) 8.5.函数TIM_GetITStatus (28) 8.6.函数TIM_ClearITPendingBit (28) 8.7.函数TIM_ARRPreloadConfig (29) 8.8.函数TIM_OCxInit (29) 8.9.函数TIM_OCxPreloadConfig (30) 9.I2C相关函数 (31) 9.1.函数I2C_Init (31) 9.2.函数I2C_CheckEvent (32) 9.3.函数I2C_GetFlagStatus (33) 9.4.函数I2C_GenerateSTART (34) 9.5.函数I2C_ SendData (35) 9.6.函数I2C_ ReceiveData (35) 9.7.函数I2C_ Send7bitAddress (35) 9.8.函数I2C_ GenerateSTOP (36)

STM32固件库详解

STM32固件库详解 emouse原创文章,转载请注明出处https://www.doczj.com/doc/d817555895.html,/emouse/ 最新加入固件库以及开发环境使用入门视频教程,同时提供例程模板,个人录制,欢迎指正。下载地址:https://www.doczj.com/doc/d817555895.html,/file/e78l0xlo# emouse-STM32系列视频教程.rar 最近考试较多,教材编写暂停了一下,之前写了很多,只是每一章都感觉不是特别完整,最近把其中的部分内容贴出来一下,欢迎指正。本文内容基于我对固件库的理解,按照便于理解的顺序进行整理介绍,部分参考了固件库的说明,但是也基本上重新表述并按照我理解的顺序进行重新编写。我的目的很简单,很多人写教程只是告诉你怎么做,不会告诉你为什么这么做,我就尽量吧前因后果都说清楚,这是我的出发点,水平所限,难免有很大的局限性,具体不足欢迎指正。 1.1 基于标准外设库的软件开发 1.1.1 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。 ST公司2007年10月发布了V1.0版本的固件库,MDK ARM3.22之前的版本均支持该库。2008年6月发布了V2.0版的固件库,从2008年9月推出的MDK ARM3.23版本至今均使用V2.0版本的固件库。V3.0以后的版本相对之前的版本改动较大,本书使用目前较新的V3.4版本。 1.1.2 使用标准外设库开发的优势 简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC等等的所有标准外设。对应的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。 1.1.3 STM32F10XXX标准外设库结构与文件描述 1. 标准外设库的文件结构 在上一小节中已经介绍了使用标准外设库的开发的优势,因此对标准外设库的熟悉程度直接影响到程序的编写,下面让我们来认识一下STM32F10XXX的标准外设库。STM32F10XXX的标准外设库经历众多的更新目前已经更新到最新的3.5

相关主题
相关文档 最新文档