文章目录

  • 基于标准库函数与基于HAL库函数的stm32编程方式
    • 一、基于标准库
      • 1. 介绍
      • 2. 库函数的STM32串口程序编写
    • 二、基于HAL库
      • 1.介绍
      • 2.HAL库STM32串口程序编写
    • 三、差异
    • 四、 stduino IDE的试玩

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

一、基于标准库

1. 介绍

STM32有非常多的寄存器,而导致了开发困难,所以为此ST公司就为每款芯片都编写了一份库文件,也就是工程文件里stm32F1xx…之类的。在这些 .c .h文件中,包括一些常用量的宏定义,把一些外设也通过结构体变量封装起来,如GPIO口时钟等。所以我们只需要配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能。也是目前最多人使用的方式,也是学习STM32接触最多的一种开发方式。
由于寄存器开发难度很大,因此ST公司就专门编写了芯片的库函数(固件库),将一些常用量的宏定义和一些外设也通过结构体变量封装起来,如GPIO口时钟等。所以我们只需要配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能。
标准外设库(Standard Peripherals Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。这应该是目前使用最多的ST库,几乎全部使用C语言实现。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。

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);     //串口初始化为115200LED_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库是ST公司目前主力推的开发方式,全称就是Hardware Abstraction Layer(抽象印象层)。库如其名,很抽象,一眼看上去不太容易知道他的作用是什么。它的出现比标准库要晚,但其实和标准库一样,都是为了节省程序开发的时期,而且HAL库更有效,如果说标准库把实现功能需要配置的寄存器集成了,那么HAL库的一些函数甚至可以做到某些特定功能的集成。也就是说,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。
HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一样的,例如在F4上开发的程序移植到F3上是不能通用的,而使用HAL库,只要使用的是相通的外设,程序基本可以完全复制粘贴,注意是相通外设,意思也就是不能无中生有,例如F7比F3要多几个定时器,不能明明没有这个定时器却非要配置,但其实这种情况不多,绝大多数都可以直接复制粘贴。

2.HAL库STM32串口程序编写

int main(void)
{u8 len;    u16 times=0;HAL_Init();                            //初始化HAL库    Stm32_Clock_Init(RCC_PLL_MUL9);    //设置时钟,72Mdelay_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);   } }
}

三、差异

