本帖最后由 徐雅平 于 2015-2-13 17:05 编辑
: w* S7 p- G: `' _) `6 q
$ I$ ]( O5 r/ M$ X# H. B体验完MICO神奇的功能后,小白想自己也用一下MICO,于是就选了一个最简单的试验开始:控制灯的亮度。为了深刻的理解WIFi的功能,试验中我分别体验了以下两个试验:
1、直接输入PWM占空比的值控制灯的亮度;
2、通过WIFI模块传输PWM的占空比,从而控制灯的亮灭;
控制灯的亮灭要用到关于PWM的函数,所用到的函数块是:MicoPwmIni
tialize()
和MicoPwmStart()
。 【Q】如何找到这些函数定义的地方?
PlatformCommonCortex-M3
STM32F2xxMicoDriverPwm.c
中有定义了PWM
的初始配置的函数MicoPwmInitialize()
以及启用PWM
的函数 MicoPwmStart()
,这些函数在MICO
中都已经写好了,在我们用到的时候,只要找到相应的指令修改一下参数即可(详见下图)。
4 v, _7 Z9 l+ h3 e! A
0 D1 m( f' [4 ]3 q
' C& o% w) j& _$ B+ g$ r. R" A
- |$ S6 y! k/ z. @ z0 D
5 F. S; q) `. R
* K( I' `4 u; H
【试验一】直接配置PWM的占空比调节灯的亮度
修改程序如下:
9 D1 c6 _ i n$ j在COM.MXCHIP.HA-EMW3162MICOMICOEntrance.c下找到int application_start(void)这是应用程序开始的地方,如下图:
& m; A2 j' ~/ }, u- P
! _' P' n" P$ H4 v
8 x, I0 q J# @1 t- ]3 [3 s! r
在红框所示的位置加入如下代码,红框前面的语句是初始化的一些配置,调用MICO库函数即可点亮一盏灯。
$ T8 g. {3 X- W0 P5 k
% q/ e2 s8 a+ F* X" w. @【Q】代码写好后怎么在硬件上找到PWM波形的接口?
在COM.MXCHIP.HA-EMW3162PlatformEMW3162platform.h中找到EMW3162 on EMB-380-S platform pindefinitions ...这里面是EMW3162 引脚的编号和功能的介绍。由于用的是MICO_PWM_1,找到所在的位置,用到硬件的引脚是MICO_GPIO_10,即编号为10的引脚。
- |+ _4 s! F$ f+ k9 D! U
+ u1 W. ^) X" {0 ?; R2 D. h3 K0 Z
+ ^' P W$ p! G" v: H1 z
6 X. N( J* b$ g8 ]( Z! i2 }- [
6 [7 R5 u! E. s2 [, }' j& U
在这个引脚上引出一根线,接一个灯,灯的另一端接地。然后编译并下载程序。
2 w' O( w- E2 R5 k% x
2 Z, W6 B# c4 x
如下图是占空比为60%的亮度:
2 h2 Q+ o% m6 b7 R5 I& j
/ A- K: b# Q7 v9 w
( O6 U& d) u, x; N0 ~+ F, l" c" \
【试验二】连网控制灯的亮度
连网方式是通过EMW3162的WIFI功能读取输入的数据,数据流是以HA协议格式传输的,十六进制输入的数据在MICO程序处理后作为PWM的占空比,从而达到连网控制的功能。
1、修改程序:
' ]2 ^$ p; J) O
找到文件COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.cHaProtocol.h里面的关于HA协议的枚举定义的地方,添加一个变量CMD_PWM。
8 Y5 o# Z: T2 }) @- s! g$ c! U
% A3 |+ ^1 p5 k. | 然后在COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.c文件中找到调用前面定义的枚举的地方,添加如图红框里面所示代码:
# S+ K# ` L" i" W. C
代码分析:里面用到了p_reply这个量,追踪其定义的地方,是定义了一个mxchip_cmd_head_t*结构体的变量。
: U) s! p8 B3 m% y/ I
2 R; [: N- B3 Y' I& \( {
下面是mxchip_cmd_head_t 结构体的原型,这是HA传输数据的协议的格式,
4 l5 Q0 O% ]# J( n通过这个就知道MicoPwmInitialize((mico_pwm_t)MICO_PWM_1,50,(float)p_reply->data[0])这个函数里面参数p_reply->data[0]的意义了。
! P$ `! d5 r& N9 }; x% Z$ S
4 l/ R8 m- T! s/ F
2、代码修改完之后,编译下载程序,然后就可以看到现象了。
+ R1 t" _- b" ]% F9 M如下图打开串口,显示模块连到的网络的信息:
+ `) S; t9 M1 n1 i
f8 W9 T1 O( _9 X
打开TCP&UDP,以客户端的方式连接EMW3162模块的IP地址后,输入HA协议规定的数据流,读进数据位的值作为PWM波的占空比,从而控制灯的亮度。
+ f V2 y0 [* C$ z; {9 B
3、试验现象:如下图读入不同的数值的时候灯的亮度不同。
% O$ c! g" r2 A: {
! s2 {4 ~( m, r c0 D4 ?' q2 j
# O" b" s- @* [; D
. r7 w% X w/ L& w1 X1 T! x3 i" n
6 P" R) s5 ^7 _0 j6 B ; p& X! C% K3 l$ ^- y- V$ ~
, W; y3 `9 y7 u7 i9 c/ s/ j8 y, G/ P1 U9 H& s7 C
% m* V: j9 Y" ]# ~