STM32HAL库开发常用函数

本文详细介绍了GPIO的初始化、中断回调函数、外部中断服务函数,以及GPIO读写和电平翻转功能的应用,特别强调了中断处理中的注意事项。

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

一:GPIO部分

1.GPIO初始化函数

HAL_GPIO_DeInit(GPIOx,GPIO_PIN_X);
//功能:这个函数的主要功能是将我们在引脚初始化之后的引脚恢复成默认的状态,即各个寄存器复位时的值

2.中断回调函数

HAL_GPIO_EXTI_Callback(GPIO_PIN_X);
//功能:这个函数是中断回调函数,可以理解为中断函数具体要响应的动作
//注意:禁⽌使⽤HAL_Delay在中断中进⾏延时,会导致程序卡死。因HAL_Delay也是利⽤中断进⾏延时,
//但是中断等级为最低级,会导致进不去中断,读取不到时间,导致卡死。可以⾃⼰编写延时程序。
//或者修改滴答定时器的中断优先级,⾄少⽐所⽤的中断⾼。

3.外部中断回调函数

HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_PIN_X);
//功能:这个函数是外部中断服务函数,⽤来响应外部中断的触发,函数实体⾥⾯有两个功能,
//⾸先清楚中断标志,调⽤HAL_GPIO_EXTI_Callback函数进⾏具体要处理的事情

4.GPIO读函数

HAL_GPIO_ReadPin(GPIOX,GPIO_PIN_X);
//功能:检测这个引脚当前状态值,函数返回值为0或1。

5.GPIO写函数

HAL_GPIO_WritePin(GPIOX,GPIO_PIN_X,GPIO_PIN_RESET)//设置为低电平
//功能:这个函数从字⾯意思来看就是给某个引脚写0或1,但是不要理解成,写1就是使能之类的意思,
//有些寄存器写1是擦除的意思,这⼀点要谨记。

6.GPIO电平翻转函数

HAL_GPIO_TogglePin(GPIOX,GPIO_PIN_X);
//这个函数⽤来翻转某个引脚的电平状态,我⽤的最多的场合是LED灯的翻转,也就是LED闪烁。

### HAL回调函数的使用方法与示例详解 #### 1. 基本概念 HAL中的回调机制依赖于C语言的**弱符号(Weak Symbol)**特性。通过`__weak`关键字定义的回调函数具有默认实现,通常为空操作[^1]。这种设计使得开发者可以在应用程序中轻松覆盖这些默认实现,从而定制化响应硬件事件的行为。 #### 2. 回调函数命名规则 HAL中的回调函数遵循严格的命名约定,其通用格式为: `HAL_PPP_CallbackType(Callback)` 其中: - `PPP`: 表示具体的外设名称,例如`USART`, `SPI`, 或者`TIM`等。 - `CallbackType`: 描述事件类型,常见的有`TxCplt` (传输完成), `RxCplt` (接收完成), 和`Error` (错误处理) 等[^2]。 #### 3. 实现步骤 为了在项目中有效利用HAL的回调功能,需按照以下方式操作: ##### 定义并重写回调函数 假设需要对外设`USART`的发送完成事件进行自定义处理,则可以重新定义`HAL_USART_TxCpltCallback()` 函数。以下是具体代码示例: ```c // 用户自定义的回调函数实现 void HAL_USART_TxCpltCallback(USART_HandleTypeDef *husart) { // 自定义逻辑,比如打印日志或者启动其他任务 printf("USART transmission completed.\n"); } ``` 在此例子中,每当`USART`模块完成了数据帧的发送动作后,该回调会被自动触发执行。 ##### 配置中断使能 除了编写回调函数之外,还需要确保对应外设的相关中断已被启用。以`USART`为例,在初始化结构体配置阶段应设置如下参数: ```c UART_HandleTypeDef huart; huart.Instance = USART1; huart.Init.BaudRate = 9600; huart.Init.WordLength = UART_WORDLENGTH_8B; huart.Init.StopBits = UART_STOPBITS_1; huart.Init.Parity = UART_PARITY_NONE; if (HAL_UART_Init(&huart) != HAL_OK){ Error_Handler(); } // 启用TXE(Transmit Data Register Empty)中断 __HAL_UART_ENABLE_IT(&huart, UART_IT_TXE); ``` 以上片段展示了如何正确开启串口发送过程中断以便激活相应的回调机制[^4]。 #### 4. 注意事项 - **不可更改原生声明**: 虽然能够替换掉预设版本,但是切勿直接修改位于官方发行版内的`.h/.c`文件里的任何部分。 - **线程安全考量**: 如果目标平台支持多任务调度环境,请务必确认所编写的业务流程不会引发竞态条件等问题。 --- ### 示例总结 综上所述,借助STMicroelectronics提供的HAL抽象层框架,工程师们可以通过简单地覆载那些标记为“弱”的成员来扩展基础驱动程序的功能集。这不仅简化了开发过程还增强了系统的灵活性和可维护性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值