初始hal库

本文介绍了在Linux环境下使用gcc+CubeMX+vscode+makefile开发STM32项目,重点探讨了HAL库的移植性和中断处理机制。通过MSP回调函数实现移植性,中断处理采用通用中断函数HAL_UART_IRQHandler,并详细阐述了串口接收中断的处理流程。此外,还对比了新旧CAN库在初始化和数据帧管理上的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初试stm32hal库

本人大学生一枚,参加了RM的比赛,以前在Windows下开发stm32用于比赛,由于换了Linux系统,所以最近一直捣鼓怎么在Linux下开发,最后还是决定使用Linux下通用的方法:gcc+CubeMX+vscode+makefile开发,其中gcc用来编译,CubeMx用来生成工程,vscode用来编写代码。由于CubeMX生成的工程是基于hal库的,所以系统研究了hal的构成以及最新的hal库的变化。(由于刚入门,所以有不对或者不恰当的地方还烦请大佬帮忙)

首先根据官方的说法,hal的移植性很好,所以最先就是了解为什么移植性好,首先就是hal库的整体配置思路,ST官方将与MCU底层有关的代码以及与MCU无关的代码分开实现,实现的方法就是通过MSP回调函数函数,比如在配置串口的时候,前边的基本配置与标准库基本一样,通过一个结构体配置相关的参数,最后在Init函数中通过传入句柄的地址来完成初始化配置,但是在hal库中,为了实现可移植,在Init函数最后,会自动调用一个MSPInit回调函数,这个函数在官方的库中已经有了定义(官方给的这个函数内部是空的),但是这个函数前有_wake修饰,意思是“弱”修饰。只要用户在任意文件中再一次定义这个函数(也就是定义一个同名函数),程序在执行的时候就会执行重新定义以后的函数(有点类似面对对象的语言中的重写)。我们一般将与MCU有关的底层的代码写在MSP函数中,也就是GPIO的配置,这样在进行移植程序的时候只要修改MSP函数中的东西就可以,所

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值