【STM32】LED状态翻转函数

ops/2025/1/16 4:24:15/

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.ppmy.cn/ops/150462.html

相关文章

阿里云-Centos9-安装Docker-配置镜像拉取加速地址-开机自启

阿里云-Centos9-安装Docker-配置镜像拉取加速地址-开机自启 更新镜像源安装环境配置加速卸载安装pull拉取加速开机自启 更新镜像源 # dnf update:更新所有已安装的软件包。 sudo dnf update -y安装环境 # 安装环境 # yum-utils:提供了管理yum仓库的工具。…

手机与平板:勒索软件的“天然通道”

过去的两年中,63%的企业曾遭受勒索软件攻击。 随着全球媒体频频报道勒索软件威胁,这一话题引发了广泛关注。虽然勒索软件并非新生事物,但其受网络犯罪分子“青睐”的趋势却愈发显著。 为什么手机和平板成了目标? 当前&#xff0c…

2024年开发语言热度排名

随着技术的不断发展和变化,编程语言的热度也在不断演变。2024年即将到来,我们有必要回顾和展望当前和未来的开发语言市场。本文将基于多个因素,包括行业需求、社区支持、流行度以及新兴趋势,对2024年的开发语言热度进行排名和分析…

C#,动态规划问题中基于单词搜索树(Trie Tree)的单词断句分词( Word Breaker)算法与源代码

1 分词 分词是自然语言处理的基础,分词准确度直接决定了后面的词性标注、句法分析、词向量以及文本分析的质量。英文语句使用空格将单词进行分隔,除了某些特定词,如how many,New York等外,大部分情况下不需要考虑分词…

1,Linux环境变量基本定义(基于Ubuntu示例进行讲解)

linux环境变量的概念 Linux环境变量(准确说应该是shell变量),是直接存储在操作系统中的一组键值对(dict类型),用于配置系统和应用程序的操作行为。 【有经验的描述】:它们的工作原理很简单&am…

STM32F1学习——DMA直接存储器存取

一、DMA直接存储器存取 DMA的全称是 Direct Memory Access 直接存储器存取,他可以提供外设和存储器间或存储器和存储器间的高速数据传输,无需CPU的干预。 STM32有12个DMA通道,由DMA1(7个通道组成)和DMA2(5个通道组成),STM32F103C8…

开源AI微调指南:入门级简单训练,初探AI之路

112,如何让 113? 简单的微调你的 AI, 微调前的效果,怎么调教它都是 112. 要对其进行微调(比如训练113),可以按以下步骤进行。 确保你已经安装了以下工具和库: ollamallama3.2Pyt…

基于WebRTC实现音视频通话

客户端采用 WebRTC 技术(推流),通讯用 websocket。 WebRTC 像是一个面试过程: 第一步:发起方(拨打电话者)点击拨打电话时,获取本地媒体流并推流给接收方同时捕获接收方推过来的流&a…