STM32F1 HAL库实战开发——【实验 4 驱动继电器实验】

2 篇文章 0 订阅
2 篇文章 1 订阅

STM32F1 HAL库实战开发


提示:这里是 STM32F1 HAL 库实战开发的实验案例之一


提示:以下是本篇文章正文内容,下面案例可供参考

GPIO 输出

一、继电器引脚电平输出

继电器的控制是通过 ULN2003A 芯片控制的,Double Pi 开发板集成了一个继电器, 给 ULN2003A 低电平,ULN2003A 输出高电平,给 ULN2003A 高电平,ULN2003A输出低电平,所以当 STM32 引脚输出低电平时,ULN2003A 应该是高电平,电路是将ULN2003A 接入了 5V 电源,那么 ULN2003A 应该输出 5V 到继电器,让继电器开始工作。


二、GPIO 外设结构体

HAL 库为每个外设(GPIO 除外)创建了两个结构体,一个是外设初始化结构体,一个是外设句柄结构体,其中 GPIO 没有句柄结构体。这两个结构体都是定义在外设对应的驱动头文件中,比如 stm32f1xx_hal_usart.h 文件。初始化结构一般是做为句柄结构体的一个成员通过指针被引用,而句柄结构体则在外设HAL 函数库实现被使用,比如在 stm32f1xx_hal_usart.c 文件。这两个结构体内容几乎包括了外设的所有可选属性,理解这两个结构体内容对我们编程非常有帮助。
GPIO 外设只有一个初始化结构体,没有句柄结构体,所以 GPIO 初始化结构体直接在stm32f1xx_hal_gpio.c文件中与相关初始化函数配合使用完成GPIO 外设初始化配置。HAL 库 GPIO 结构体如图6:
在这里插入图片描述
Pin:引脚编号选择,一个 GPIO 外设有 16 个引脚可选,这里根据电路原理图选择目标引脚,参数可选:GPIO_PIN_0、…、GPIO_PIN_15 和 GPIO_PIN_ALL。很多时候我们可以使用或运算选择多个:GPIO_PIN_0|GPIO_PIN_4。
Mode:引脚工作模式选择,前面内容介绍了引脚有八种基本工作模式,选择结合到具体的外设可以有 13 种模式可选,GPIO 引脚工作模式选择如图 7:
在这里插入图片描述
Pull:上拉或者下拉选择,用于输入模式,可选:GPIO_NOPULL:不上下来;GPIO_PULLUP:使能上拉;GPIO_PULLDOWN:使能下拉。
Speed:引脚最大输出速度,可选:GPIO_SPEED_FREQ_LOW:低速(2MHz);中速(10MHz);高速(50MHz)。


三、GPIO 编程流程分析

(1) 使能 GPIO 端口时钟;

	__HAL_RCC_GPIOB_CLK_ENABLE();

(2)初始化 GPIO 引脚,即为 GPIO 初始化结构体成员赋值,并调用HAL_GPIO_Init 函数完成初始化配置;

GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

(3)根据项目要求控制引脚输出高低电平。

HAL 库对引脚操作的函数有:
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)*@简介 读取指定的输入端口引脚。
*@参数 GPIOx:其中 x 可以是(A-G,取决于使用的设备)来选择 GPIO 外围设备
*@参数 GPIO_Pin:指定要读取的端口位。
*此参数可以是 GPIO_PIN_x,其中 x 可以是(0..15)。
*@返回值 输入端口引脚值。
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin,
GPIO_PinState PinState);
*@简介 设置或清除所选数据端口位。
*@注意:此函数使用 GPIOx_BSRR 寄存器允许原子读取/修改,这样,在读取和修
改访问之间就不会出现 IRQ 风险。
*读取和修改访问。
*@参数 GPIOx:其中 x 可以是(A-G,取决于使用的设备)来选择 GPIO 外围设备
*@参数 GPIO_Pin:指定要写入的端口位。
*此参数可以是 gpio_pin_x 中的一个,其中 x 可以是(0..15)。
*@参数 pinstate:指定要写入所选位的值。
*此参数可以是 gpio\u pinstate 枚举值之一:
*@arg GPIO_PIN_RESET:清除端口引脚
*@arg GPIO_PIN_SET:设置端口引脚
*@返回值 无
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)*@简介 反转指定的 GPIO 引脚状态
*@参数 GPIOx:其中 x 可以是(A-G,取决于使用的设备)来选择 GPIO 外围设备
*@参数 GPIO_Pin:指定要切换的管脚。
*@返回值 无

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有角的独角仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值