stm32下标准库函数与HAL库函数编程方式的差异

标准库函数

由于寄存器开发难度很大,因此ST公司就专门编写了芯片的库函数(固件库),将一些常用量的宏定义和一些外设也通过结构体变量封装起来,如GPIO口时钟等。所以我们只需要配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能。

标准外设库(Standard Peripherals Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。这应该是目前使用最多的ST库,几乎全部使用C语言实现。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性

HAL库函数

HAL(Hardware Abstraction Layer)是硬件的抽象层,它表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的对用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。下图是HAL库的整体框架。
在这里插入图片描述

HAL库是ST未来主推的库,从前年开始ST新出的芯片已经没有STD库了,比如F7系列。现在,ST主推HAL库,目前,HAL库已经支持STM32全线产品。总的来说,HAL库相对于库函数层次架构更加清晰,更加抽象。

标准库函数与HAL库函数代码对比

标准库函数:

 char stop[]={'S','t','o','p',',','s','t','m','3','2'};
 	u16 t;  
	u16 len;	
	u16 times=0;	
	delay_init();	    	 //ÑÓʱº¯Êý³õʼ»¯	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
	uart_init(115200);	 //´®¿Ú³õʼ»¯Îª115200
 	LED_Init();			     //LED¶Ë¿Ú³õʼ»¯
	KEY_Init();          //³õʼ»¯Óë°´¼üÁ¬½ÓµÄÓ²¼þ½Ó¿Ú	
 	while(a)
	{
		if(USART_RX_STA&0x8000)
		{		   
			len=USART_RX_STA&0x3fff;//µÃµ½´Ë´Î½ÓÊÕµ½µÄÊý¾Ý³¤¶È
			printf("\r\nhello windows!:\r\n\r\n");
			for(t=0;t<len&&USART_RX_BUF[t]==stop[t];a++,t++)
				{if (a>=10) {a=0;break;}}
			for(t=0;t<len;t++)
			{ 
				USART_SendData(USART1, USART_RX_BUF[t]);//Ïò´®¿Ú1·¢ËÍÊý¾Ý
				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËͽáÊø
			}
			printf("\r\n\r\n");//²åÈë»»ÐÐ
			USART_RX_STA=0;
		}

HAL库函数:

HAL_Init();
Stm32_Clock_Init(RCC_PLL_MUL9);
delay_init(72);
uart_init(115200);
LED_Init();
KEY_Init();
while(1)
{
if(USART_RX_STA&0x8000)
{
led=USART_RX_STA&03fff;
HAL_UART_Transmit(&UART1_Handler,(uint8_t*)USART_RX_BUF,led,1000);
while(_HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TC)!=SET);
printf("\r\n\r\n");
USART_RX_STA=0;
}
else
}

总结

通过比较STM32库函数和HAL库的开发方式,库函数和HAL库其实本质上都是将STM32的底层的寄存器进行封装并向用户提供友好的接口,这都极大的降低了用户的开发门槛。但是相对于库函数来说,HAL库更加“通用”,能够较好的移植到其他的芯片上去,但也正是这样,导致其代码比较庞大、执行效率比较低的结果。总的来说,HAL库相对于库函数更加友好,能够让用户将精力放在开发的产品上。

MCU集成开发平台 stduino IDE

该平台网址为 http://www.stduino.com/pindex.php
是一款面向32位处理器快速入门学习的集成开发平台
它的好处是免费、高效、开源等,操作界面简洁,易上手。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值