库函数配置好串口以后,当串口接收到数据再发送给上位机时需要循环发送,但是HAL库就直接调用HAL_UART_Transmit函数就能直接将串口的数据发给上位机。库函数的串口通信函数只适用于STM32F1系列,对于其他系列的就不能通用了;但是对于HAL库来说,只要外设相同,基本上能够很容易的移植
延伸:标准外设库(Standard Peripherals Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。这应该是目前使用最多的ST库,几乎全部使用C语言实现。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。
HAL库与新增的LL库,都是ST公司提供的新标准库,包含在ST为新的标准库注册了一个新商标:STMCube™当中。LL库和HAL库两者相互独立,只不过LL库更底层。而且,部分HAL库会调用LL库(例如:USB驱动)。同样,LL库也会调用HAL库。
可以说HAL库就是用来取代之前的标准外设库的。

四、 stduino IDE的试玩

“Stduino IDE 是一款面向 32 位 ARM 单片机快速入门学习的集成开发平台,目前已经支
持 Arduino_Core_STM32 框架(Arduino 式开发),集聚快捷、高效、免费、开源、易得于一身,软件还集成了 GDB 调试功能。另外后续开发的外设扩展库将采用开源共享的理念进行分发,一处分享全球共用,极大保障后续软件维护的动力支撑。”

它的优势:

  • GDB 调试
  • 封装库下载安装
  • 代码自动补全提示
  • 中英文模式
  • UTF-8\GBK 编码格式
  • 代码快速格式化
  • SWD\串口程序
  • 下载&调试等

与Ardunio IDE类似, stduino IDE的代码编写都一样,只是在下载程序和一些、工具选项位置有些差异。

基于标准库函数与基于HAL库函数的stm32编程方式相关推荐

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

    基于标准库函数与基于HAL库函数的stm32编程方式对比 一.标准库函数 二.HAL库函数 三.差异 四.stdunio IDE试玩 参考资料 一.标准库函数 1.标准库的解释 标准外设库(Stand ...

  2. 1、新建基于标准固件库MDK5工程模板(STM32F103ZET6)

    新建基于标准固件库MDK5工程模板 1.STM32官方库文件夹介绍 如上图,是ST官方提供的STM32标准固件库的文件包结构: STM32官方固件库下载地址: "https://www.st ...

  3. 总结基于寄存器与基于固件库stm32编程的差异

    基于寄存器与基于固件库stm32编程方式有什么差异 总的来说是专业层面或者说是应用层面的区别 总的来说是专业层面或者说是应用层面的区别 从应用角度讲,寄存器相对来说是属于更底层的,类似于驱动层,而固件 ...

  4. Ardunio和HAL库函数的stm32编程

    Ardunio的STM32串口通信 一.安装Ardunio IDE和相关支持库 1.Ardunio是什么 2.安装及配置过程 二.STM32板的串口通信程序 1.代码 2.烧录 三.基于标准库函数与H ...

  5. 为什么您应该使用基于标准的开发实践

    为什么您应该使用基于标准的开发实践 Why you should use standards-based development practices (even if you don't have t ...

  6. 技术宝典 | 基于标准 WebRTC 低延迟直播的开源实践

    导读:2020年,新冠疫情爆发并席卷全球,对包括中国在内的全球经济造成了巨大的冲击,同时深刻影响了社会生活.在这一背景下,以消费市场上轰轰烈烈的直播电商为引爆点,直播行业再次掀起热潮.在中国企业数字化 ...

  7. stm32单片机屏幕一直闪_STM32使用HAL库函数点亮OLED

    OLED屏幕应用十分广泛,我们可以使用STM32单片机对其进行控制,使其显示我们需要的各种数字.字母.汉字.图画等.我们此次使用下图这款非常普遍的0.96寸OLED液晶屏.此款OLED屏采用IIC的通 ...

  8. php 上传sb2,基于标准的http来实现Android多文件上传

    实现多文件的上传,基于标准的http来实现. 多文件上传MyUploader类的实现: /** * * 同步上传多个文件 * 基于标准的http实现,需要在非UI线程中调用,以免阻塞UI. * */ ...

  9. STM32F103VE基于标准库下DHT11数据串口打印输出

    STM32F103VE基于标准库下DHT11数据串口打印输出

最新文章

  1. 哈夫曼编码(Huffman)Java实现代码简化版
  2. python 内置函数 sum()函数 求和函数
  3. iOS之深入解析内存管理散列表SideTables和弱引用表weak_table的底层原理
  4. 注解_自定义注解_元注解
  5. MySQL - 视图
  6. 2020蓝桥杯省赛---java---B---7(单词分析)
  7. 由炮灰模型到“微软钻石题”
  8. eigrp hello报文格式
  9. java学习日记(1-7)
  10. 浮点数转换成字符串函数
  11. miui11精简_MIUI11评测:真的是缺乏创新吗?
  12. M2Det论文解读和开源代码
  13. 《软件项目管理》课程知识总结
  14. 站班汇报 水印 加相册插件
  15. 解决 Chrome 浏览器跨域加载本地文件的问题
  16. 手机比较版本差异工具
  17. Windows下cmd命令—systeminfo
  18. 面试常用mysql语句_50个常用的笔试、面试sql语句
  19. 最优化:一维搜索的Wolfe条件与Goldstein条件
  20. 使用LEADTOOLS文档比较工具比较文档和图像

热门文章

  1. IDEA生成jar工具包
  2. Android手机连接到Tomcat服务器
  3. 禁止应用和adb安装APK
  4. python怎么用根号_python中根号怎么表示
  5. 如何成为一名IT咨询顾问?
  6. 史上最详细log4j使用文档
  7. Qlikview Data Modeling---Concatenation
  8. 删除在Godaddy注册的域名,申请退款的全过程
  9. 加解密,加签、验签也就这肥事
  10. 计算机一级是word2010,WORD2010讲义计算机一级