文章目录一、HAL命名规则1、模块名称PPP2、TypeDef3、函数名称4、MODE二、HAL通用命名规定1、外理中断和特性时钟配置的宏2、中断处理程序和回调函数3、HAL通用API4、HAL扩展API1、添加特定于部件号的功能2、添加模块特定功能3、添加新外设特定于属于给定系列的设备4、更新现有常用Api5、更新现有数据结构三、CubeMX与HAL库的对应关系1、在HAL库中每个外设都有两个关键的部分2、Exported分为四个部分一、HAL命名规则1、模块名称PPPPPP指的是外设的功能模式而不是外设本身。例如如果是USARTPPP可以是USART、IRDA、UART或SMARTCARD取决于外设模式。一个文件中使用的常量在该文件中定义。多个文件中使用的常量在头文件中定义。所有常量都使用大写字母编写除了外设驱动函数参数。2、TypeDeftypedef变量名应该以_TypeDef结尾。寄存器被视为常量。外设寄存器在PPP_TypeDef结构中声明。例如ADC_TypeDef。外设句柄结构被命名为PPP_HandleTypedef。例如DMA_HandleTypeDef。包含PPP外设特定配置参数的结构被命名为PPP_xxxxConfTypeDef。例如ADC_ChannelConfTypeDef。包含PPP外设初始化参数的结构被命名为PPP_InitTypeDef。例如ADC_InitTypeDef。3、函数名称外设功能名称以HAL为前缀然后是大写的相应外设首字母缩写后跟下划线每个单词的第一个字母大写。例如HAL UARTTransmit()。函数名中只允许一个下划线用于将外设首字母缩写与函数名的其余部分分开。根据PPP_InitTypeDef中指定的参数初始化PPP外设的函数被命名为HAL PPP_Init。例如HAL_TIM_Init()。将PPP外设寄存器重置为默认值的函数被命名为HAL_PPP_Delnit。例如HAL_TIM_Delnit ()。4、MODEMODE后缀指的是处理模式可以是轮询、中断或DMA。例如当DMA与本机资源一起使用时应调用该函数: HAL_PPP_Function_DMA()。二、HAL通用命名规定1、外理中断和特性时钟配置的宏NVIC和SYSTICK是ArmCortex核心特性。与这些特性相关的API位于stm32f1xx_hal _cortex.c文件中。当从寄存器中读取状态位或标志位时它由移位值组成取决于读取值的数量和它们的大小。在这种情况下,返回的状态宽度为32位。例如:STATUSXX|(YY16)或STATUSXX|(YY 8)|(YY 16)1(YY24)在使用HAL_PPP_Init()API之前PPP句柄是有效的。初始化函数在修改句柄字段之前执行检查。HAL_PPP_Init(PPP_HandleTypeDef);if(hpppNULL){returnHAL_ERROR;}下面定义的宏用于条件宏#defineABS(x)(((x)0)?(x):(-x))伪代码宏#define__HAL_LINKDMA(__HANDLE__,__PPP_DMA_FIELD_,__DMA_HANDLE_)\do{\(__HANDLE__)-__PPP_DMA_FIELD_(__DMA_HANDLE_);\(__DMA_HANDLE_).Parent(__HANDLE__);\}while(0)2、中断处理程序和回调函数除了API之外HAL外设驱动程序还包括:HAL_PPP_IRQHandler()外设中断处理程序应该从stm32f1xx_it.c中调用用户回调函数。用户回调函数被定义为空函数并带有“弱属性。它们必须在用户代码中定义。有三种类型的用户回调函数:外设系统级初始化/去初始化回调:HAL_PPP_Msplnit()和HAL_PPP_MspDelnit处理完成回调:HAL_PPP_ProcessCpltCallback。错误回调:HAL_PPP_ErrorCallback。3、HAL通用API通用API提供适用于所有STM32设备的常见通用功能。它们由四个API组成:初始化和去初始化函数:HAL_PPP_Init()HAL_PPP_Delnit()。IO操函数: HAL_PPP_Read(), HAL_PPP_Write(), HAL_PPP_Transmit(), HAL_PPP_Receive()。控制函数:HAL_PPP_Set(),HAL_PPP_Get()。状态和错误函数:HAL_PPP_GetState()HAL_PPP_GetError()。示例基于ADC外设4、HAL扩展API扩展API提供特定功能或覆盖特定系列或同一系列内特定零件号的修改后的APl。扩展模型由一个额外的文件组成即stm32f1xx_ha_ppp_ex.c其中包含所有特定功能和定义语句(stm32f1xx_hal_ppp_ex.h)给定零件号的。以下是基于ADC外设的示例:HAL_ADCEx_CalibrationStart();//此函数用于启动自动ADC校准。Hal驱动程序可以通过五种不同的方式处理特定的IP功能。1、添加特定于部件号的功能当需要特定于给定设备的新功能时新的Api将添加到stm32f1xx_hal_ppp_ex中。c扩展文件。它们被命名为HAL_PPPEx_Function()。2、添加模块特定功能在这种情况下API在扩展驱动程序C文件中添加并命名。3、添加新外设特定于属于给定系列的设备当需要仅在特定设备中可用的外设时将在stm32f1xx_hal_newppp中添加与此新外设模块对应的Api。c.但是在stm32lxx_hal_conf中选择包含此文件。h使用宏:#define HAL_NEWPPP_MODULE_ENABLED4、更新现有常用Api在这种情况下例程在stm32f1xx_hal_ppp_ex中使用相同的名称定义。c扩展文件而泛型API被定义为弱这样编译器就会被新定义的函数复盖原来的例程。5、更新现有数据结构特定设备部件号例如PPP_InitTypeDef的数据结构可以具有不同的字段。在这种情况 下数据结构在扩展头文件中定义并由特定部件号define语句分隔。Example:#ifdefined(STM32F100xB)typedefstruct{(…)}PPP_InitTypeDef;#endif/* STM32F100xB */三、CubeMX与HAL库的对应关系1、在HAL库中每个外设都有两个关键的部分Private私有的是HAL库内部自己调用的Exported对外的我们的应用程序中去调用。2、Exported分为四个部分types各种Struct结构体用于外设功能配置。对应了CubeMax软件的配置项constants上方各种Struct结构体中的成员的可以配置的选项macro宏定义相当于直接对寄存器操作。因为在某些时候调用api反而效率不高functionsAPI函数。我们对CubeMax的操作实际上就是与这些结构体、成员变量一一对应的。一个外设的相关结构体会被定义在一个总的结构体中。
HAL_通用规则
文章目录一、HAL命名规则1、模块名称PPP2、TypeDef3、函数名称4、MODE二、HAL通用命名规定1、外理中断和特性时钟配置的宏2、中断处理程序和回调函数3、HAL通用API4、HAL扩展API1、添加特定于部件号的功能2、添加模块特定功能3、添加新外设特定于属于给定系列的设备4、更新现有常用Api5、更新现有数据结构三、CubeMX与HAL库的对应关系1、在HAL库中每个外设都有两个关键的部分2、Exported分为四个部分一、HAL命名规则1、模块名称PPPPPP指的是外设的功能模式而不是外设本身。例如如果是USARTPPP可以是USART、IRDA、UART或SMARTCARD取决于外设模式。一个文件中使用的常量在该文件中定义。多个文件中使用的常量在头文件中定义。所有常量都使用大写字母编写除了外设驱动函数参数。2、TypeDeftypedef变量名应该以_TypeDef结尾。寄存器被视为常量。外设寄存器在PPP_TypeDef结构中声明。例如ADC_TypeDef。外设句柄结构被命名为PPP_HandleTypedef。例如DMA_HandleTypeDef。包含PPP外设特定配置参数的结构被命名为PPP_xxxxConfTypeDef。例如ADC_ChannelConfTypeDef。包含PPP外设初始化参数的结构被命名为PPP_InitTypeDef。例如ADC_InitTypeDef。3、函数名称外设功能名称以HAL为前缀然后是大写的相应外设首字母缩写后跟下划线每个单词的第一个字母大写。例如HAL UARTTransmit()。函数名中只允许一个下划线用于将外设首字母缩写与函数名的其余部分分开。根据PPP_InitTypeDef中指定的参数初始化PPP外设的函数被命名为HAL PPP_Init。例如HAL_TIM_Init()。将PPP外设寄存器重置为默认值的函数被命名为HAL_PPP_Delnit。例如HAL_TIM_Delnit ()。4、MODEMODE后缀指的是处理模式可以是轮询、中断或DMA。例如当DMA与本机资源一起使用时应调用该函数: HAL_PPP_Function_DMA()。二、HAL通用命名规定1、外理中断和特性时钟配置的宏NVIC和SYSTICK是ArmCortex核心特性。与这些特性相关的API位于stm32f1xx_hal _cortex.c文件中。当从寄存器中读取状态位或标志位时它由移位值组成取决于读取值的数量和它们的大小。在这种情况下,返回的状态宽度为32位。例如:STATUSXX|(YY16)或STATUSXX|(YY 8)|(YY 16)1(YY24)在使用HAL_PPP_Init()API之前PPP句柄是有效的。初始化函数在修改句柄字段之前执行检查。HAL_PPP_Init(PPP_HandleTypeDef);if(hpppNULL){returnHAL_ERROR;}下面定义的宏用于条件宏#defineABS(x)(((x)0)?(x):(-x))伪代码宏#define__HAL_LINKDMA(__HANDLE__,__PPP_DMA_FIELD_,__DMA_HANDLE_)\do{\(__HANDLE__)-__PPP_DMA_FIELD_(__DMA_HANDLE_);\(__DMA_HANDLE_).Parent(__HANDLE__);\}while(0)2、中断处理程序和回调函数除了API之外HAL外设驱动程序还包括:HAL_PPP_IRQHandler()外设中断处理程序应该从stm32f1xx_it.c中调用用户回调函数。用户回调函数被定义为空函数并带有“弱属性。它们必须在用户代码中定义。有三种类型的用户回调函数:外设系统级初始化/去初始化回调:HAL_PPP_Msplnit()和HAL_PPP_MspDelnit处理完成回调:HAL_PPP_ProcessCpltCallback。错误回调:HAL_PPP_ErrorCallback。3、HAL通用API通用API提供适用于所有STM32设备的常见通用功能。它们由四个API组成:初始化和去初始化函数:HAL_PPP_Init()HAL_PPP_Delnit()。IO操函数: HAL_PPP_Read(), HAL_PPP_Write(), HAL_PPP_Transmit(), HAL_PPP_Receive()。控制函数:HAL_PPP_Set(),HAL_PPP_Get()。状态和错误函数:HAL_PPP_GetState()HAL_PPP_GetError()。示例基于ADC外设4、HAL扩展API扩展API提供特定功能或覆盖特定系列或同一系列内特定零件号的修改后的APl。扩展模型由一个额外的文件组成即stm32f1xx_ha_ppp_ex.c其中包含所有特定功能和定义语句(stm32f1xx_hal_ppp_ex.h)给定零件号的。以下是基于ADC外设的示例:HAL_ADCEx_CalibrationStart();//此函数用于启动自动ADC校准。Hal驱动程序可以通过五种不同的方式处理特定的IP功能。1、添加特定于部件号的功能当需要特定于给定设备的新功能时新的Api将添加到stm32f1xx_hal_ppp_ex中。c扩展文件。它们被命名为HAL_PPPEx_Function()。2、添加模块特定功能在这种情况下API在扩展驱动程序C文件中添加并命名。3、添加新外设特定于属于给定系列的设备当需要仅在特定设备中可用的外设时将在stm32f1xx_hal_newppp中添加与此新外设模块对应的Api。c.但是在stm32lxx_hal_conf中选择包含此文件。h使用宏:#define HAL_NEWPPP_MODULE_ENABLED4、更新现有常用Api在这种情况下例程在stm32f1xx_hal_ppp_ex中使用相同的名称定义。c扩展文件而泛型API被定义为弱这样编译器就会被新定义的函数复盖原来的例程。5、更新现有数据结构特定设备部件号例如PPP_InitTypeDef的数据结构可以具有不同的字段。在这种情况 下数据结构在扩展头文件中定义并由特定部件号define语句分隔。Example:#ifdefined(STM32F100xB)typedefstruct{(…)}PPP_InitTypeDef;#endif/* STM32F100xB */三、CubeMX与HAL库的对应关系1、在HAL库中每个外设都有两个关键的部分Private私有的是HAL库内部自己调用的Exported对外的我们的应用程序中去调用。2、Exported分为四个部分types各种Struct结构体用于外设功能配置。对应了CubeMax软件的配置项constants上方各种Struct结构体中的成员的可以配置的选项macro宏定义相当于直接对寄存器操作。因为在某些时候调用api反而效率不高functionsAPI函数。我们对CubeMax的操作实际上就是与这些结构体、成员变量一一对应的。一个外设的相关结构体会被定义在一个总的结构体中。