使用STM32单片机点亮LED

发布时间:2024-03-07  

有一人,登场于金庸先生的《神雕侠侣》,以大理段氏“一阳指”自成一派,武学修为登峰造极,“天下五绝”之一,号称“南帝”,他就是“一灯大师”。如今,武林中逐渐被遗忘的“一灯大师”,却活跃在另一个行业——嵌入式开发中。


传说,每一个成功的MCU(俗称单片机)开发组中,都有一名“一灯大师”,他精通所有开发板的点灯方法,对于企业引入的新开发板,总是勤学苦练,从点灯开始,快速掌握新开发板的编程要点,带领团队走向胜利。


成为“一灯大师”,离不开持续的修行,离不开对一招一式的勤学苦练。本文将讲解如何通过编程来控制STM32点亮一个LED

学习环境:

1.软件:Keil5

2.硬件:STM32开发板(笔者使用信盈达公司的M4开发板,芯片型号为STM32F407ZGT6)

适合人群:

在校初入电子坑的小白,不懂STM32编程的硬件开发人员和想了解库函数编程的人。

文末将提供示例代码和文档的资料分享。

Part 1

点灯的思路讲解

本文中的点灯,是指用STM32单片机点亮与之连接的LED的操作。首先我们先了解一下LED这种器件。

LED的本质是一种发光二极管,所以点灯的核心就是:如何用STM32控制一个二极管电路。

市场上各类LED(直插式/贴片式以及各种颜色的LED,都有点区别)在导通时的压降一般在1.8~3.3V。所以点灯需要先查看电路图,确定驱动LED的方法。

下图是笔者使用到STM32开发板的LED部分的原理图。

图片

本文接下来将以点亮LED1为例进行讲解。通过上图,我们可以看到或总结出以下信息:

1.LED1与单片机的PF6引脚连接。

2.由于LED1是一个二极管,点亮LED1需要PF6引脚上的电压值为低电平(满足发光二极管的导通压降需求即可)。

3.由于需要实现控制LED1点亮和LED1熄灭,需要将PF6引脚配置为输出模式,且输出电平可控。

故在编程步骤中主要需要完成两个部分:LED初始化函数(主要是配置引脚PF6为输出模式)和 点亮/熄灭LED1的接口(控制引脚PF6输出低/高电平)。

其中,LED1初始化的主要步骤为:

  1. 激活外设GPIOF(PF6是外设GPIOF的IO引脚之一)。

  2. 将PF6配置为输出模式

  3. 将PF6的输出类型配置为推挽输出

  4. 配置PF6输出速度为低速(其他速度也可以)

  5. 配置PF6的输出数据(点亮/熄灭LED1)

Part 2

用库函数编程方法点灯

本方法是通过调用STM32官方提供的库函数,完成对引脚有关的一系列操作。库函数编程方法简单易用,适合新人学习。

Step1,打开STM32F4xx官方库函数文档(stm32f4xx_dsp_stdperiph_lib_um.chm),找到以下函数。

图片

void  RCC_AHB1PeriphClockCmd (uint32_t RCC_AHB1Periph, FunctionalState NewState) 

  此函数用于激活AHB1总线上的外设(GPIOF在此总线上)


void  GPIO_Init (GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_InitStruct) 

  此函数将基于参数初始化GPIOx


void  GPIO_SetBits (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) 

  此函数用于控制指定IO引脚输出高电平


void  GPIO_ResetBits (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) 

  此函数用于控制指定IO引脚输出低电平


Step2,通过在库函数帮助文档中点击函数名,查看函数的定义,明确参数填写方法。

比如,点击GPIO_Init() 函数,查看其详细信息

图片

通过阅读图中文字,可知:第一个参数填写为GPIOx,其中x需要用字母A~K替代(取决于引脚),由于本例使用PF6引脚,故填写为GPIOF;第二个参数需要先定义一个GPIO_InitTypeDef类型的结构体变量,对其成员赋值后,再将变量的地址传入。

继续查看GPIO_InitTypeDef类型的定义。

图片

GPIO_InitTypeDef结构体类型中的这5个成员分别表示对以下内容的配置:IO引脚的模式、输出类型、引脚序号、内置电阻 和 输出速度。

其他几个函数也可以参考此方法进行查看,从而确定函数的调用形式。

Step3,结合前文“点灯的思路讲解”写出代码


//1. 激活外设GPIOF

RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOF, ENABLE);

//2. 将PF6配置为输出模式

//3. 将PF6的输出类型配置为推挽输出

//4. 配置PF6输出速度为低速

GPIO_InitTypeDef   gpio_InitStruct ;

gpio_InitStruct.GPIO_Mode   =  GPIO_Mode_OUT ;

gpio_InitStruct.GPIO_OType   = GPIO_OType_PP ;

gpio_InitStruct.GPIO_Pin     = GPIO_Pin_6 ;

gpio_InitStruct.GPIO_PuPd   = GPIO_PuPd_NOPULL ;

gpio_InitStruct.GPIO_Speed   =  GPIO_Low_Speed ;

GPIO_Init (GPIOF , &gpio_InitStruct);

//5. 点亮/熄灭LED1

#define LED1_ON    GPIO_ResetBits (GPIOF, GPIO_Pin_6)

#define LED1_OFF   GPIO_SetBits (GPIOF, GPIO_Pin_6)


Step4,整理代码,将他们添加到用Keil5软件建立的工程中。可参考以下形式。(细节详见文末提供的资料分享)

图片

图片

图片

Step5,编程工程,下载到开发板,观察现象。正常现象是LED1以固定的频率交替进行亮和灭动作。

留给读者的思考,本文提供的开发板的LED部分原理图中还有另外3个LED,尝试编写代码,驱动他们。有条件的朋友建议购买开发板直接实物验证,将理论与实践结合,早日成为“一灯大师”!


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>