昇润CC2640 SDK应用入门教程五

发布日期:2017.03.07     浏览次数:359

有老司机说CC2640PWM,手机APP可以控制PWM输出吗?

先看一下芯片模块图,是有4路32bit定时器,32位的芯片均是通过定时器来实现PWM控制,我们也来试试:

首先把定时器测试示例宏定义打开:


看一下示例子程式:

TTCDirverTimerDemo.c


好多功能:


哇,这么多,搞定一个简单点的先:


看看PWM输出功能:


设定一个定时器在IOID_0输出PWM。看看SDK有多少个定时器:




原来SDK把4路32位的定时分为了8路16位的;想了解更多关于定时器的设置可以仔细看看头文件中的说明:


还有SDK说明文档:


说得很仔细,发点时间过一下,定时器的特殊用法都有!好啦,这里不费话,来实际的:

原有TTCDriverSinglePWMSignalTest是指定在IOID_0输出PWM,与之前的试验有点冲突,我们改一下:


把IO由外面的指定,可以指定不同的IO来测试PWM的输出:


看一下原来的定时器事件:


原程式看看:


8个IO上来回变化,而且不断重复,这么多,复制一下:我们简单点:


把占空比的部分放出来,由外面的参数来决定;

把输出IO固定一下,开发板的第三个LED还没有用起来,DIO7试试:


执行完毕,又去执行,我们先关掉,第更新一次APP的数据,我们就改写一次PWM的占空比:

透传APP的自定义界面有滑条,我们来试试看:

进去把R这个滑条的最大,最小设定一下,确定;最大为什么要设0xbb80?因为这里设定满格是48000呀:


是什么东东,我们确认一下:


先把BLE收到的二个字节数据拼到一个变量里,用这个变量来作为PWM的占空比,二个文件之前要传送参数,搞成一个全局变量:


数据拼一下,方向别搞错:


拼好后,激活定时器事件:


编译看看,不行!发现没有定义变量,函数!不对呀!明明定啦!

检查一下头文件 TTCDirverTimerDemo.h


把事件宏移到头文件:


再编译看看,不行!TTCDirverTimerDemo.c原来就定义是静态的啦,先屏掉:


再编译看看,还是不行!找找!


把这二个头文件包到TTCDirverTimerDemo.c,把全局变量引进来:


还是不行?问题在哪呢?


原来SDK有坑呀!这谁挖的呀!没有区分大小写呀!

改过来!


还面还有好几个都是这样!都改改:


 

我再来!O啦!


仿真,没问题,联上手机,试试滑条:

滑条输出0x0000看看,示波器测试IO一直为高:

滑条输出0x2dd5看看,示波器测试IO:

滑条输出0x6aaa看看,示波器测试IO:

滑条输出0x9caa看看,示波器测试IO:

滑条输出0xbb80看看,示波器测试IO输出低电平:

反复调试滑条,可以得到每一段的数据,记得,不要超出48000的量程!