完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32 Embedded Software
首先来介绍一下stm32官方的三种固件库: 到目前为止,有标准外设库(STD库)、HAL库、LL库 三种。前两者都是常用的库,后面的LL库是ST前段时间才添加,随HAL源码包一起提供。其中,STD库和HAL库两者相互独立,互不兼容。 第一个便是用的人数最多,大家最熟悉的标准外设库(STD)了。标准外设库(Standard Peripherals Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。这应该是目前使用最多的ST库。几乎全部使用C语言实现。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。 而且,很不幸的是,几年前ST公司停止了对STD库的更新,所以STD库的版本停留在了v3.5,也就是说,它不支持从STM32 L0,L4和F7开始的之后的STM32系列芯片,所以如果大家有想开发这几种芯片的想法,一定要掌握HAL或LL库。 第二个是官方主推的HAL库,而且也是stm32cubemx默认使用的库。HAL(Hardware Abstraction Layer),中文名:硬件抽象层。HAL库是ST为STM32最新推出的抽象层嵌入式软件,可以更好的确保跨STM32产品的最大可移植性。该库提供了一整套一致的中间件组件,如RTOS,USB,TCP / IP和图形等。 可以说HAL库就是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库是ST未来主推的库,从前年开始ST新出的芯片已经没有STD库了,比如F7系列。目前,HAL库已经支持STM32全线产品。 使用HAL库编程,最好尽量符合HAL库编程的整体架构。 最后一个便是年轻的LL库了,因为HAL库有个最大的缺点就是复杂程度高,执行速度慢,所以为了弥补这一缺点,官方又推出了LL库。LL库(Low Layer)是ST最近新增的库,与HAL捆绑发布,文档也是和HAL文档在一起的,比如:在STM32F3x的HAL库说明文档中,ST新增了LL库这一章节。 LL库更接近硬件层,对需要复杂上层协议栈的外设不适用,直接操作寄存器。其支持所有外设。可以独立使用,该库完全独立实现,可以完全抛开HAL库,只用LL库编程完成。在使用STM32CubeMX生成项目时,直接选LL库即可。如果使用了复杂的外设,例如USB,则会调用HAL库混合使用。LL库文件的命名方式和HAL库基本相同,像是STD库在cube环境中的实现。 几种库的比较如下:(这张图是我copy的,官网实在是没找到) STM32CubeMX ST为新的标准库注册了一个新商标:STMCube™。并且,ST专门为其开发了配套的桌面软件STMCubeMX,开发者可以直接使用该软件进行可视化配置,大大节省开发时间。 LL库和HAL库两者相互独立,只不过LL库更底层。而且,部分HAL库会调用LL库(例如:USB驱动)。同样,LL库也会调用HAL库。用户可以使用STMCubeMX直接生成对应芯片的整个项目(包括Keil v5和IAR),STMCubeMX负责给整理各种需要的源码文件。 下载软件 看了这么多,还是不如来亲手实践一下。下面是stm32CubeMX下载链接。 进入之后,页面如图所示: 点击后会直接到最下面: 然后点击ACCEPT,之后输入邮箱,会有一封邮件发给你,点击邮件中的链接就可以下载了。下载后安装好就可以开始编程了。 熟悉界面 首先我们来看一下初始化界面(可能会被强制更新一波): 然后话不多说,先New一个工程。 在里面可以搜索到自己使用的单片机的型号(我用的是STM32F103VE系列) 选中相应的封装,点击“Start Project” 屏幕上显示了我们的单片机以及相应的引脚,首先来设置一下时钟,RCC设置,选择HSE(外部高速时钟)为Crystal/Ceramic Resonator(晶振/陶瓷谐振器) 然后设置一下GPIO引脚,PE5,PE6为LED1-LED2.找到对应管脚设置为GPIO_Output模式。(黄色引脚为该功能的GPIO已被用作其他功能,可以忽略。绿色表示管脚已使用) STM32最高时钟为72M,在HCLK处(红色圈)输入72,软件即可自动配置。 接下来设置第三个选项卡(功能外设): 在配置框我们可以看到有几个区域,分别对应的功能设置如下 Multimedia(多媒体):音频视频、LCD Control(控制):定时器 Analog(模拟):DAC、ADC Connectivity(通讯连接):串口、SPI 、I2C、USB、ETH SYStem(系统):DMA(直接存储器存取)、GPIO、NVIC、RCC、看门狗 middlewares(中间件): FreeRTOS、FATFS、LwIP、USB 此工程中DMA没用的不用配置,NVIC(嵌套中断向量控制器(Nested Vectored Interrupt Controller))配置中断优先级。RCC不用配置。 设置引脚(分别为GPIO初始化电平、GPIO模式、GPIO最大速度) 可以看见,我们的引脚标签名称已经发生了变化 设置完以后,我们就可以开始Projiect -》 Generate Code了,设置好如图三个方框里的,注意路径不要带有中文 第二个选项卡勾选红色圈,外设初始化为独立的C文件和头文件。 生成代码,open后找到main.c,如果呈现如图界面则表示已经完成了基本的初始化操作 谢谢大家,如有不足,请多指教。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 22:43 , Processed in 0.841274 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号