【MSPM0L1306 LaunchPad™ 开发套件】3、创建新程序并使用IO口控制LED
[复制链接]
本帖最后由 秦天qintian0303 于 2023-10-21 20:30 编辑
这次我们将使用CCS开发环境创建一个新的工程,用于本次活动的测试进行。TI不推荐这种方式使用新建,有很多依存关系需要重新理解和梳理,所以我们使用MSPM0 SDK中的empty工程作为我们本次测试活动的基础工程。
打开一个新的程序工程:
加载完成之后会对应在之前设定的工程路径下形成一个新的工程,直接通过重命名进行工程的改名和C文件的改名:
针对板卡的LED使用情况进行LED的控制,板载LED资源如下图:
一共有两个LED可控,通过4个IO口控制;
咱们回到工程里边去,为了LED控制创建了eva_LED的C和H文件,将这个文件所在文件夹加入到includes中去。
CCS加入新头文件路径方法如下(使用Alt+Enter进入):
添加头文件路径对应的是1里面的内容,添加新的是2位置的小图标,然后选择对应的文件夹就可以吧路径添加进去了;
首先进行的是对应的LED1操作(IO口是PA0),初始化代码如下:
void LED1_GPIO_init(void)
{
DL_GPIO_initDigitalOutput(IOMUX_PINCM1);//配置引脚为输出模式,GPIOA_0对应的是IOMUX_PINCM1
DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_0);
DL_GPIO_enableOutput(GPIOA, DL_GPIO_PIN_0);//使能输出
}
这里需要注意,对于GPIO的操作IOMUX_PINCM与PIN的数值差一,例如IOMUX_PINCM1对应的是IOMUX_PINCM1_PF_GPIOA_DIO00;
对于IO口的使用粗略延时的方法进行操作:
代码:
#define LED1_toggle DL_GPIO_togglePins(GPIOA, DL_GPIO_PIN_0)
void LED_Alter(void)
{
delay_cycles(32000000);//延时一秒
LED1_toggle;
}
效果如下:
LED1控制
这回咱们对上边的两个LED进行操作,全部使用GPIO控制循环点亮:
代码如下:
#define LED1_RESET DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_0)
#define LED1_SET DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_0)
#define LED1_toggle DL_GPIO_togglePins(GPIOA, DL_GPIO_PIN_0)
#define LED2_Green_RESET DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_13)
#define LED2_Green_SET DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_13)
#define LED2_Green_toggle DL_GPIO_togglePins(GPIOA, DL_GPIO_PIN_13)
#define LED2_Red_RESET DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_26)
#define LED2_Red_SET DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_26)
#define LED2_Red_toggle DL_GPIO_togglePins(GPIOA, DL_GPIO_PIN_26)
#define LED2_Blue_RESET DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_27)
#define LED2_Blue_SET DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_27)
#define LED2_Blue_toggle DL_GPIO_togglePins(GPIOA, DL_GPIO_PIN_27)
uint8_t state; //LED过程
//初始化
void LED1_GPIO_init(void)
{
DL_GPIO_initDigitalOutput(IOMUX_PINCM1);//配置引脚为输出模式,GPIOA_0对应的是IOMUX_PINCM1
DL_GPIO_initDigitalOutput(IOMUX_PINCM14);//配置引脚为输出模式,GPIOA_0对应的是IOMUX_PINCM1
DL_GPIO_initDigitalOutput(IOMUX_PINCM27);//配置引脚为输出模式,GPIOA_0对应的是IOMUX_PINCM1
DL_GPIO_initDigitalOutput(IOMUX_PINCM28);//配置引脚为输出模式,GPIOA_0对应的是IOMUX_PINCM1
DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_0|DL_GPIO_PIN_13|DL_GPIO_PIN_26|DL_GPIO_PIN_27);
DL_GPIO_enableOutput(GPIOA, DL_GPIO_PIN_0|DL_GPIO_PIN_13|DL_GPIO_PIN_26|DL_GPIO_PIN_27);//使能输出
}
void LED_Alter(void)
{
delay_cycles(32000000);
state++;
state %= 4;
LED1_RESET;
LED2_Green_RESET;
LED2_Red_RESET;
LED2_Blue_RESET;
switch(state)
{
case 0:
LED1_SET;
break;
case 1:
LED2_Green_SET;
break;
case 2:
LED2_Red_SET;
break;
case 3:
LED2_Blue_SET;
break;
default:
break;
}
}
效果如下:
LED循环点亮
本章节通过LED的操作对GPIO进行了初步的了解和试验,对于主要的差异就是对IO口的模式的选择,PIN与IOMUX_PIN不是完全根据习惯对应的,这块不知道是出于什么考虑的,不过通过向下查看底层代码还是很好区分的,通过延时实现所有LED循环点亮成功。
|