完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
HAL库和标准库的原理区别
HAL简介: == HAL库 ==是st公司为了更方便地进行stm32之间的移植而开发的库,通用性很强,在不同的两款stm32芯片之间的移植基本上不需要修改。之前使用的标准库都是基于寄存器的操作。寄存器版本使用较麻烦,每个设置都要去查看芯片datasheet,好处是可以让你熟悉芯片的寄存器配置。库函数是基于寄存器版本进行二次封装后推出的,它的优势就是寄存器版本的劣势,方便了使用,不再需要手动去配置寄存器,使用更方便了。但是它的劣势就是HAL的优势,就是每次修改MCU功能,都需要手动去修改功能,而且自己修改也不能保证正确性,程序代码在不同MCU之间的移植性不强。 == HAL库 ==,HAL是Hardware Abstraction Layer的缩写,中文名称是:硬件抽象层,HAL库工程一般使用Cube软件来生成工程。HAL库是ST公司为STM32的MCU最新推出的抽象层嵌入式软件,更方便的实现跨STM32产品的最大可移植性。优势就是不需要开发工程师再关注所用MCU型号,只需要专注所以要的功能软件开发工作。而且是未来主推的方向,正在不断的推出更新。HAL库推出的同时,也加入了很多第三方的中间件,有RTOS,USB,TCP / IP和图形等等。和标准库对比起来,STM32的HAL库更加的抽象,ST最终的目的是要实现在STM32系列MCU之间无缝移植,甚至在其他MCU也能实现快速移植。 区别: HAL 库相对标准库更加复杂更加繁琐,但是HAL库能够适应不同的st芯片的应用,所以应用能力更加广泛,但是是直接和硬件联系的,所以比起标准库来说,更难上手。 串口通信实验包含的文件区别 标准库: HAL: 具体代码区别 主函数: 标准库: #include “led.h” #include “delay.h” #include “key.h” #include “sys.h” #include “usart.h” 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(“rn您发送的消息为:rnrn”); for(t=0;t《len;t++) { USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束 } printf(“rnrn”);//插入换行 USART_RX_STA=0; }else { times++; if(times%5000==0) { printf(“rn精英STM32开发板 串口实验rn”); printf(“正点原子@ALIENTEKrnrn”); } if(times%200==0)printf(“请输入数据,以回车键结束n”); if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行。 delay_ms(10); } } } HAL库: #include “sys.h” #include “delay.h” #include “usart.h” #include “led.h” #include “key.h” 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(“rn您发送的消息为:rn”); HAL_UART_Transmit(&UART1_Handler,(uint8_t*)USART_RX_BUF,len,1000); //发送接收到的数据 while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TC)!=SET); //等待发送结束 printf(“rnrn”);//插入换行 USART_RX_STA=0; }else { times++; if(times%5000==0) { printf(“rnALIENTEK 精英STM32开发板 串口实验rn”); printf(“正点原子@ALIENTEKrnrnrn”); } if(times%200==0)printf(“请输入数据,以回车键结束rn”); if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行。 delay_ms(10); } } } 总结 HAL库相对标准库来说,同样的串口通信实验需要更多的文件包含,HAL库更加繁琐复杂,但是相对标准库来说,HAL库的移植性更加强,能够适应更多不同种类的硬件,所以能够一个工程多个硬件使用,所以就能力上,HAL库更加强大。 |
|
|
|
只有小组成员才能发言,加入小组>>
4682个成员聚集在这个小组
加入小组3388 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4309 浏览 1 评论
4342 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-3 14:25 , Processed in 0.348323 second(s), Total 42, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号