stm32cube探索(一)

    今天突然来了兴致,想要把所学到的整理一下写成博客,计划一周至少一篇,想让自己养成总结知识的好习惯,也想要结识一些技术界的大牛。至于内容,想到什么写什么,今天是第一篇。因为要参加电赛,老师推荐stm32作为控制器,所以打算好好学习一下,而上周得知了ST公司的一款GUI ide,所以打算尝试一下。

    此外,事先说明,因为本人经验有限,所以博客仅供参考,欢迎大家提出问题。

********************************************************************************************************************************


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,PE6LED1-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,如果呈现如图界面则表示已经完成了基本的初始化操作



谢谢大家,如有不足,请多指教。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS(机器人操作系统)是一款成熟的机器人操作系统,具有完备的生态体系,未来的发展意义可以成为机器人届中的”Linux、Android“。机器人的开发学习要综合软硬件的协同开发,硬件开发有些部分倾向于底层的设计和使用。软件开发可以依托C++、PYTHON等高级语言进行ROS接口应用开发,或者兼容ROS系统。本系列的ROS开发课程包含下位机开发、上位机开发、基于MBD(基于模型设计的开发)等。下位机作为机器人设计的基础部分是学习机器人操作系统必经之路,下位机我们通常会选择Arduino(适合学习不适合工程,代码执行效率差)、STM32系列产品(工程应用广泛,适合学习和工程开发,代码针对性强),当然还有NXP系列、51系列、TI DSP等,后期可以根据产品的性能和成本要求去考虑;上位机部分,主要是基于工控机、树莓派Raspberry、英伟达Jetson等可以运行操作系统的嵌入式设备再基于ROS操作系统进行实训学习。网络上对于ROS类的教学比较多,但是系统化从底层向高阶层层递升的教学方法偏少,知识碎片化严重,对机器人开发工程师深远的发展有负面影响,基于此本人通过多年自身的学习和工程实践,将机器人开发课程系统化、具象化、模块化地引导式学习,每节课程都有相应的课件和代码引导。对致力于机器人事业的学生有推动作用,且增强信心,系统化自己的机器人知识。为自己的职业规划和事业发展奠定坚实基础。最后,你们的支持,就是老师不断创作的动力!老师会不断更新机器人类相关知识,希望”与子同裳“。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值