本次主要是以学习的态度来参加本次TI的活动,感谢EEPW提供的这次机会。本次准备跟随着老师的脚步一步一步学习。
本次使用的开发板是TI的MSPM0L1306开发板,是一个出来相对比较新的器件demo板。
第一部分:
接下来进入课程1的第一部分:准备工作。课程提供了获取开发板资料的主途径,在TI的官网可以获取这个开发板全部详细资料,由于第一次接触,所以使用的是TI的开发环境CCS,自己的支持肯定是最好的,还有就是开发板专用的SDK(后来知道,CCS中也可以直接下载)。
其实第一部分主要的介绍的点亮LED,实际上也是咱们开发过程中验证程序下载的第一步——点灯。还特意介绍了一下硬件原理:
实际上在使用的时候就是通过控制高低电平实现的点灯,不过使用上拉还是下拉的控制方式是相反的。
以下是学习使用的引脚,对应的IO为PA0,对应低电平点亮:
那么我们如是使用软件实现呢?太方便了,直接使用配置文件继续宁初始化:
可以在开头的配置相关的头文件中可以看到自动生成的宏定义:
/* Port definition for Pin Group GPIO_LED1 */ #define GPIO_LED1_PORT (GPIOA) /* Defines for PIN_0: GPIOA.0 with pinCMx 1 on package pin 1 */ #define GPIO_LED1_PIN_0_PIN (DL_GPIO_PIN_0) #define GPIO_LED1_PIN_0_IOMUX (IOMUX_PINCM1)
而且相关引脚的初始化已经完成。
我们直接在while中加入闪烁代码:
delay_cycles(32000000); DL_GPIO_togglePins(GPIO_LED1_PORT, GPIO_LED1_PIN_0_PIN);
效果如下:
第二部分
这一部分主要是GPIO的输出(按键输入),按键的检测方式有多种,例如延时法,中断触发法,定时器查询。本次课程使用的按键为S2,板载原理如下图:
由于该按键没有上拉电阻,所以我们在配置的时候需要上拉一下,对应引脚为PA14。
软件如何实现呢?还是使用配置文件:
主代码如下:
if(DL_GPIO_readPins(GPIO_S2_PORT, GPIO_S2_PIN_14_PIN) == 0){ DL_GPIO_clearPins(GPIO_LED1_PORT, GPIO_LED1_PIN_0_PIN); } else{ DL_GPIO_setPins(GPIO_LED1_PORT, GPIO_LED1_PIN_0_PIN); }
效果如下:
这一部分主要讲的是PWM的,其实没有讲定时器直接来到PWM感觉有点快,不过TI的配置里面PWM与基本定时器是分开,也就能够理解了。
PWM的原理如下:
本部分主要通过LED的明暗变化来观察PWM的变化,我们看一下配置:
注意哦,和第一部分的引脚是同一个,配置相同会报错,删除就好了,添加控制代码:
delay_cycles(100000); Dutytmp +=5; if(Dutytmp > 5000) Dutytmp = 0; DL_TimerG_setCaptureCompareValue(PWM_LED_INST, Dutytmp, DL_TIMER_CC_0_INDEX);
效果如下:
课后作业
点亮RGB,实现红色、绿色、蓝色的循环显示,我们看一下硬件:
对应的绿灯PA13,红灯PA26,蓝灯PA27,板载资源就是好,不用连线。循环点亮的思路就是红灯亮(其他灭)——绿灯亮(其他灭)——蓝灯亮(其他灭),其实这只用到了GPIO的输出知识就可以了,我们添加配置:
while中添加循环点亮的代码:
DL_GPIO_clearPins(GPIO_RGB_PORT, GPIO_RGB_PIN_Red_PIN); DL_GPIO_clearPins(GPIO_RGB_PORT, GPIO_RGB_PIN_Green_PIN); DL_GPIO_clearPins(GPIO_RGB_PORT, GPIO_RGB_PIN_Blue_PIN); while (1) { delay_cycles(32000000); DL_GPIO_clearPins(GPIO_RGB_PORT, GPIO_RGB_PIN_Blue_PIN); DL_GPIO_setPins(GPIO_RGB_PORT, GPIO_RGB_PIN_Red_PIN); delay_cycles(32000000); DL_GPIO_clearPins(GPIO_RGB_PORT, GPIO_RGB_PIN_Red_PIN); DL_GPIO_setPins(GPIO_RGB_PORT, GPIO_RGB_PIN_Green_PIN); delay_cycles(32000000); DL_GPIO_clearPins(GPIO_RGB_PORT, GPIO_RGB_PIN_Green_PIN); DL_GPIO_setPins(GPIO_RGB_PORT, GPIO_RGB_PIN_Blue_PIN); }
由于我们知道具体的顺序,在初始的时候把所有灯先关闭,之后一个打开,之后关闭之前的状态,再打开后一个状态就可以循环了,间隔选择的1s。
效果如下: