单片机STM32开发中常用库函数分析
- 格式:docx
- 大小:37.13 KB
- 文档页数:3
STM32库函数功能详解STM32是一款广泛应用于嵌入式系统中的微控制器系列,由意法半导体(STMicroelectronics)开发。
它具有高性能、低功耗和丰富的外设功能,广泛应用于各种应用领域。
为了方便开发者进行快速开发和简化编程流程,STM32提供了一系列库函数,本文将对其功能进行详细解析。
1.GPIO库函数:GPIO库函数用于配置STM32的通用输入输出口(GPIO)功能,包括输入、输出模式的配置和读写操作。
通过GPIO库函数,开发者可以方便地读取外部输入信号、控制外部设备的输出。
例如,使用GPIO库函数可以简单地配置一个引脚为输入模式,并读取其电平状态,或者配置一个引脚为输出模式,并设置其输出电平。
2.EXTI库函数:EXTI库函数用于配置STM32的外部中断(EXTI)功能,可以实现对外部事件的中断响应功能。
通过EXTI库函数,开发者可以方便地配置外部中断的触发方式和优先级,以及处理中断事件。
例如,使用EXTI库函数可以配置一个引脚为上升沿触发模式,并在引脚触发中断时执行相应的中断服务函数。
3.RCC库函数:RCC库函数用于配置和控制STM32的时钟系统(RCC),包括各个外设模块和系统时钟的配置。
通过RCC库函数,开发者可以方便地配置STM32的时钟源、时钟分频和时钟使能。
例如,使用RCC库函数可以配置系统时钟为指定频率,以及使能和配置外设时钟。
4.NVIC库函数:NVIC库函数用于配置和控制STM32的中断控制器(NVIC)功能,包括中断向量表和中断优先级的配置。
通过NVIC库函数,开发者可以方便地配置中断向量表和中断优先级,以及控制中断的使能和屏蔽。
例如,使用NVIC库函数可以配置一个外部中断的优先级和使能状态,以及控制中断的屏蔽和释放。
5.ADC库函数:ADC库函数用于配置和控制STM32的模数转换器(ADC)功能,可以实现模拟信号的数字化转换。
通过ADC库函数,开发者可以方便地配置ADC的转换通道、采样速率和转换模式。
STM32单片机库函数结构体详解在学习STM32F103的过程中,经常用到库函数,尤其遇到如下的结构体定义语句,如何理解。
本文将解释清楚这类结构体的定义。
typedef struct{uint32_t x;uint16_t y;uint8_t z;} Sname;对于以上程序,包含三部分,如下图1所示,包括3部分,分别是typedef、struct{... }和Sname。
图1(1)typedef是C语言的关键字,其用途是为一种数据类型定义一个新名字,主要是将较复杂的数据类型定义为易记且意义明确的新名字。
通常,我们定义一个变量,如定义一个无符号的整形变量x,则c语言中表示如下:unsigned int x; 数据类型unsigned int比较复杂,因此可以使用typedef用一个简单的名字重新定义。
如:typedef unsigned int uint32_t; 即用uint32_t代表unsigned int。
则unsigned int x; 可以表示为uint32_t x;uint16_t x和uint8_t x也同样是这样的定义。
如下所示。
typedef unsigned short uint16_t;typedef unsigned char uint8_t;(2)struct也是C语言的关键字,其用途是将具有不同数据类型的变量打包管理,作为结构体。
参照上文(1)中变量定义,结构体变量定义为struct Sname;Sname是变量名。
为了增加不同数据类型的结构体成员,将成员增加在大括号{ }内,{ }内的内容是结构体的成员变量。
如下所示。
struct{uint32_t x;uint32_t y;uint8_t z;} Sname;所以,当有不同数据类型的数据需要打包处理,则将其作为结构体数据处理。
如处理一个振动传感器的数据,该传感器具有x、y、z三个方向的振动数据,则可以将其作为一个结构体处理。
stm32标准库函数手册STM32标准库函数是一种由ST公司推出的一套用于STM32微控制器编程的开发工具,它能够帮助开发者快速地进行芯片的开发、调试和测试。
本文将对STM32标准库函数进行详细的介绍,并提供中文手册,帮助开发者更好地掌握这个工具。
一、STM32标准库函数概述STM32标准库函数是一套由ST公司提供的软件库,包括了一系列用于STM32微控制器的常用功能函数,例如GPIO、USART、SPI、I2C等,这些函数可以用于快速实现各种应用。
同时,ST公司也提供了一些示例代码,可以方便开发者进行学习和参考。
STM32标准库函数可以与各种不同的开发环境集成,例如Keil、IAR、STM32Cube等,方便开发者进行开发。
在使用STM32标准库函数时,可以通过库函数的方式来调用硬件资源,比如设置GPIO口的状态、使用USART进行通信、配置外部中断等。
1. 系统初始化函数:这些函数包括了芯片系统时钟的初始化、中断优先级的设置、时钟输出的配置等,必须在主函数前进行调用。
2. GPIO和外部中断函数:这些函数用于对GPIO口状态的配置和读取,以及对外部中断的控制。
3. USART函数:这些函数用于对串口进行配置和读写操作。
8. DAC函数:这些函数用于对模拟量进行输出。
以下是STM32标准库函数的中文手册,包含了常用函数的介绍和使用方法。
1. 系统初始化函数1.1. RCC配置函数函数原型:void RCC_Configuration(void)函数功能:配置STM32的时钟源和时钟分频系数。
函数说明:在函数内部,首先对PLL时钟源进行配置,然后根据系统时钟的需要选择PLL时钟的分频系数,然后对AHB、APB1、APB2的分频系数进行配置。
最后,开启相应时钟使能位。
函数功能:对STM32的中断向量表进行重定位,并设置各个中断的优先级。
函数说明:中断向量表的地址是由SCB_VTOR寄存器来控制的。
一、STM32单片机库函数概述STM32单片机是一款由意法半导体公司提供的系列32位微控制器,具有高性能、低功耗等特点,广泛应用于工业控制、汽车电子、智能家居等领域。
在STM32单片机的开发过程中,库函数是开发者最常使用的工具之一,通过库函数可以方便地调用各种功能模块的接口,提高开发效率、降低开发难度。
本文将重点介绍STM32单片机常用的库函数和关键代码。
二、GPIO库函数1. GPIO初始化在STM32单片机中,GPIO是最常用的功能模块之一,可用于控制外部设备,实现输入输出等功能。
在使用GPIO之前,首先需要初始化GPIO的引脚方向、输入输出模式、上拉下拉等配置。
以下是GPIO初始化函数的关键代码:```void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);```其中,GPIOx代表GPIO的端口号,GPIO_InitStruct包含了GPIO的各项配置参数。
2. GPIO读取状态在实际应用中,经常需要读取GPIO引脚的状态,判断外部设备的输入信号。
以下是GPIO读取状态的关键代码:```uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);```该函数可以读取指定GPIO引脚的状态,返回值为0或1,分别代表引脚的低电平或高电平。
3. GPIO输出控制除了读取外部设备的输入信号外,我们还需要控制GPIO引脚输出高低电平,驱动外部设备。
以下是GPIO输出控制的关键代码:```void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); ```通过GPIO_SetBits和GPIO_ResetBits函数,可以分别将指定GPIO 引脚输出高电平或低电平。
stm32标准库函数说明
STM32标准库函数是为了方便开发者使用STM32微控制器而提供的一系列函数和库。
这些库函数提供了许多常用的功能,如GPIO操作、定时器操作、串口通信、ADC转换等。
以下是一些常见的STM32标准库函数及其说明:
GPIO 初始化函数:用于配置GPIO(General-Purpose Input/Output)的引脚模式(输入、输出、复用等)和参数(输出类型、输出速度、上拉/下拉等)。
定时器初始化函数:用于配置定时器的模式(计数器模式、PWM模式等)和参数(时钟源、自动重载值等)。
串口初始化函数:用于配置串口通信的参数(波特率、数据位、停止位、奇偶校验等)。
ADC 初始化函数:用于配置ADC(Analog-to-Digital Converter)的参数(转换模式、分辨率等)。
中断初始化函数:用于配置中断的优先级和触发方式。
延时函数:用于产生一定的延时。
睡眠函数:用于使微控制器进入低功耗模式,降低功耗。
串口发送和接收函数:用于串口通信的发送和接收数据。
ADC 读取函数:用于读取ADC转换的结果。
GPIO 操作函数:用于控制GPIO引脚的电平高低或读取引脚的电平状态。
STM32库函数汇总1.GPIO初始化函数 第1个参数设置GPIO端⼝,第⼆个为结构体设置模式 GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); 2.读取输⼊电平函数 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 读取某个GPIO输⼊的电平,实际操作IDR寄存器,有返回值 uint8_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); 读取⼀组GPIO输⼊的电平,实际操作IDR寄存,有返回值3.读取输出电平函数 uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 读取某个GPIO输出的电平,实际操作ODR寄存器,有返回值 uint8_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);读取某组GPIO输出的电平,实际操作ODR寄存器,有返回值4.设置输出电平函数 GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 设置⾼电平实际操作,BSRR寄存器 GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 设置低电平,实际操作BRR寄存器5.使能时钟函数 RCC_APB2PeriphColckCmd();6.开启重映射时钟 GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);参数1可以是串⼝,SWJ等很多种类型7.设置中断优先级分组 void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup); 在misc.c⽂件中8.设置抢占优先级和响应优先级 void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);需要设置通道,抢占优先级,响应优先级,使能通道等9.串⼝相关函数 void USART_Init();串⼝初始化:波特率,数据字长,奇偶校验,硬件流控以收发使能 void USART_Cmd(形参1,形参2);使能串⼝,形参1是串⼝位,形参2是ENABLE; void USART_ITConfig(形参1,形参2,形参3);使能中断,形参1是串⼝位,形参2是要开启中断的类型,形参3是ENABLE; void USART_SendData(形参1,形参2);发送数据到串⼝,DR,形参1是串⼝位,形参2是要发送是数据 uint16_t USART_ReceiveData(形参1);接收数据,从DR读取接收到的数据,形参1值是串⼝位 FlagStatus USART_GetFlagStatus();获取状态标志位 void USART_ClearFlag();清除状态标志位 ITStatus USART_GetITStatus(形参1,形参2)获取中断标志位;参数1值是串⼝位,参数2是要获取的状态 void USART_ClearITPendingBit();清除中断状态标志位 USART1_IRQHandler();USART中断函数,产⽣中断后进⼊,函数在核⼼⽂件中;10.外部中断函数 GPIO_EXTILineConfig(参数1,参数2);设置中断线的映射关系,参数1与参数2为要中断的IO EXTI_Init();初始化外部中断线,触发⽅式, EXTI_GetITStatus();判断中断状态是否发⽣ EXTI_ClearlTPendingBit();清除中断线上的标志位11.独⽴看门狗实验 IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);形参后⾯跟ENABLE,取消写保护 IWDG_SetPrescaler(uint8_t IWDG_Prescaler);设置预分频系数 IWDG_SetReload(uint16_t Reload);设置重装载值 IWDG_Enable();使能看门狗 IWDG_ReloadCounter();喂狗12.窗⼝看门狗 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);使能窗⼝看门狗 WWDG_SetPrescaler();设置预分频系数 WWDG_SetWindowValue();设置上窗⼝值 WWDG_EnableIT(); 开启窗⼝看门狗中断 NVIC_Init();中断初始化 WWDG_Enable();使能看门狗,设置初始计数器值 WWDG_SetCounter();喂狗 设置计数器值 WWDG_IRQHandler();编写中断服务函数13.通⽤定时器 TIM_TimeBaseInit(TIM3, &TIM_Timesture); 初始化通⽤定时器 TIM_GetITStatus(TIM3,TIM_IT_Update); 获取定时器标志位发⽣中断后标志位置1 SET TIM_ClearITPendingBit(TIM3,TIM_IT_Update);清除定时器标志位 TIM_ITConfig(TIM3, TIM_IT_Update,ENABLE);开启定时器中断 TIM_Cmd(TIM3, ENABLE); 使能通⽤定时器。
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表示)。
库函数简介一、通用输入/输出(GPIO)--------------------------------------------------------------------------------------------3二、外部中断/事件控制器(EXTI)-----------------------------------------------------------------------------------7三、通用定时器(TIM)-------------------------------------------------------------------------------------------------9四:ADC寄存器------------------------------------------------------------------------25 五:备份寄存器(BKP)-------------------------------------------------------------------------------------------------33六、DMA控制器(DMA)---------------------------------------------------------------37七、复位和时钟设置(RCC)------------------------------------------------------------------------------------------41八、嵌套向量中断控制器(NVIC)-----------------------------------------------------------------------------------49命名规则在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。
stm32标准库函数说明-回复【首先,什么是stm32标准库函数?】STM32是一系列由ST微电子公司推出的32位单片机的系列名称,它们是非常流行的嵌入式系统开发解决方案。
stm32标准库函数是ST公司提供给开发者的一组函数库,用于简化STM32单片机的开发过程。
这些函数涵盖了各种常见的嵌入式任务,例如GPIO控制、定时器、串口通信、中断处理等。
【接下来,为什么要使用stm32标准库函数?】使用stm32标准库函数有以下几个好处。
首先,简化开发。
使用stm32标准库函数,开发者可以直接调用函数完成一些复杂的操作,而无需关心底层的寄存器操作。
这大大简化了开发过程,提高了开发效率。
其次,可移植性强。
stm32标准库函数提供了一套统一的API,不论使用何种型号的stm32单片机,都可以使用相同的函数进行开发。
这大大提升了代码的可移植性,方便项目的迁移和维护。
第三,充分发挥硬件性能。
stm32标准库函数经过优化,能够充分发挥stm32单片机的硬件性能。
这使得开发者能够更好地利用硬件资源,提高系统的效率和响应速度。
最后,丰富的功能。
stm32标准库函数提供了丰富而全面的功能库,包括但不限于GPIO操作、定时器控制、串口通信、中断处理、电源管理、外设驱动等。
这样一来,开发者可以轻松地完成各种常见的嵌入式任务。
【在介绍stm32标准库函数之前,我们先了解一下stm32单片机的体系结构】stm32单片机的体系结构如下图所示:[图1stm32单片机体系结构]图1 中,stm32单片机由核心处理单元(CPU)、存储器、外设和总线组成。
核心处理单元是stm32单片机的核心,负责执行指令。
在stm32系列中,常见的核心处理单元有ARM Cortex-M0, Cortex-M3, Cortex-M4等。
存储器用于存放程序代码和数据。
通常,存储器被划分为Flash存储器和RAM存储器。
Flash存储器用于存储程序代码,也就是我们常说的固化程序;而RAM存储器用于存放程序的运行数据。
第六章 STM32库函数架构剖析 (1)6.1 STM32库函数到底是什么 (1)6.2 STM32库函数的好处 (2)6.3 千人大项目如何分配工作 (2)6.4 STM32库结构剖析 (3)6.4.1 CMSIS标准 (3)6.4.2 库目录,文件简介 (4)6.4.3 关于core_cm3.c文件 (5)6.4.4 system_stm32f10x.c文件 (6)6.4.5 stm32f10x.c文件 (7)6.4.6 启动文件 (7)6.4.7 STM32F10x_StdPeriph_Driver文件夹 (9)6.4.8 stm32f10x_it.c、 stm32f10x_conf.h文件 (10)6.4.9 库各文件间的关系 (11)6.4.10 常用官方资料 (13)6.4.11 库函数帮助文档使用 (13)第六章 STM32库函数架构剖析本章通过简单介绍STM32库的各个文件及其关系,让读者建立STM32库的概念,看完后对库有个总体印象即可,在后期实际开发时接触了具体的库时,再回头看看这一章,相信你对STM32库又会有一个更深刻的认识。
6.1STM32库函数到底是什么STM32的库函数是ST公司已经封装好一个软件封装库,也就是很多基础的代码,在开发产品的时候只需要直接调用这个ST库函数的函数接口就可以完成一系列工作;例如,你原来要自己烧饭洗衣服,现在ST库函数就好像一个保姆,你只需要使唤一声就有饭吃,有干净的衣服了。
6.2STM32库函数的好处在51单片机的程序开发中,我们直接配置51单片机的寄存器,控制芯片的工作方式,如中断,定时器等。
配置的时候,我们常常要查阅寄存器表,看用到哪些配置位,为了配置某功能,该置1还是置0。
这些都是很琐碎的、机械的工作,因为51单片机的软件相对来说较简单,而且资源很有限,所以可以直接配置寄存器的方式来开发。
STM32库是由ST公司针对STM32提供的函数接口,即API (Application Program Interface),开发者可调用这些函数接口来配置STM32的寄存器,使开发人员得以脱离最底层的寄存器操作,有开发快速,易于阅读,维护成本低等优点。
stm32hal iic函数详解STM32是意法半导体公司推出的一系列32位微控制器,广泛应用于各种嵌入式系统中。
在STM32系列中,HAL库是官方提供的一套库函数,用于简化开发人员对硬件的操作。
本文将详细介绍STM32HAL 库中的I2C函数,包括函数的功能和使用方法。
I2C(Inter-Integrated Circuit)是一种常用的串行通信协议,用于连接微控制器和外部设备。
在STM32中,I2C接口被称为I2C总线,能够同时连接多个外设。
HAL库提供了一系列函数,用于配置和控制I2C总线。
我们需要通过引用相应的头文件来包含I2C函数的定义。
在使用HAL库时,我们需要引用stm32f4xx_hal.h头文件。
在此基础上,我们还需要引用stm32f4xx_hal_i2c.h头文件,该头文件包含了I2C函数的声明。
一般而言,使用I2C通信需要以下几个步骤:1. 初始化I2C总线;2. 配置I2C总线的参数;3. 发送开始信号;4. 发送或接收数据;5. 发送停止信号。
在HAL库中,这些步骤对应了一系列的函数。
下面我们将详细介绍这些函数的功能和使用方法。
1. I2C初始化函数I2C总线初始化函数是HAL_I2C_Init()。
该函数用于初始化I2C总线,并配置相关的时钟、引脚和模式等参数。
函数声明如下:HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c);其中,hi2c是一个I2C_HandleTypeDef类型的结构体指针,用于存储I2C总线的相关参数。
在使用该函数前,我们需要先定义一个I2C_HandleTypeDef类型的结构体变量,并对其成员进行配置。
2. I2C速度配置函数I2C总线的速度配置函数是HAL_I2C_MspInit()。
该函数用于配置I2C总线的时钟频率和占空比等参数。
函数声明如下:void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c);在该函数中,我们需要根据具体的硬件平台和需求来配置I2C总线的时钟源和分频系数等参数。
部分库函数简介一、通用输入/输出(GPIO)--------------------------------------------------------------------------------------------3二、外部中断/事件控制器(EXTI)-----------------------------------------------------------------------------------7三、通用定时器(TIM)-------------------------------------------------------------------------------------------------9四:ADC寄存器------------------------------------------------------------------------25五:备份寄存器(BKP)-------------------------------------------------------------------------------------------------33六、DMA控制器(DMA)---------------------------------------------------------------3 7七、复位和时钟设置(RCC)------------------------------------------------------------------------------------------41 八、嵌套向量中断控制器(NVIC)-----------------------------------------------------------------------------------49命名规则在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。
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()SysDetectErrLED()FOCPortSwitchMotorCtrlChannel(void) 切换电机控制通道,在T1溢出中断中被调用,切换FOC电机控制通道无无InjectADCSwitchADCTriSource()InjectADCSwitchADCSampleCH()Stm32f10x_it.c/TIM1_UP_IRQHandlerFOCPort_CalcCurrentDerr(u8 mc_ch) 计算电流矢量Iq的加速度,其实就是计算在一定间隔时间内的差值U8 mc_ch //电机通道,左电机or 右电机无无Foc_port.c/FOCPortArithmeticModel(u8mc_ch)FOCPortArithmeticModel(u8 mc_ch) FOC模型函数的调用,clark--park--Id/Iq控制--逆park--svpwm U8 mc_ch //电机通道,左电机or 右电机无InjectADCGetPhaseCurrValues()FOCCoordTransClark()FOCCoordTransPark()FOCCurrentPIDArithmetic()FOCCoordTransRevParkCircleLimitation()FOCCoordTransRevPark()CALC_SVPWM()FOCPort_CalcCurrentDerr()Stm32f10x_it.c/ADC1_2_IRQHandler()在ADC转换结束中被调用Foc_inject_adc.c归属组:arithmetic描述:三相电流采样ADC配置和注入式触发采样等的处理函数函数:函数功能描述输入参数输出参数调用函数在何处被调用InjectADC_PhaseCurrentCaliEn(void) 关闭pwm输出,使能相电流校准开关无无无Foc_inject_adc.c/InjectADCPhaseCaliPend()InjectADCReadEn(FunctionalState cmd) 使能三相注入式采样电流读取Cmd (ENABLE orDISALBE)无无Foc_port.c/FOCPortInit()Bool InjectADCPhaseCaliPend(u8 sw) 相电流ADC初始值校准U8 sw bool InjectADC_PhaseCurrentCaliEn()Foc_port.c/ FOCPortInit()InjectADC_ConvConfig(void) 三相注入式ADC配置,配置注入式ADC的寄存器无无无Foc_inject_adc.c/InjectADC_PhaseCurrReadCali()InjectADC_PhaseCurrReadCali() 三相ADC读取值校准无无InjectADC_ConvConfig(void) Foc_inject_adc.c/InjectADCConfig()InjectADCRegularDMAConfig() 常规ADC通道DMA配置,DMA寄存器的配置无无无Foc_port.c/FOCPortPeripheralConfig()InjectADCConfig() 注入式ADc的配置无无InjectADC_PhaseCurrReadCali()Foc_port.c/ FOCPortPeripheralConfig()InjectADCSwitchADCTriSource(u8 mc_ch) 切换左右电机ADC注入式采样的时钟源u8 mc_ch //电机通道,左电机or 右电机无无foc_port.c/FOCPortSwitchMotorCtrlChannel()InjectADCSwitchADCSampleCH(u8 mc_ch) 切换左右电机ADC注入式采用通道u8 mc_ch //电机通道,左电机or 右电机无无foc_port.c/FOCPortSwitchMotorCtrlChannel()InjectADCGetPhaseZeroOffset(u8 mc_ch , PHASE_OFFSET *phase_zero)获取相电流初始值u8 mc_ch //电机通道typedef struct //相电流{s32 a;s32 b;s32 c;}PHASE_OFFSET; 无无stm32f10x_it.c/ADC1_2_IRQHandler()在ADC转换结束中断中被调用,并且是电机状态:MotorCtrlState = CALICURR时PHASE_CURRENT InjectADCGetPhaseCurrValues(u8 mc_ch) 三相电流值计算出矢量电流Ia、Ibu8 mc_ch //电机通道,左电机or 右电机typedef struct //相电流{s32 a;s32 b;s32 c;}PHASE_OFFSET;无foc_port.c/FOCPortArithmeticModel(u8 mc_ch)foc_encoder.c/FOCEncoderStartUp (u8 mc_ch)stm32f10x_it.c/ADC1_2_IRQHandler (u8 mc_ch)在ADC转换结束中断中被调用,而且是在电机状态处于IDLE时被调用InjectADCEnableADCTri(void) 注入式ADC采样使能无无无stm32f10x_it.c/TIM1_UP_IRQHandler()T1上溢中断InjectADCDisableADCTri(void) 关闭ADC触发源出发采样无无无stm32f10x_it.c/ADC1_2_IRQHandler ()ADC转换结束中断foc_coord_transform.c归属组:arithmetic描述:FOC坐标变换,该文件内包含正弦表、最大调制表#define SIN_COS_TABLE {……}static const s16 CoordSinCosTable[256] = SIN_COS_TABLE;函数:函数功能描述输入参数输出参数调用函数在何处被调用STATOR_CURRENT FOCCoordTransClark(PHASE_CURRENTCurr_Input) Clark变换,定子电流Ia、Ib转换成Ialpha和Iβtypedef struct//定子相电流{s16 Ia;s16 Ib;}PHASE_CURRENT;typedef struct//α、β电流{s16 Ialfa;s16 Ibeta;}STATOR_CURRENT;无Foc_port.c/FOCPortArithmeticModel () (在ADC转换完成被调用)Foc_encoder.c/FOCEncoderStartUp () (在电机启动对准时被调用)ROTOR_CURRENT FOCCoordTransPark(STA TOR_CURRENT Curr_Input, s16 Theta) Park变换,Iα和Iβ变换成Id和Iqs16 Theta //转子角度typedef struct{typedef struct{s16 Iq;无s16 Ialfa;s16 Ibeta;}STATOR_CURRENT;s16 Id;}ROTOR_CURRENT;FOCCoordTransRevParkCircleLimitation(u8 mc_ch)输出调制比限幅的函数u8 mc_ch //电机通道无无STATOR_VOLTAGE FOCCoordTransRevPark (ROTOR_VOLTAGE V olt_Input) 逆park变换,该函数理应有电机角度作为输入参数,但由于该函数在调用时处在正park变换之后,正park变换已经将转子角度计算在结构体中,所以在这个函数中就不用计算了。
STM32库函数汇总STMicroelectronics提供了一套完整的软件开发工具包(STMCube),其中包含了一系列的库函数,用于简化STM32的开发过程。
下面是一些常用的STM32库函数的简要介绍:1.GPIO库函数:用于设置和控制GPIO(通用输入输出)引脚状态,包括初始化、读取和写入引脚状态等。
2.外部中断库函数:用于配置和控制外部中断功能,包括触发方式、中断优先级等。
3.定时器库函数:用于配置和控制定时器功能,包括计数模式、定时器中断、PWM输出等。
4.ADC库函数:用于配置和控制ADC(模数转换器)功能,包括参考电压、采样周期、数据读取等。
5.UART库函数:用于配置和控制UART(串行通用异步收发器)功能,包括波特率、数据传输、中断接收等。
6.SPI库函数:用于配置和控制SPI(串行外设接口)功能,包括传输方式、模式、速率、中断接收等。
7.I2C库函数:用于配置和控制I2C(串行外设接口)功能,包括传输方式、速率、地址、中断接收等。
8.DMA库函数:用于配置和控制DMA(直接内存访问)功能,实现高速数据传输,减轻CPU负担。
9.NVIC库函数:用于配置和控制NVIC(嵌套向量中断控制器)功能,包括中断优先级、使能、清除等。
10.RCC库函数:用于配置和控制RCC(时钟控制)功能,包括系统时钟频率、外设时钟使能、时钟源选择等。
11. FLASH库函数:用于配置和控制Flash存储器功能,包括写入、擦除、读取等。
12.PWM库函数:用于配置和控制PWM(脉冲宽度调制)功能,用于控制电机速度、LED亮度等。
B库函数:用于配置和控制USB(通用串行总线)功能,实现USB设备或主机功能。
14.CRC库函数:用于配置和控制CRC(循环冗余校验)功能,用于数据校验。
15.RTC库函数:用于配置和控制RTC(实时时钟)功能,包括时钟设置、中断控制等。
以上是一些常用的STM32库函数,通过使用这些库函数,开发者可以快速高效地开发STM32相关的应用。
STM32库函数功能详解1.GPIO库函数:GPIO库函数用于对STM32的GPIO外设进行初始化和控制。
包括GPIO的初始化、输入输出模式设置、上拉下拉设置、数据读写操作等。
通过这些函数,可以方便地对单片机的GPIO进行操作。
ART库函数:USART库函数用于对STM32的串口外设进行初始化和数据的收发操作。
包括串口的初始化、波特率设置、发送和接收数据等。
通过这些函数,可以方便地实现串口通信功能。
3.SPI库函数:SPI库函数用于对STM32的SPI外设进行初始化和数据传输操作。
包括SPI的初始化、数据传输的设置、发送和接收数据等。
通过这些函数,可以方便地实现SPI通信功能。
4.I2C库函数:I2C库函数用于对STM32的I2C外设进行初始化和数据传输操作。
包括I2C的初始化、数据传输的设置、发送和接收数据等。
通过这些函数,可以方便地实现I2C通信功能。
5.ADC库函数:ADC库函数用于对STM32的模数转换器进行初始化和数据转换操作。
包括ADC的初始化、转换通道的设置、启动转换和读取转换结果等。
通过这些函数,可以方便地实现模数转换功能。
6.PWM库函数:PWM库函数用于对STM32的定时器进行初始化和PWM输出操作。
包括定时器的初始化、周期和占空比的设置、启动和停止PWM输出等。
通过这些函数,可以方便地实现PWM输出功能。
7.NVIC库函数:NVIC库函数用于对STM32的中断控制器进行初始化和中断控制操作。
包括中断优先级的设置、中断使能和禁止控制等。
通过这些函数,可以方便地实现中断控制功能。
8.RCC库函数:RCC库函数用于对STM32的时钟控制器进行初始化和时钟设置操作。
包括时钟的使能和禁止、时钟源的选择和分频设置等。
通过这些函数,可以方便地实现时钟设置功能。
9.DMA库函数:DMA库函数用于对STM32的DMA控制器进行初始化和数据传输操作。
包括DMA的初始化、数据源和目的地的设置、启动和停止传输等。
解析STM32的库函数以最常用的GPIO设备的初始化函数为例,如下程序段一:GPIO_InitTypeDef GPIO_InitStructure;1 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;2 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;4GPIO_Init(GPIOA , &GPIO_InitStructure5这是一个在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,GPIO_Speed_2MHz,GPIO_Speed_50MHz}GPIOSpeed_TypeDef;则可知GPIOSpeed_TypeDef枚举类型同一只,其功能是定义一个枚举类型变量,该变量可表示GPIO_Speed_10MHz、GPIO_Speed_2MHz和GPIO_Speed_50MHz三个含义(其中GPIO_Speed_10MHz已经定义为1,读者必须知道GPIO_Speed_2MHz则依次被编译器赋予2,而GPIO_Speed_50MHz为3)。
单片机STM32开发中常用库函数分析
在STM32开发中,使用库函数可以帮助开发人员更快速、更便捷地实
现目标功能。
下面是一些常用的STM32库函数的分析:
1. GPIO库函数:GPIO库函数用于对STM32的通用输入输出引脚进行
配置和控制。
通过这些函数可以实现引脚的初始化、读取和设置等操作。
例如,GPIO_Pin_Init(函数可以对引脚进行初始化配置,
GPIO_Pin_Read(函数用于读取引脚的电平,GPIO_Pin_Write(函数用于设
置引脚的输出电平。
这些函数的使用可以方便地对外设进行控制。
2. NVIC库函数:NVIC库函数用于对中断向量表进行操作和配置。
通
过这些函数可以实现中断的使能、优先级的设置等操作。
例如,
NVIC_EnableIRQ(函数可以使能指定的中断,NVIC_SetPriority(函数可设
置中断的优先级。
这些函数的使用可以方便地管理中断响应。
3. RCC库函数:RCC库函数用于对STM32的时钟系统进行配置和管理。
通过这些函数可以实现外部时钟源的配置、APB总线时钟的配置等操作。
例如,RCC_OscConfig(函数可进行时钟源的配置,
RCC_APBPeriphClockCmd(函数可使能相应的外设时钟。
这些函数的使用可
以方便地进行时钟管理。
4. UART库函数:UART库函数用于对STM32的串行通讯端口进行操作
和配置。
通过这些函数可以实现串口的初始化、发送和接收等操作。
例如,UART_Init(函数用于串口的初始化设置,UART_SendData(函数用于发送数据,UART_ReceiveData(函数用于接收数据。
这些函数的使用可以方便地
进行串口通讯。
5. SPI库函数:SPI库函数用于对STM32的串行外设接口进行操作和
配置。
通过这些函数可以实现SPI通讯的初始化、发送和接收等操作。
例如,SPI_Init(函数用于SPI的初始化设置,SPI_SendData(函数用于发送
数据,SPI_ReceiveData(函数用于接收数据。
这些函数的使用可以方便地
进行SPI通讯。
6. I2C库函数:I2C库函数用于对STM32的I2C总线接口进行操作和
配置。
通过这些函数可以实现I2C通讯的初始化、发送和接收等操作。
例如,I2C_Init(函数用于I2C的初始化设置,I2C_SendData(函数用于发送
数据,I2C_ReceiveData(函数用于接收数据。
这些函数的使用可以方便地
进行I2C通讯。
7. DMA库函数:DMA库函数用于对STM32的直接存储器访问控制器进
行配置和管理。
通过这些函数可以实现DMA传输的初始化和控制等操作。
例如,DMA_Init(函数用于DMA的初始化设置,DMA_Cmd(函数用于启动或
停止DMA传输。
这些函数的使用可以方便地进行DMA传输。
8. TIM库函数:TIM库函数用于对STM32的定时器进行配置和管理。
通过这些函数可以实现定时器的初始化、定时中断的配置等操作。
例如,TIM_TimeBaseInit(函数用于定时器的初始化设置,TIM_ITConfig(函数用
于配置定时中断。
这些函数的使用可以方便地进行定时器的控制。
9. EXTI库函数:EXTI库函数用于对STM32的外部中断线进行配置和
管理。
通过这些函数可以实现外部中断的初始化、触发方式的设置等操作。
例如,EXTI_Init(函数用于外部中断的初始化设置,
EXTI_ClearITPendingBit(函数用于清除中断标志位。
这些函数的使用可
以方便地进行外部中断的控制。
库函数是STM32开发中重要的工具,通过这些函数的使用可以更加方便地实现复杂的功能。
开发人员可以根据具体的需求选择适合的库函数来进行开发,从而提高开发效率。
对于不熟悉库函数的开发人员来说,可以通过查阅官方文档或者参考其他开发者的经验来学习和掌握库函数的使用方法。