当前位置: 首页 > news >正文

【STM32】LED状态翻转函数

1.利用状态标志位控制LED状态翻转

在平常编写LED状态翻转函数时,通常利用状态标志位实现LED状态的翻转。如下所示:

unsigned char led_turn_flag;    //LED状态标志位,1-点亮,0-熄灭/***************************************函数名称:LED亮灭控制函数形参:sta 1-点亮,0-熄灭
****************************************/
void led_control(unsigned char sta)
{if(sta) //高电平{GPIO_SetBits(GPIOA,GPIO_Pin_1);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_1);}
}/***************************************函数名称:LED翻转控制函数形参:无
****************************************/
void led_control_turn()
{led_control(led_turn_flag);
}

使用状态标志位,可以轻松实现LED状态翻转,但其存在可移植性差的问题。

led_turn_flag这个变量如果在其他.c文件中需要使用,则需要在该.c文件中对该变量再次进行声明,如此一来,使得程序繁琐冗长、可读性差、可移植性差。

下面将介绍一种利用STM32关于GPIO库函数实现LED状态翻转,其可读性强、可移植性强。

2.利用STM32库函数实现LED状态翻转

利用读GPIO引脚函数和写GPIO位函数实现,先读取引脚状态再将其进行翻转,代码如下:

void led_control_turn(void)
{GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1)));//读取到是0,1-0=1,就翻转为1;读取到是1,1-1=0,就翻转为0
}//下面两个函数是STM32自己的库函数,不需要我们自己添加
/*** @brief  Sets or clears the selected data port bit.* @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.* @param  GPIO_Pin: specifies the port bit to be written.*   This parameter can be one of GPIO_Pin_x where x can be (0..15).* @param  BitVal: specifies the value to be written to the selected bit.*   This parameter can be one of the BitAction enum values:*     @arg Bit_RESET: to clear the port pin*     @arg Bit_SET: to set the port pin* @retval None*/
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
{/* Check the parameters */assert_param(IS_GPIO_ALL_PERIPH(GPIOx));assert_param(IS_GET_GPIO_PIN(GPIO_Pin));assert_param(IS_GPIO_BIT_ACTION(BitVal)); if (BitVal != Bit_RESET){GPIOx->BSRR = GPIO_Pin;}else{GPIOx->BRR = GPIO_Pin;}
}/*** @brief  Reads the specified output data port bit.* @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.* @param  GPIO_Pin:  specifies the port bit to read.*   This parameter can be GPIO_Pin_x where x can be (0..15).* @retval The output port pin value.*/
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{uint8_t bitstatus = 0x00;/* Check the parameters */assert_param(IS_GPIO_ALL_PERIPH(GPIOx));assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET){bitstatus = (uint8_t)Bit_SET;}else{bitstatus = (uint8_t)Bit_RESET;}return bitstatus;
}

利用STM32库函数实现LED状态翻转,简洁明了,可移植性强。

http://www.lryc.cn/news/521625.html

相关文章:

  • uniapp 小程序 textarea 层级穿透,聚焦光标位置错误怎么办?
  • 汽车 SOA 架构下的信息安全新问题及对策漫谈
  • Unity-Mirror网络框架-从入门到精通之RigidbodyPhysics示例
  • 小程序如何引入腾讯位置服务
  • H3CNE-12-静态路由(一)
  • 多线程锁
  • ZooKeeper 核心知识全解析:架构、角色、节点与应用
  • 笔记本电脑 选购 回收 特权模式使用 指南
  • 2023-2024 学年 广东省职业院校技能大赛(高职组)“信息安全管理与评估”赛题一
  • C#补充----反射,特性,迭代器,特殊语法,值类型运用类型。
  • 深度学习核函数
  • Spring MVC流程一张图理解
  • 计算机网络速成
  • spring.profiles.active不同优先级
  • 我这不需要保留本地修改, 只需要拉取远程更改
  • 源码编译安装httpd 2.4,提供系统服务管理脚本并测试(两种方法实现)
  • 深度学习在自动化测试中的创新应用:提升运维效率与质量
  • 单独编译QT子模块
  • 学习华为熵减:激发组织活力(系列之三)
  • CNCF云原生计算基金会
  • STM32 FreeRTOS时间片调度---FreeRTOS任务相关API函数---FreeRTOS时间管理
  • SQL LAST()
  • 云服务信息安全管理体系认证,守护云端安全
  • 【Hive】新增字段(column)后,旧分区无法更新数据问题
  • C# (图文教学)在C#的编译工具Visual Studio中使用SQLServer并对数据库中的表进行简单的增删改查--14
  • 4G DTU赋能智能配电环网柜通信运维管理
  • 快速上手 HarmonyOS 应用开发
  • 解决nginx: [emerg] unknown directive “stream“ in /etc/nginx/nginx.conf问题 --九五小庞
  • Object类和hashcode方法
  • 速通Docker === 介绍与安装