stm32_HAL库中__weak修饰符

发布者:RainbowJoy最新更新时间:2019-08-05 来源: eefocus关键字:stm32  HAL库  weak修饰符 手机看文章 扫描二维码
随时随地手机看文章

前言,


在 HAL 库中,很多回调函数前面使用__weak 修饰符。


weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称这个函数为“弱函数”。


加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,

那么编译器就会执行__weak 声明的函数,并且编译器不会报错。


举个例子:


我们打开工程模板,找到并打开文件stm32f4xx_hal.c 文件,里面定义了一个函数 HAL_MspInit,定义如下:


__weak void HAL_MspInit(void)

{

__IO uint32_t tmpreg = 0x00;

UNUSED(tmpreg);

}

可以看出,HAL_MspInit 函数前面有加修饰符__weak。同时,在该文件的前面有定义函数HAL_Init,并且 HAL_Init 函数中调用了函数 HAL_MspInit。

HAL_StatusTypeDef HAL_Init(void)

{

…//此处省略部分代码

HAL_MspInit();

return HAL_OK;

}

如果我们没有在工程中其他地方重新定义 HAL_MspInit()函数,那么 HAL_Init 初始化函数执行的时候,会默认执行 stm32f4xx_hal.c 文件中定义的 HAL_MspInit 函数,而这个函数没有任何控制逻辑。

如果用户在工程中重新定义函数 HAL_MspInit,那么调用 HAL_Init 之后,会执行用户自己定义的 HAL_MspInit 函数而不会执行 stm32f4xx_hal.c 默认定义的函数。也就是说,表面上我们看到函数 HAL_MspInit 被定义了两次,但是因为有一次定义是弱函数,使用了__weak修饰符,所以编译器不会报错。


 总结:


__weak 在回调函数的时候经常用到。这样的好处是,系统默认定义了一个空的回调函数,保证编译器不会报错。同时,如果用户自己要定义用户回调函数,那么只需要重新定义即可,不需要考虑函数重复定义的问题,使用非常方便,在 HAL 库中__weak 关键字被广泛使用。

关键字:stm32  HAL库  weak修饰符 引用地址:stm32_HAL库中__weak修饰符

上一篇:HAL库-STM32F4 HAL_GPIO_Init()
下一篇:STM32固件升级详解(BootLoader)

推荐阅读最新更新时间:2024-11-07 13:15

