本帖最后由 徐雅平 于 2015-2-13 17:05 编辑 6 N7 M' V/ L2 x d3 U! ^
& R$ i3 {2 G& ~7 ^体验完MICO神奇的功能后,小白想自己也用一下MICO,于是就选了一个最简单的试验开始:控制灯的亮度。为了深刻的理解WIFi的功能,试验中我分别体验了以下两个试验:
1、直接输入PWM占空比的值控制灯的亮度;
2、通过WIFI模块传输PWM的占空比,从而控制灯的亮灭;
控制灯的亮灭要用到关于PWM的函数,所用到的函数块是:MicoPwmIni
tialize()
和MicoPwmStart()
。 【Q】如何找到这些函数定义的地方?
PlatformCommonCortex-M3
STM32F2xxMicoDriverPwm.c
中有定义了PWM
的初始配置的函数MicoPwmInitialize()
以及启用PWM
的函数 MicoPwmStart()
,这些函数在MICO
中都已经写好了,在我们用到的时候,只要找到相应的指令修改一下参数即可(详见下图)。
# j& K+ E: z( ^
' Z: l( I) r/ T2 r
/ g3 V1 u* O' @3 r1 b
# R# x/ a \) T5 |! q# p
% k) N+ U* L; ~. h) J: d
! s* L) ]% T& s' s; i
【试验一】直接配置PWM的占空比调节灯的亮度
修改程序如下:
0 U0 h; X ?: y; V3 o5 `6 W, ?6 w! C
在COM.MXCHIP.HA-EMW3162MICOMICOEntrance.c下找到int application_start(void)这是应用程序开始的地方,如下图:
: R' A. M& D1 `. H6 v ) z" k. R u8 v t: i+ g- n
8 r. I1 {" U$ k9 }/ }! p; m
在红框所示的位置加入如下代码,红框前面的语句是初始化的一些配置,调用MICO库函数即可点亮一盏灯。
4 n9 x' [ s) \8 a8 T! D1 {
; H2 l, Y9 Y. z% v% P
【Q】代码写好后怎么在硬件上找到PWM波形的接口?
在COM.MXCHIP.HA-EMW3162PlatformEMW3162platform.h中找到EMW3162 on EMB-380-S platform pindefinitions ...这里面是EMW3162 引脚的编号和功能的介绍。由于用的是MICO_PWM_1,找到所在的位置,用到硬件的引脚是MICO_GPIO_10,即编号为10的引脚。
8 J6 [+ c7 D6 t: z5 `
6 r+ [6 j( `7 [% J3 U 6 x6 I' I, \! |
/ c' K! s9 N1 ?. j9 k0 y
4 _4 z8 k) Y' ~, `" S5 }$ `
在这个引脚上引出一根线,接一个灯,灯的另一端接地。然后编译并下载程序。
* W; g5 f# g' v9 I2 N: K6 L ; ]2 r5 [5 N7 M
如下图是占空比为60%的亮度:
% c3 T1 S1 A% P8 W. I
3 M8 R2 O% h0 @
5 Q9 q" U1 R4 \
【试验二】连网控制灯的亮度
连网方式是通过EMW3162的WIFI功能读取输入的数据,数据流是以HA协议格式传输的,十六进制输入的数据在MICO程序处理后作为PWM的占空比,从而达到连网控制的功能。
1、修改程序:
3 r5 a3 v9 t3 N2 a6 F" [3 ~ 找到文件COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.cHaProtocol.h里面的关于HA协议的枚举定义的地方,添加一个变量CMD_PWM。
& v; |! @& t% Z. T, \$ ~8 H 5 @: `# r5 t2 k! G8 Q5 n9 C. r; Y
然后在COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.c文件中找到调用前面定义的枚举的地方,添加如图红框里面所示代码:
5 b4 X( V+ D! T8 U 代码分析:里面用到了p_reply这个量,追踪其定义的地方,是定义了一个mxchip_cmd_head_t*结构体的变量。
0 K) n9 _$ p' P |% e" ^9 y# [
2 D8 R9 }* N( u9 ?1 n5 T" Y; s
下面是mxchip_cmd_head_t 结构体的原型,这是HA传输数据的协议的格式,
1 @' H% S/ g6 u. ]& J
通过这个就知道MicoPwmInitialize((mico_pwm_t)MICO_PWM_1,50,(float)p_reply->data[0])这个函数里面参数p_reply->data[0]的意义了。
0 w& z! _% z5 ^
6 e7 M7 {$ ~: ?. J- ]
2、代码修改完之后,编译下载程序,然后就可以看到现象了。
8 q6 c& S% U0 X$ r0 l( o
如下图打开串口,显示模块连到的网络的信息:
8 {, r. b! A5 n3 B, g
) V/ v B* @! Z
打开TCP&UDP,以客户端的方式连接EMW3162模块的IP地址后,输入HA协议规定的数据流,读进数据位的值作为PWM波的占空比,从而控制灯的亮度。
; K. V8 \" ~+ A3 o
3、试验现象:如下图读入不同的数值的时候灯的亮度不同。
3 S. H; F/ h u
. {5 y: t2 _. I/ {4 ]( w
0 {. d) B! c1 j* N# V: b 1 M' u3 U- g- M6 {# e( Q1 e
7 B" O. ?6 F* t1 E2 C$ u b
) G- j8 G1 K ^: E* V. b
. u. n6 |9 ~; `& a. J# K5 Y" Q
. r, h- F4 C& h6 u
* b7 j& l% x/ b