STM32L151单片机标准库静态编译和调用

STM32提供的标准库是ST单片机开发工程师应该非常熟悉的,在工程中调用标准库函数也是非常高效的开发方式,但是每次创建工程都需要将标准库文件源码和头文件添加到工程中,是不是觉得很麻烦呢,而且每次编译的时候,如果全编译,会花费很多不必要的时间,所以这里提供一个可提高stm32标准库开发效率和编译速度的方法:stm32静态库编译及调用测试,不仅标准库可以编译成lib文件调用,自己封装的通用的算法,也可以编译成lib,如果不想把算法泄漏给别人,这种方式是非常有效的哦。

最近使用的STM3L15x系列单片机,因为发现编译的时候,速度有点慢,则想用静态编译将标准库编译好,直接调用即可大大加快编译速度。

1,标准库编译工程建立

我用keil5新建立一个名为stm32l15xlib的工程,这个名称最后用于产生lib文件的名字,工程目录如下:

将标准库源码和头问价复制到新建工程目录下,按如下图方式加载到lib库工程中:

至此所有需要添加的文件在工程中。

2,库工程配置

工程要能生成库文件,需要将这个工程正常编译后才行,这时需要对新建的工程进行一些配置:

(1)头文件路径指定包含,配置预编译选项

(2)配置生成lib

配置生成lib的名称和路径。

编译工程,生成lib文件。

 

lib生成的路径。

 

3,lib文件调用及工程测试

(1)新建应用工程,选取芯片型号,加载启动文件

加载启动文件,在keil中这个是比较方便的,keil支持器件的启动文件加载,只要包含keil器件支持包:

(2)添加库文件,新建测试main.c

加载库文件和main.c文件都在Manage Projiect Items界面进行添加,同样需要配置工程编译的头文件依赖路径,这里不再赘述。

下面是main.c的程序源码,实现led使用GPIOB_PIN0端口控制周期闪烁:

#include "stm32l1xx.h"
#include "stm32l1xx_gpio.h"
#include "stm32l1xx_rcc.h"

#define LED1 GPIO_Pin_0

void Init_LEDs(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
	GPIO_InitStructure.GPIO_Pin = LED1;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT ; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);	
}

void DELAY_Ms(unsigned int n)
{
  unsigned int j = 0;
  while (n--)
  {
    j = 8000;
    while(j--);
  }
}

void ToggleLEDs(uint16_t GPIO_Pin)
{
	GPIO_ToggleBits(GPIOB,GPIO_Pin);
}


int main(void)
{
	Init_LEDs();
	
	while(1)
	{
		GPIO_ResetBits(GPIOB,LED1);
		DELAY_Ms(20);
		GPIO_SetBits(GPIOB,LED1);
		DELAY_Ms(20);
	}
}


按照这个方式,我们可以把自己实现的算法,封装成库供第三方使用,最好还是使用标准库函数进行算法的实现,这样一个算法只需在标准库环境下就能正常使用,可移植性会比较好。

可参考:http://www.eeworld.com.cn/mcu/2018/ic-news100541474.html

猜你喜欢

转载自blog.csdn.net/qq_28643619/article/details/88353902
今日推荐