基于STM32的电容触摸按键的原理解析
原理: R:外接电容充放电电阻。 Cs:TPAD和PCB间的杂散电容。 Cx:手指按下时,手指和TPAD之间的电容。 开关:电容放电开关,由STM32IO口代替。 没有按下的时候,充电时间为T1(default)。按下TPAD,电容变大,所以充电时间为T2。我们可以通过检测充放电时间,来判断是否按下。如果T2-T1大于某个值,就可以判断有按键按下。 检测电容触摸按键过程: ①TPAD引脚设置为推挽输出,输出0,实现电容放电到0。 ②TPAD引脚设置为浮空输入(IO复位后的状态),电容开始充电。 ③同时开启TPAD引脚的输入捕获开始捕获。 ④等待充电完成(充电到底Vx,检测到上升沿)。
[单片机]
基于<font color='red'>STM32</font>的电容触摸按键的原理解析
用汇编语言实现STM32的LED和USART
; AREA RESET, DATA, READONLY DCD 0x20000000 + 1024 ;0 DCD UserMain ;1 DCD 0 ;NMI 2 DCD 0 ;HardFault 3 DCD 0 ;MemManage 4 DCD 0 ; 5 DCD 0 ; 6 DCD 0 ; 7 DCD 0 ; 8 DCD 0 ; 9 DCD 0 ; 10 DCD 0 ; 11 DCD 0 ; 12 DCD 0 ; 13 DCD 0 ; 14 DCD SysTick_Handler ; 15 HelloString DCB Hello Wordn HelloEnd HexTable DC
[单片机]
STM32外部中断处理流程及注意事项
STM32的外部中断是以组为单位,例如PA0、PB0、PC0、PD0、PE0、PF0、PG0共用外部中断0,我们再使用时从中选择一个座位外部中断0即可,其他中断类推。 外部中断包括EXTI0、EXTI1、EXTI2、EXTI3、EXTI4、EXTI9_5、EXTI15_10,Pin0--Pin4有各自独立的中断, Pin5--Pin9共用一个中断,Pin10--Pin15共用一个中断。 中断号 Pin脚 EXTI0 Pin0 EXTI1 Pin1 EXTI2 Pin2 EXTI3 Pin3 EXTI4 Pin4 EXTI9_5 Pin5--Pin9 EXTI15_10 Pin10--Pin15 外部中
[单片机]
STM32微控制器助力美国August公司开发智能门锁系统
中国,2014年11月5日 ——横跨多重电子应用领域、全球领先的半导体供应商、世界领先的物联网 (IoT, Internet of Things) 芯片供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)宣布其 STM32 微控制器被美国 August 公司采用,用于设计新一代智能门锁(Smart Lock) 系统。 STM32嵌入式微控制器的高性能和高能效让 August 智能门锁用户可通过智能手机或电脑直接控制家中门锁,无需实体钥匙。除提供32位的处理性能和安全信号处理功能外,STM32微控制器的实时响应和能效也非常出色。 意法半导体美洲区微控制器市场应用副总裁
[物联网]
STM32基于固件库学习笔记(12)LCD5110显示
前不久使用cc2530写过LCD5110作显示,最近学习stm32就简单的写了,用stm32对lcd5110的初始化及显示功能。 还是和之前写了两种显示的方法: 万能显示(行数要/8,详细见后的数据手册) /* 这个函数可以自己设定显示的内容的大小,需用取模软件得到待显示的数据; 在取模时需注意取模方式,我这里所有的取模都设置是(纵向取模、字节倒序)方式 */ // 设置 X,Y起点; 行(/8)、列大小 数组地址名 void LCD_display(unsigned char X,unsigned char Y,unsigned char row,unsigned char col,unsigned char
[单片机]
<font color='red'>STM32</font>基于固件库学习笔记(12)LCD5110显示
STM32 外部中断的使用
例程名称:外部中断实验 作 者:tkzsld(sky) 实验硬件:火牛开发板 硬件连接:指示灯连接 PD9 按钮连接 PA8 功能描述:本例程实现外部中断的输入试验, 按键次数 1:PD8 PD9 ON 2:PD8 PD9 OFF 3:PD10 PD11 ON 4:PD10 PD11 OFF 5:PD8-11 ON 6:PD8-11 OFF 7: PB5 BEEP ON 8 :BEEP OFF *********************************************************
[单片机]
IAR在STM32的配置方法
1. 建立工程项目文件 新建一个文件夹来存放整个工程项目,在该项目文件夹下建立几个子文件夹存放不同类别的文件: i.将官方模板中的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h和空白main.c文件复制到该项目文件夹下; ii. Obj-存放工程文件,将官方模板中的cortexm3_macro.s、lnkarm_flash.xcl、lnkarm_ram.xcl和stm32f10x_vector.c文件复制到该文件夹下。 iii.library-存放STM32 FWLib文件,将官方提供的固件库library复制到该文件夹下。 2. 在IAR中建立工程 打开IAR,在Project菜
[单片机]
IAR在<font color='red'>STM32</font>的配置方法
UCGUI在STM32平台移植经验(无操作系统)
ucgui 移植的前提是已经具备了LCD驱动函数,已经能够实现点亮LCD屏幕,并实现画点以及获取指定点颜色值的功能。一般的显示屏供应商会提供对应的驱动函数。主要有初始化函数void LCD_Init(),屏幕画点函数 Void LCD_DrawPoint(u16 x,u16 y,u16 color),以及获取指定点颜色值的U16 LCD_ReadPoint(u16 x,u16 y)函数。移植的关键在于把这三个函数与ucgui提供的接口函数匹配。 打开GUILCDDriver中的LCDDummy.c文件,找到int LCD_L0_Init(void)初始化函数,LCD_L0_SetPixelIndex(int x, int y,
[单片机]
UCGUI在<font color='red'>STM32</font>平台移植经验(无操作系统)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved