Appearance
初识HAL库
CMSIS微控制器软件接口标准
Crotex Microcontroller Software Interface Standard
ARM和与其合作的芯片厂商共同制作的标准
到了用户手上就是一个CMSIS的包
ST为了方便开发提供了三种库
- 标准库
- HAL库(硬件抽象层)
- LL库(底层库)
STM32Cube固件包
ST公司针对上面的协议做出来的属于自己的固件包
获取
stm32Cube - 工具与软件 - Search STMicrocontrollers
主要使用的是驱动源码, 中间文件, 以及开发板示例
Device: 使用的是arm文件夹下面的文件, 前两个文件在include文件夹里面, 第三个文件在source文件夹里面, 而启动文件在source里面的arm下面
Include: 对应的是AC5编译器, AC6编译器, 两个版本共用, 编译器版本, 对应内核的, 以及内存保护的头文件
HAL库框架结构
文件夹结构
inc和src里面的Legacy文件夹里面的文件是补充的文件
ex文件一般是用来区别不同芯片的同一个驱动的不同单独设置的
怎么使用HAL库
基于CMSIS应用程序文件描述
用户文件是参考了官方的例程
官方会把所有的MSP_Init函数放到同一个文件里面
修改config文件
- 选择使用到的驱动, 不需要的注释掉
- 对不使用的文件不进行移植
定义晶振的频率
stm32f1xx_hal.c文件
c
HAL_StatusTypeDef HAL_Init(void)
{
/* Configure Flash prefetch */
#if (PREFETCH_ENABLE != 0)
#if defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || \
defined(STM32F102x6) || defined(STM32F102xB) || \
defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || \
defined(STM32F105xC) || defined(STM32F107xC)
/* Prefetch buffer is not available on value line devices */
__HAL_FLASH_PREFETCH_BUFFER_ENABLE();
#endif
#endif /* PREFETCH_ENABLE */
/* Set Interrupt Group Priority */
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2); //设置优先级分组2
/* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */
HAL_InitTick(TICK_INT_PRIORITY);
/* Init the low level hardware */
HAL_MspInit();
/* Return function status */
return HAL_OK;
}
f1里面有一个预取缓冲区, 有两个64位组成的, 在复位以后会打开, 加快程序的运行
之后设置中断优先级的分组
使能系统的滴答定时器, 设置为1Ms, 作为系统的时钟源
使用注意
出现问题的时候需要去检查寄存器的操作
尽量不要通过修改库的源码实现功能
HAL库有可能出现错误
有的API函数效率过低, 可以通过直接操作寄存器进行操作