我想知道HAL驱动程序是如何实现的,更一般地说,CMSIS是如何参与基于ARM的微控制器(特别是STM32微控制器,还有Cypress PSoc)的外围驱动程序的。
问题是:由于HAL驱动器为微控制器的外围设备提供了高级接口,因此它们的实现达到了裸机级别,或者更确切地说,最低层是用CMSIS封装实现的,并且HAL从它们开始开发。
任何答案都可以接受,因为我试图理解这两种类型的“库”是如何联系在一起的。
o2rvlv0m1#
关于HAL驱动程序(例如对于STM32)与CMSIS交互,它们使用CMSIS-CORE作为“较低层”来接口到硬件。CMSIS-CORE提供了诸如内存布局、中断编号、外设基地址、外设寄存器相对于基地址的偏移量等内容的定义,甚至还提供了所有寄存器位的定义。这以分层的方式完成,例如(对于STM32F030)您可能有一个Cortex-M0 CPU的头文件,一个用于STM32 F0系列,最后一个用于确切的STM32 F030芯片。但是CMSIS-CORE不提供任何实际的功能代码。只是定义。头文件中定义了一些小的内联函数,用于启用和禁用中断或重置MCU。但是没有“驱动程序”代码。STM32 HAL提供驱动程序代码来实际控制这些外设,并使用CMSIS-CORE中的定义来实现。所以要回答这个问题:HAL不直接访问“裸机”,它使用CMSIS-CORE。有way more to CMSIS而不仅仅是CMSIS-CORE,但我不知道它们是否与您关于HAL的问题有关。
STM32F030
1条答案
按热度按时间o2rvlv0m1#
关于HAL驱动程序(例如对于STM32)与CMSIS交互,它们使用CMSIS-CORE作为“较低层”来接口到硬件。
CMSIS-CORE提供了诸如内存布局、中断编号、外设基地址、外设寄存器相对于基地址的偏移量等内容的定义,甚至还提供了所有寄存器位的定义。
这以分层的方式完成,例如(对于
STM32F030
)您可能有一个Cortex-M0 CPU的头文件,一个用于STM32 F0系列,最后一个用于确切的STM32 F030芯片。但是CMSIS-CORE不提供任何实际的功能代码。只是定义。头文件中定义了一些小的内联函数,用于启用和禁用中断或重置MCU。但是没有“驱动程序”代码。
STM32 HAL提供驱动程序代码来实际控制这些外设,并使用CMSIS-CORE中的定义来实现。所以要回答这个问题:HAL不直接访问“裸机”,它使用CMSIS-CORE。
有way more to CMSIS而不仅仅是CMSIS-CORE,但我不知道它们是否与您关于HAL的问题有关。