[STM32U0] 【STM32U083测评】GPIO点亮LED,按键

[复制链接]
2189|7
 楼主| meiyaolei 发表于 2024-4-25 23:47 | 显示全部楼层 |阅读模式
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系列微控制器的基本技能之一。
上面是计划,下面正式开始:
原理图:
97927662a7872731b3.png
按键IO口。
47983662a789375621.png
LED连接IO口。
58191662a78c483438.png
MCU引脚定义。
代码:
  1. GPIO初始化:
上面是GPIO初始化,有按键与LED。
  1. #define User_button_Pin GPIO_PIN_13
  2. #define User_button_GPIO_Port GPIOC

  3. #define User_LED_Pin GPIO_PIN_5
  4. #define User_LED_GPIO_Port GPIOA
宏定义IO口。
  1. <span style="color: rgba(0, 0, 0, 0.85); font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Ubuntu, &quot;Helvetica Neue&quot;, Helvetica, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans CN&quot;, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;; font-size: 14px; white-space: pre;">/**  
  2. * [url=home.php?mod=space&uid=247401]@brief[/url] 读取指定GPIO端口的引脚状态  
  3. *  
  4. * @param GPIOx GPIO端口,例如GPIOA, GPIOB等  
  5. * @param GPIO_Pin 要读取的引脚,例如GPIO_PIN_0, GPIO_PIN_1等  
  6. * [url=home.php?mod=space&uid=266161]@return[/url] GPIO_PinState 返回引脚状态,GPIO_PIN_SET表示高电平,GPIO_PIN_RESET表示低电平  
  7. */  
  8. GPIO_PinState HAL_GPIO_ReadPin(const GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)  
  9. {  
  10.     GPIO_PinState bitstatus;  
  11.   
  12.     /* 检查参数是否有效 */  
  13.     assert_param(IS_GPIO_PIN(GPIO_Pin));  
  14.   
  15.     /* 读取IDR寄存器中对应引脚的值,判断引脚状态 */  
  16.     if ((GPIOx->IDR & GPIO_Pin) != 0x00u)  
  17.     {  
  18.         bitstatus = GPIO_PIN_SET; /* 如果IDR寄存器中对应引脚位置为1,则返回高电平状态 */  
  19.     }  
  20.     else  
  21.     {  
  22.         bitstatus = GPIO_PIN_RESET; /* 如果IDR寄存器中对应引脚位置为0,则返回低电平状态 */  
  23.     }  
  24.   
  25.     return bitstatus;  
  26. }  
  27.   
  28. /**  
  29. * @brief 切换指定GPIO端口的引脚状态  
  30. *  
  31. * @param GPIOx GPIO端口,例如GPIOA, GPIOB等  
  32. * @param GPIO_Pin 要切换的引脚,例如GPIO_PIN_0, GPIO_PIN_1等  
  33. */  
  34. void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)  
  35. {  
  36.     uint32_t odr;  
  37.   
  38.     /* 检查参数是否有效 */  
  39.     assert_param(IS_GPIO_PIN(GPIO_Pin));  
  40.   
  41.     /* 读取ODR寄存器中当前引脚的值 */  
  42.     odr = GPIOx->ODR;  
  43.   
  44.     /* 使用BSRR寄存器来切换引脚状态,将原本低电平的引脚设置为高电平,原本高电平的引脚设置为低电平 */  
  45.     GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);  
  46. }</span>
按键:
  1.   if (HAL_GPIO_ReadPin(GPIOC, User_button_Pin) == GPIO_PIN_RESET)  
  2.         {  
  3.             // 按键被按下,执行相应操作  
  4.             // 例如:切换LED状态  
  5.                 HAL_GPIO_TogglePin(GPIOA,User_LED_Pin);
  6.                 HAL_Delay(1000);
  7.         }
LED闪烁:
  1.   HAL_GPIO_TogglePin(GPIOA,User_LED_Pin);

  2.                 HAL_Delay(1000);
视频:



13150337883 发表于 2024-4-27 20:23 | 显示全部楼层
2131231321
瞎折腾 发表于 2024-4-28 10:44 | 显示全部楼层
谁给测试一下功耗啊?
WoodData 发表于 2024-4-28 13:45 | 显示全部楼层
我喜欢打游戏 发表于 2024-4-28 16:43 | 显示全部楼层
蹲一下,等后续
中国龙芯CDX 发表于 2024-4-29 08:19 | 显示全部楼层
IO口是最基本的操作规范
WAMCNCN 发表于 2024-5-16 08:19 | 显示全部楼层
控制IO是基本功
yuyy1989 发表于 2024-5-17 18:30 | 显示全部楼层
开发板评测始于点灯
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:工程师
简介:超越自我,为设计激发灵感和想象。

263

主题

836

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部