有老司机说CC2640有PWM,手机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的量程!
0