dsjsjf 发表于 2018-11-5 08:50:49

第三期:聊聊STM32CubeMX及HAL库的使用情况、技巧等

    ST从2014年推出了STM32CubeMX,同时配套的是HAL库。我是在2014年的ST研讨会上了解到这个工具,然后回来后立马下载,用了觉得蛮好用的,就一直用到了现在。
    四年多的时间,STM32CubeMX和HAL库也在不断更新,到现在,已经支持STM32全系列,功能及生态支持上也很强大,各种中间件(FatFs、FreeRTOS、LWIP、USB、GUI等等)可无缝对接。
    说说我目前的使用情况:
1、在硬件设计的时候,我就会使用到STM32CubeMX,使用它来分配MCU的各外设及其对应的管脚、晶振时钟等;
2、再通过Configuration配置各外设、中间件的具体功能。然后生成工程。
以上两步可以节约很多时间,工程的创建、端口功能复用配置、各中间件移植的步骤都省去了。
3、添加自己的代码。
      STM32CubeMX生成的工程可以直接编译,但还仅仅是基础代码。这时就需要添加自己的功能性代码。生成的工程中一般有main.c\xxx_hal_msp.c\xxx_it.c 这几个是可以添加自己代码的。记得要把自己的代码添加在/* USER CODE BEGIN x */ 和/* USER CODE END x */之间,这样下次在STM32CubeMX修改了配置,再次生成代码,这之间的自己的代码不会被覆盖。
      不过,我现在基本不修改生成的代码,我会新建一个文件夹,写自己的代码。比如,使用了FreeRTOS后,可以在CubeMX中创建任务时造成代码为As weak,这样生成的main.c文件中的任务函数为
/* USER CODE END Header_MainTask */

__weak void MainTask(void const * argument)

{

/* init code for LWIP */

MX_LWIP_Init();



/* USER CODE BEGIN 5 */

/* Infinite loop */

for(;;)

{

    osDelay(1);

}

/* USER CODE END 5 */

}
因为使用了__weak,所以在我自己的代码中,只要重写一个void MainTask(void const * argument)就可以了。

4、如果在程序调试的过程中,CubeMX中的配置修改了,可以直接重新生成代码,不会影响之前的。
5、还是很希望STM32CubeMX能够在添更多的中间件,比如Modbus、CanOpen等常用的协议及开源代码。

大家可以聊聊自己在工作学习中使用STM32CubeMX及HAL库(LL库)的情况,技巧、心得,遇到的问题等等,一起交流进步。

stm1024 发表于 2018-11-5 08:54:00

一般都是先生成HAL代码,然后再修修改改,这样可能更方便一点。
不过总体上来说,HAL确实提升了开发的效率,省的不停滴查手册

waiman-156411 发表于 2018-11-5 10:36:19

我的方法类似你用的,也是用文件夹区分BSP,API,APP等,然后每一层用一个.h文件include。
接入HAL的,只是修改main.c和stm32f1xx_it.c 这两个文件。所以重新生成工程(或者换芯片),也不用修改自己的代码。
而且这样的分布,如果只是修改BSP里面的.c文件,只会重新编译BSP文件夹里面的不好影响到其他层。
这样的好处,就是提升编译速度。

一代睡神的崛起 发表于 2018-11-5 13:13:08

一如既往的喜欢标准库,也使用过HAL库但是编译起来太烧配置,因为使用得比较少也不好做过多的评论。听说HAL驱动集成得很好

bjx1234 发表于 2018-11-5 13:27:48

不怎么好用,而且能保证生成的驱动就一点问题没有吗?

maxtch 发表于 2018-11-5 13:56:10

标准库和 HAL 我都不用。开发起来代码复杂度和直接操作寄存器差不了多少,烧空间。所谓的跨平台,这种 HAL 因为没有别的厂家支持,也只不过是一种供应商锁定的方法罢了。

az158 发表于 2018-11-5 14:08:51

stm32cubemx,确实很诱人,我是在去年的时候了解到这个工具,开发起来很快捷。而且HAL库的风格不同芯片之间很类似,换芯片非常容易。在使用的时候,也是基本不去动它生成的代码。不过整体封装度太高。虽说省了开发是配置芯片的麻烦,可也同时提高了出问题后debug的难度,程序阅读难度提高(虽说LL比较轻量但是感觉官方对这个不是特别重视。。可能是我的错觉)。现在还处在观望阶段,会去学习,但是开发还是标准库(比较新的的芯片基本不用)。
使用技巧,没啥特别的,就是基本不去碰它生成的代码。留文件对接函数接口

奏奏奏 发表于 2018-11-5 15:02:28

一直在这个论坛里推stm32cubemx与HAL库,
其实我也想顺便推荐一下LL库,但是LL库目前没有在项目中使用,不敢误人子弟。

之前想用STM32F107VCT6的时候用TCP联网,看了教程也不会用,自己觉得可能用MCU做这些应用并不是太合适。
单纯的控制,GPIO,中断,CAN,I2C,定时器,PWM,串口,这些基本功能还是挺方便的:lol

maxtch 发表于 2018-11-5 15:15:10

至于 USB、网络这类复杂外设,网上可以找到不依赖 HAL 或标准库的独立支持库。而且这类库普遍体积都非常小。

yangjiaxu 发表于 2018-11-5 16:37:56

该说不说HAL十分方便移植,但是缺点就是不好优化啊,生成的下载文件 都好大
页: [1] 2
查看完整版本: 第三期:聊聊STM32CubeMX及HAL库的使用情况、技巧等