0 %

六、LED控制实验​

2025-10-27 22:04:47

六、LED控制实验 ​LED灯基础知识 ​LED灯结构组成 ​ LED灯,也称发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。LED的内部是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,整个晶片被环氧树脂封装起来。

LED灯发光原理 ​ 半导体晶片由两部分组成,一部分是P型半导体,另一端是N型半导体。这两种半导体连接起来的时候,它们之间就形成了一个P-N结。当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED灯发光的原理。

LED灯驱动原理 ​ 驱动LED灯,也就是使LED灯点亮,首先查看原理图,查看LED灯引脚的连接关系,可通过对应单片机引脚输出高低电平,从而改变LED灯两侧电势差形成电流回路,点亮LED灯。

LED灯引脚原理图 ​核心板板载LED引脚图:

底板板载LED引脚图:

点亮LED灯 ​项目分析 ​ 本次项目完成点亮底板LED灯实验,核心板板载LED灯留给大家自行修改进行点亮; 通过前面的基础知识说明,我们已经知道LED灯点亮的原理与LED灯连接的引脚;

LED2--->PA28LED3--->PA31在LED灯的正极是连接3.3V,中间接入了一个1K的限流电阻防止LED灯烧坏; 当我们将对应引脚配置为高电平时,单片机引脚高电平输出(3.3V),此时没有电压差,没有电流流过,不能点亮LED; 当我们将对应引脚配置为低电平时,单片机引脚低电平输出(0V),此时有电压差,有电流流过,LED灯被点亮;

配置流程 ​按照开发环境搭建的流程,导入一个空白工程,一般我们使用GPIO的端口,都需要有以下几个步骤。

开启GPIO的端口时钟配置GPIO的模式配置GPIO的输出双击打开.syscfg配置界面,将芯片型号改为48Pin-MSPM0G3507

在sysconfig的UI界面中,左侧可以选择MCU的外设,我们找到并点击GPIO选项卡,在GPIO中点击ADD,就可以添加一组GPIO。

设置GPIO组的参数;

参数说明

Name : GPIO实例组的自定义名称,一般会将其命名为实际外设名称,例如“LED”,这样就知道这个组中的引脚都是用于LED灯; Port :GPIO实例组所在端口,项目底板两个LED灯均是接在PA端口上,于是选择PortA;若有不同端口的引脚,则选择Any-任意; Port Segment : GPIO实例组中端口引脚位于的位置,G3507芯片GPIO是32位的,分为高16位和低16位,此处可以指定减少不必要的判断代码;

设置GPIO引脚的参数:

参数说明

Name : GPIO引脚的自定义名称,一般会将其命名为实际外设名称,例如“LED2”,这样就知道这个引脚是连接LED2; Direction :GPIO引脚方向,选择输入/输出,此处选择输出; Initial Value : GPIO引脚初始化电平,选择高电平/低电平,此处选择高电平,默认不打开LED; Assigned Port Segment : 指定GPIO引脚位于高16位还是低16位,此处选择高16位; Assigned Pin : 指定GPIO引脚位号,仅支持输入0-31数字,此处选择28,也就是PA28; Pinmux : LED2引脚位于PA28,自动根据参数进行识别,若没有指定,则可以自行选择;

按照一样的流程配置LED3引脚;

代码编写 ​配置完成,Ctrl+S保存关闭,选择上方的Project,编译工程,应该是无报错无警告;

为了方便程序复用,这里在项目中添加一个BSP_Library文件夹,并在其中增加四个文件;

bsp_led.cbsp_led.hbsp_delay.cbsp_delay.hC

#include "bsp_led.h"

/*

函数内容:led灯控制函数

函数参数:ledbit--LED灯,conbit--打开或关闭

返回值:无

*/

void control_Led(uint8_t ledbit, uint8_t conbit)

{

if(ledbit == LED2)

{

if(conbit == LED_OPEN){

DL_GPIO_clearPins(LED_PORT,LED_LED2_PIN);

}

else {

DL_GPIO_setPins(LED_PORT,LED_LED2_PIN);

}

}

if(ledbit == LED3)

{

if(conbit == LED_OPEN){

DL_GPIO_clearPins(LED_PORT,LED_LED3_PIN);

}

else {

DL_GPIO_setPins(LED_PORT,LED_LED3_PIN);

}

}

}1234567891011121314151617181920212223242526272829C#ifndef __BSP_LED_H

#define __BSP_LED_H

#include "ti_msp_dl_config.h"

#define LED2 0x01

#define LED3 0x02

#define LED_OPEN 0x03

#define LED_CLOSE 0x04

void control_Led(uint8_t ledbit, uint8_t conbit);

#endif12345678910111213C#include "bsp_delay.h"

/*

函数内容:ms延时函数

函数参数:ms--延时时长

返回值:无

*/

void delay_ms(uint32_t ms) {

uint32_t i = 0;

for (i = 0; i < ms; i++) {

delay_cycles(CPUCLK_FREQ/1000);

}

}

/*

函数内容:us延时函数

函数参数:us--延时时长

返回值:无

*/

void delay_us(uint32_t us){

while(us--){

delay_cycles(CPUCLK_FREQ/1000000);

}

}123456789101112131415161718192021222324C#ifndef __BSP_DELAY_H

#define __BSP_DELAY_H

#include "ti_msp_dl_config.h"

void delay_ms(uint32_t ms);

void delay_us(uint32_t us);

#endif123456789函数说明

这些函数均是官方编写好的API函数,在M0_SDK/docs/chinese/driverlib/Driverlib_Overview_CN.html中有详细介绍,强烈建议不懂的人自行查看。

DL_GPIO_clearPins : 将GPIO组中的引脚清零,也就是变成低电平;

DL_GPIO_setPins : 将GPIO组中的引脚设置为1,也就是变成高电平;

delay_cycles : 延迟指定的CPU周期数,此处默认时钟为CPUCLK_FREQ = 32Mhz,计数一个周期是1s,÷ 1000也就是延时1ms;

函数内容编写完成后,点击Project/Properties,设置工程参数信息;

烧录器根据自己手里的,选择Jlink或者TI的烧录器;

编译优化等级设置为-0;

将刚才新建的文件夹,包含到搜索库路径中;点击保存即可

在empty.c中包含两个头文件,再次编译,应该是0错误0警告;

在main函数中加入以下代码,按照环境搭建中的介绍烧录下载代码,观察底板LED是否间隔1s进行闪烁;自此,LED控制实验结束。

empty.cC#include "ti_msp_dl_config.h"

#include "bsp_led.h"

#include "bsp_delay.h"

int main(void)

{

SYSCFG_DL_init();

while (1) {

control_Led(LED2,LED_OPEN);

control_Led(LED3,LED_CLOSE);

delay_ms(500);

control_Led(LED2,LED_CLOSE);

control_Led(LED3,LED_OPEN);

delay_ms(500);

}

}1234567891011121314151617

Posted in 比利时世界杯
Copyright © 2088 2034年世界杯_足球中国世界杯预选赛 - qdhuaxue.com All Rights Reserved.
友情链接