基于标准库函数与基于HAL库函数的stm32编程方式对比

基于标准库函数与基于HAL库函数的stm32编程方式对比

  • 一、标准库函数
  • 二、HAL库函数
  • 三、差异
  • 四、stdunio IDE试玩
    • 参考资料

一、标准库函数

1、标准库的解释
标准外设库(Standard Peripherals Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。在使用中我们只需要配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。

2、基于标准库的一段STM32代码

int main(void)
 {		
 	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(1)
	{
		if(USART_RX_STA&0x8000)
		{					   
			len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
			printf("\r\n您发送的消息为:\r\n\r\n");
			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;
		}else
		{
			times++;
			if(times%5000==0)
			{
				printf("\r\n精英STM32开发板 串口实验\r\n");
				printf("正点原子@ALIENTEK\r\n\r\n");
			}
			if(times%200==0)printf("请输入数据,以回车键结束\r\n"); 
			if(times%30==0){LED0=!LED0; LED1=!LED1;}//闪烁LED,提示系统正在运行.
			delay_ms(10);   
		}
	}	 
 }

二、HAL库函数

1、HAL库的解释
HAL库是ST公司提供的新标准库,包含在ST为新的标准库注册了一个新商标:STMCube™当中。可以说HAL库就是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。

2、基于HAL库的一段STM32代码(与上文实现同一功能)

int main(void)
{
	u8 len;	
	u16 times=0;
	
    HAL_Init();                    	 	//初始化HAL库    
    Stm32_Clock_Init(RCC_PLL_MUL9);   	//设置时钟,72M
	delay_init(72);               		//初始化延时函数
	uart_init(115200);					//初始化串口
	LED_Init();							//初始化LED	
	KEY_Init();							//初始化按键
	
    while(1)
    {
			
       if(USART_RX_STA&0x8000)
		{					   
			len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
			printf("\r\n您发送的消息为:\r\n");
			HAL_UART_Transmit(&UART1_Handler,(uint8_t*)USART_RX_BUF,len,1000);	//发送接收到的数据
			while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TC)!=SET);		//等待发送结束
			printf("\r\n\r\n");//插入换行
			USART_RX_STA=0;
		}else
		{
			times++;
			if(times%5000==0)
			{
				printf("\r\nALIENTEK 精英STM32开发板 串口实验\r\n");
				printf("正点原子@ALIENTEK\r\n\r\n\r\n");
			}
			if(times%200==0)printf("请输入数据,以回车键结束\r\n");  
			if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
			delay_ms(10);   
		} 
    }
}

三、差异

1、HAL库的出现比标准库要晚,但其实和标准库一样,都是为了节省程序开发的时期,而且HAL库尤其的有效,如果说标准库把实现功能需要配置的寄存器集成了,那么HAL库的一些函数甚至可以做到某些特定功能的集成。也就是说,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。
2、HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一样的,例如在F4上开发的程序移植到F3上是不能通用的,而使用HAL库,只要使用的是相通的外设,程序基本可以完全复制粘贴,注意是相通外设,意思也就是不能无中生有,例如F7比F3要多几个定时器,不能明明没有这个定时器却非要配置,但其实这种情况不多,绝大多数都可以直接复制粘贴。

2、实例程序对比
基于标准库函数与基于HAL库函数的stm32编程方式对比_第1张图片
基于标准库函数与基于HAL库函数的stm32编程方式对比_第2张图片

实现同一功能的程序,基于标准库的程序语句比基于HAL库的程序语句要多,要复杂。

四、stdunio IDE试玩

1、Stduino IDE是一款面向32位处理器快速入门学习的集成开发平台,目前已经支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能。

2、Stduino IDE软件相关功能简介
1)支持自定义编辑背景
2)中英文自由切换
3)代码高亮
4)代码自动提示补全
5)—键USB\Stlink下载
6)支持串口调试

3、软件界面介绍
基于标准库函数与基于HAL库函数的stm32编程方式对比_第3张图片
4、比起keil和Arduino,stduino的操作界面简洁干净,操作便捷,程序编写简单,不需要太多的单片机基础和编程基础,简单学习后,可以快速的进行开发,自带程序烧录,自带串口调试。stduino IDE可以在Windows、Macintosh OS X、Linux三大主流操作系统上运行。最重要的是,免费!

参考资料

1、《STM32 HAL 库开发实战指南—基于F103指南者》
2、通俗易懂解析stm32 (一) HAL库 标准库 直接配置寄存器 三种开发方式的区别
3、Stduino官网论坛.

你可能感兴趣的:(stm32,嵌入式,单片机)