你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32U083测评】GPIO使用点亮LED和按键操作

[复制链接]
meiyao 发布时间:2024-4-30 11:30

STM32U083的GPIO(General Purpose Input/Output,通用输入/输出)端口常被用于与外部设备,LED灯和按键,进行交互。 以下是一个关于如何使用STM32U083的GPIO来点亮LED灯以及读取按键状态的简单测评: 一、GPIO点亮LED 在STM32CubeMX或STM32CubeIDE中初始化GPIO端口为输出模式。 在主循环中,通过调用HAL库函数HAL_GPIO_WritePin来控制GPIO端口的电平,从而点亮或熄灭LED。

示例代码片段:

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);  // 点亮LED  

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // 熄灭LED

二、读取按键状态 在STM32CubeMX或STM32CubeIDE中初始化GPIO端口为输入模式,并启用上拉电阻。 在主循环中,通过调用HAL库函数HAL_GPIO_ReadPin来读取GPIO端口的电平,从而判断按键的状态。

示例代码片段:

if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_RESET) {  

    // 按键被按下,执行相应操作  

} else {  

    // 按键未被按下  

}

通过以上步骤,你可以轻松地使用STM32U083的GPIO来点亮LED灯和读取按键状态。这些功能在嵌入式系统开发中非常常见,是学习和实践STM32系列微控制器的基本技能之一。 上面是计划,下面正式开始: 原理图:

按键IO口。

LED连接IO口。

MCU引脚定义。 GPIO初始化: 上面是GPIO初始化,有按键与LED。 复制

define User_button_Pin GPIO_PIN_13

define User_button_GPIO_Port GPIOC

define User_LED_Pin GPIO_PIN_5

define User_LED_GPIO_Port GPIOA

宏定义IO口。 <span style="color: rgba(0, 0, 0, 0.85); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", "Source Han Sans CN", sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 14px; white-space: pre;">/**  

  • @brief 读取指定GPIO端口的引脚状态

*  

  • @param GPIOx GPIO端口,例如GPIOA, GPIOB等
  • @param GPIO_Pin 要读取的引脚,例如GPIO_PIN_0, GPIO_PIN_1等
  • @return GPIO_PinState 返回引脚状态,GPIO_PIN_SET表示高电平,GPIO_PIN_RESET表示低电平

*/  

GPIO_PinState HAL_GPIO_ReadPin(const GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)  

{  

    GPIO_PinState bitstatus;  

  

    / 检查参数是否有效 /  

    assert_param(IS_GPIO_PIN(GPIO_Pin));  

  

    / 读取IDR寄存器中对应引脚的值,判断引脚状态 /  

    if ((GPIOx->IDR & GPIO_Pin) != 0x00u)  

    {  

        bitstatus = GPIO_PIN_SET; / 如果IDR寄存器中对应引脚位置为1,则返回高电平状态 /  

    }  

    else  

    {  

        bitstatus = GPIO_PIN_RESET; / 如果IDR寄存器中对应引脚位置为0,则返回低电平状态 /  

    }  

  

    return bitstatus;  

}  

  

/**  

  • @brief 切换指定GPIO端口的引脚状态

*  

  • @param GPIOx GPIO端口,例如GPIOA, GPIOB等
  • @param GPIO_Pin 要切换的引脚,例如GPIO_PIN_0, GPIO_PIN_1等

*/  

void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)  

{  

    uint32_t odr;  

  

    / 检查参数是否有效 /  

    assert_param(IS_GPIO_PIN(GPIO_Pin));  

  

    / 读取ODR寄存器中当前引脚的值 /  

    odr = GPIOx->ODR;  

  

    / 使用BSRR寄存器来切换引脚状态,将原本低电平的引脚设置为高电平,原本高电平的引脚设置为低电平 /  

    GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);  

}</span> 按键: 复制   if (HAL_GPIO_ReadPin(GPIOC, User_button_Pin) == GPIO_PIN_RESET)  

        {  

            // 按键被按下,执行相应操作  

            // 例如:切换LED状态  

                HAL_GPIO_TogglePin(GPIOA,User_LED_Pin);

                HAL_Delay(1000);

        } LED闪烁:   HAL_GPIO_TogglePin(GPIOA,User_LED_Pin);

                HAL_Delay(1000);

视频连接:

https://www.bilibili.com/video/BV1tw4m1y7rE/?t=15.129469&spm_id_from=333.1350.jump_directly

1 收藏 评论0 发布时间:2024-4-30 11:30

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版