昇润CC2640 SDK应用入门教程五
发布日期:2017.03.07 浏览次数:359
有老司机说CC2640有PWM,手机APP可以控制PWM输出吗?
先看一下芯片模块图,是有4路32bit定时器,32位的芯片均是通过定时器来实现PWM控制,我们也来试试:
首先把定时器测试示例宏定义打开:
![](/uploads/allimg/170307/3-1F30G5305UQ.jpg)
看一下示例子程式:
TTCDirverTimerDemo.c
![](/uploads/allimg/170307/3-1F30G5310N23.jpg)
好多功能:
![](/uploads/allimg/170307/3-1F30G5311N13.png)
哇,这么多,搞定一个简单点的先:
![](/uploads/allimg/170307/3-1F30G5312D06.jpg)
看看PWM输出功能:
![](/uploads/allimg/170307/3-1F30G531391U.jpg)
设定一个定时器在IOID_0输出PWM。看看SDK有多少个定时器:
![](/uploads/allimg/170307/3-1F30G5314WM.jpg)
![](/uploads/allimg/170307/3-1F30G5315G49.jpg)
![](/uploads/allimg/170307/3-1F30G5320R35.jpg)
原来SDK把4路32位的定时分为了8路16位的;想了解更多关于定时器的设置可以仔细看看头文件中的说明:
![](/uploads/allimg/170307/3-1F30G53252543.jpg)
还有SDK说明文档:
![](/uploads/allimg/170307/3-1F30G533011L.jpg)
说得很仔细,发点时间过一下,定时器的特殊用法都有!好啦,这里不费话,来实际的:
原有TTCDriverSinglePWMSignalTest是指定在IOID_0输出PWM,与之前的试验有点冲突,我们改一下:
![](/uploads/allimg/170307/3-1F30G53314623.jpg)
把IO由外面的指定,可以指定不同的IO来测试PWM的输出:
![](/uploads/allimg/170307/3-1F30G53326430.jpg)
看一下原来的定时器事件:
![](/uploads/allimg/170307/3-1F30G5333GK.jpg)
原程式看看:
![](/uploads/allimg/170307/3-1F30G5334RQ.jpg)
8个IO上来回变化,而且不断重复,这么多,复制一下:我们简单点:
![](/uploads/allimg/170307/3-1F30G5335Q54.jpg)
把占空比的部分放出来,由外面的参数来决定;
把输出IO固定一下,开发板的第三个LED还没有用起来,DIO7试试:
![](/uploads/allimg/170307/3-1F30G5340a41.jpg)
执行完毕,又去执行,我们先关掉,第更新一次APP的数据,我们就改写一次PWM的占空比:
透传APP的自定义界面有滑条,我们来试试看:
进去把R这个滑条的最大,最小设定一下,确定;最大为什么要设0xbb80?因为这里设定满格是48000呀:
![](/uploads/allimg/170307/3-1F30G53430529.jpg)
是什么东东,我们确认一下:
![](/uploads/allimg/170307/3-1F30G53441193.jpg)
先把BLE收到的二个字节数据拼到一个变量里,用这个变量来作为PWM的占空比,二个文件之前要传送参数,搞成一个全局变量:
![](/uploads/allimg/170307/3-1F30G53450W2.jpg)
数据拼一下,方向别搞错:
![](/uploads/allimg/170307/3-1F30G53502T4.jpg)
拼好后,激活定时器事件:
![](/uploads/allimg/170307/3-1F30G535124Z.jpg)
编译看看,不行!发现没有定义变量,函数!不对呀!明明定啦!
检查一下头文件 TTCDirverTimerDemo.h
![](/uploads/allimg/170307/3-1F30G53521624.jpg)
把事件宏移到头文件:
![](/uploads/allimg/170307/3-1F30G535311W.jpg)
再编译看看,不行!TTCDirverTimerDemo.c原来就定义是静态的啦,先屏掉:
![](/uploads/allimg/170307/3-1F30G53540E8.jpg)
再编译看看,还是不行!找找!
![](/uploads/allimg/170307/3-1F30G53550525.jpg)
把这二个头文件包到TTCDirverTimerDemo.c,把全局变量引进来:
![](/uploads/allimg/170307/3-1F30G53559564.jpg)
还是不行?问题在哪呢?
![](/uploads/allimg/170307/3-1F30G53609512.jpg)
原来SDK有坑呀!这谁挖的呀!没有区分大小写呀!
改过来!
![](/uploads/allimg/170307/3-1F30G53619150.jpg)
还面还有好几个都是这样!都改改:
![](/uploads/allimg/170307/3-1F30G536323I.jpg)
我再来!O啦!
![](/uploads/allimg/170307/3-1F30G53641113.jpg)
仿真,没问题,联上手机,试试滑条:
滑条输出0x0000看看,示波器测试IO一直为高:
滑条输出0x2dd5看看,示波器测试IO:
滑条输出0x6aaa看看,示波器测试IO:
滑条输出0x9caa看看,示波器测试IO:
滑条输出0xbb80看看,示波器测试IO输出低电平:
反复调试滑条,可以得到每一段的数据,记得,不要超出48000的量程!