1、相关配置
主控:MSPM0G3507SPTR(48角)
编译器:Keil,版本:5.33
2、板子以及原理图
通过原理图我们可以发现,为了点亮RGB三色灯(红绿蓝),需要配置B2、B3、A7这三个引脚。 原理图中使用的RGB灯为共阳接法,IO口需要为低电平才能使得LED发光。所以在后续的代码中,低电平灯亮,高电平灯灭。
2、Sysconfig配置
通过Sysconfig配置GPIO后,我们就将三个引脚配置好了。需要注意的是,记得将生成的ti_msp_dl_config.c和ti_msp_dl_config.h保存在工程路径下。参考链接:
3、GPIO函数设计
3.1 IO口控制函数
DL_GPIO_clearPins(PORTB_PORT, PORTB_LED_RED_PIN); // 红色LED亮
DL_GPIO_setPins(PORTB_PORT, PORTB_LED_RED_PIN); // 红色LED灭
DL_GPIO_togglePins(PORTB_PORT, PORTB_LED_RED_PIN); // 红色LED翻转
为了控制GPIO的高低电平,我们首先需要了解一些函数,其中“clear”可以理解为清零;“set”理解为置一;“toggle”就是翻转,例如原本IO口为高电平,使用一次这个函数后,IO口就翻转为低电平。
3.2 宏定义
/*----------------------------------宏定义-----------------------------------------*/
#define LED_RED_ON DL_GPIO_clearPins(PORTB_PORT, PORTB_LED_RED_PIN) // 红色LED亮
#define LED_RED_OFF DL_GPIO_setPins(PORTB_PORT, PORTB_LED_RED_PIN) // 红色LED灭
#define LED_RED_TOGGLE DL_GPIO_togglePins(PORTB_PORT, PORTB_LED_RED_PIN) // 红色LED翻转
#define LED_GREEN_ON DL_GPIO_clearPins(PORTA_PORT, PORTA_LED_GREEN_PIN) // 绿色LED亮
#define LED_GREEN_OFF DL_GPIO_setPins(PORTA_PORT, PORTA_LED_GREEN_PIN) // 绿色LED灭
#define LED_GREEN_TOGGLE DL_GPIO_togglePins(PORTA_PORT, PORTA_LED_GREEN_PIN) // 绿色LED翻转
#define LED_BLUE_ON DL_GPIO_clearPins(PORTB_PORT, PORTB_LED_BLUE_PIN) // 蓝色LED亮
#define LED_BLUE_OFF DL_GPIO_setPins(PORTB_PORT, PORTB_LED_BLUE_PIN) // 蓝色LED灭
#define LED_BLUE_TOGGLE DL_GPIO_togglePins(PORTB_PORT, PORTB_LED_BLUE_PIN) // 蓝色LED翻转
巧妙利用宏定义,我们就可以简化这些很长的函数,在实际看代码的过程中,也更加通俗易懂。
3.3 点灯测试
/**
* @函数介绍: 延时函数
* @输入参数: 无
* @输出参数: 无
* @说明: 随意设置的,想要精准定时请用定时器
*/
void my_delay(void)
{
int i, j = 0;
// 修改 i 和 j 可以调整延时时间
for(i = 800; i > 0; i--)
{
for(j = 1000; j > 0; j--)
{
}
}
}
/**
* @函数介绍:三色灯切换
* @输入参数: 无
* @输出参数: 无
* @说明: 无
*/
void RGB_LED_Switch(void)
{
LED_RED_ON;
LED_GREEN_OFF;
LED_BLUE_OFF;
my_delay();
LED_RED_OFF;
LED_GREEN_ON;
LED_BLUE_OFF;
my_delay();
LED_RED_OFF;
LED_GREEN_OFF;
LED_BLUE_ON;
my_delay();
}
通过观察RGB_LED_Swtich函数,我们很容易理解这是一个红绿蓝三色灯切换的代码,利用宏定义后,代码的可读性会大大提高。
3.4 主函数
#include "ti_msp_dl_config.h"
#include "config.h"
/**
* @函数介绍: main函数
* @说明: 无
*/
int main(void)
{
SYSCFG_DL_init(); // 芯片资源初始化,由SysConfig配置软件自动生成
while(1)
{
RGB_LED_Switch(); // 三色灯切换
}
}
主函数中我们只需要对Sysconfig生成的SYSCFG_DL_init()函数初始化(这一步是固定的)。在while(1)中运行RGB函数就行。
4、实验效果
通过实验我们可以发现,RGB三色灯被成功点亮,并按顺序正常切换。
5、总结
GPIO控制较为简单,将其配置为输入模式,就可以进行高低电平的判断,即按键检测,大家可以自己尝试。需要重点关注两点:
1、Sysconfig的配置不要出错
2、控制IO口的几个函数要清楚
2024-6-19-14:47,平平淡淡的一天