你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F072B-Discovery板子实现触摸调光例程,仅供参考

[复制链接]
nyszx 发布时间:2016-3-31 12:35
本帖最后由 nyszx 于 2016-3-31 12:51 编辑 , q8 z% g3 p4 R; d
. E9 P$ H6 j/ r/ r" i
有幸得到的STM32F072B-Discovery板子 ,现在又对 NUCLEO-F446ZE 开发板(重点在F4+eth)垂涎三尺。第一次接触STM32的TSL,官方带驱动,有时间就搞了个触摸调光的程序测试一下。给大家分享一下,玩具级,比较简陋,大神勿喷。仅供测试参考。
7 k6 A" l6 ^* B' D4 |% c( q2 C& |7 B
所需材料:除开发板外,一个发光二极管就OK
# p" t# G2 p& d6 r+ w就是这么简陋!& N- e& S: @& F+ e1 z& [
为了实现调光,当然首选PWM输出驱动LED,本人很懒,找了个白色发光二级管,连驱动电路都没焊接,直接把管脚用手掰一掰,卡在PA1和VDD插针上。
. W- M) @8 }4 `  X+ l% o* O" X- O' t( {/ Z: ]' H" P
程序是从自带Demo程序中改的。只留了TSL部分。) ~* U$ F* P  `" K1 L  m3 f" |

9 p1 \# U7 I, s5 [8 e! hPA1配置为TIM2 PWM HC2输出。很简单。
3 H8 T! M& T( s1 T4 I! `  /* TIM2 chennel2 configuration : PA.01 */
. i4 Y( G% o' ^2 q( w: e  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_1;% K8 ~" _* Z3 J( o" I5 u
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;( l5 \* Q; o% P, S9 {7 p' g' H
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- Y, `# ?/ e( l7 S" A4 `9 |/ |6 M  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;2 `. r0 Y3 y3 W" S
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP ;- P. Q- l' q9 `; |
  GPIO_Init(GPIOA, &GPIO_InitStructure);
/ w8 S. j) R2 A& K  * w$ \1 P1 t  K( d2 C( H
  /* Connect TIM pin to AF2 */
3 H0 O$ K6 G8 P7 c; Y" V  GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_2);+ P' v& M+ k% Q. T5 }3 z+ F% V! h5 l
  ?8 D+ P# f# {0 j0 ^0 m
接下来就是配置TIM2:
5 K( Q7 H, f& W, d  L0 P" i/ P0 k( M
0 ^  H' ?8 q# {9 U9 B; ~TimerPeriod = (SystemCoreClock / 10000 ) - 1;& u8 q4 j# z+ j8 f" Z
Channel2Pulse = (uint16_t) (((uint32_t) 10 * (TimerPeriod - 1)) / 10);
  m1 L3 s& V$ Q3 n0 i3 k) Q, [" e& w; b7 o
  /* Time Base configuration */
% I1 {7 }5 p& w0 z  TIM_TimeBaseStructure.TIM_Prescaler = 0;
+ y1 k+ H, r& q# V1 j  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
1 f+ B* Z! [, l  TIM_TimeBaseStructure.TIM_Period = TimerPeriod;
% y& R& Q. F4 `) l  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
: _0 K. i3 j. S9 Y0 Y  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
& N5 Z0 {9 s$ c% J2 n) J3 h8 z! u# o
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);& t- h8 r& n- G6 Y& ?8 f3 [
  q, K- B" t1 ]' v# q
  /* Channel 2 Configuration in PWM mode */% C/ E% n" V) C
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;2 }+ Q" ^- i3 v% |( _0 o
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;' ]/ T8 {- G, i3 M- g8 `( Y0 ^
  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;- d9 W; R4 y0 C, Z$ k
  TIM_OCInitStructure.TIM_Pulse = Channel2Pulse;
, ~1 z3 v: ^6 B% y2 s  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
; v  d- V% u: h1 C* b6 Y8 |2 B1 f  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;, ]: q) x7 G1 o6 R  Y0 h
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
% |8 f$ [* t# W# T) c7 a  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
* N% d& D3 T- d# l! H) e" G3 G+ u3 z2 z4 U$ i6 L  [) \
  TIM_OC2Init(TIM2, &TIM_OCInitStructure);
2 g# G+ j2 ]- c2 c* V1 s* k  b: a" P; m$ J( \
  /* TIM2 counter enable */: w' e6 T% h1 h7 X
  TIM_Cmd(TIM2, ENABLE);
7 H& A+ p) X4 T* C  @' ]# U/ g2 A$ G( V+ Q( u6 D  F" H
  /* TIM2 Main Output Enable */) V' U8 A( [8 q. n/ \7 I! H4 j
  TIM_CtrlPWMOutputs(TIM2, ENABLE);
1 e7 E' R2 ]! }. R/ L" s' |1 i6 {6 n6 Q( A! @% O2 L
接下来配置触摸检测部分:8 P) U% f, b% _* Z/ C6 E1 D; _. R. ~
亮度分了50级0 ^- o9 D9 l  d4 N- ~
if (TSL_user_Action() == TSL_STATUS_OK)- O8 K5 A& i( }2 f
    {      
6 Y- k8 s; C+ A  L& V- |2 i       if (MyLinRots[0].p_Data->StateId == TSL_STATEID_DETECT && MyLinRots[0].p_Data->Position > 0)
. f1 M' N5 ^, B4 O7 g" t                {
; @2 h. `2 {, r8 ]1 C                        T2=MyLinRots[0].p_Data->Position;& ~8 A: R* u2 X9 K) j; ]
                        if (T2<    T1)
7 {5 y  D  j/ V8 S+ Y$ r                        {
1 X/ G* R  m9 v                            if( Pulse<51)Pulse++;- p9 @: L! f! C; {4 C
                        }* B* E7 r% r: I3 K8 L
                        if (T2>    T1)0 ?. t4 W6 H- f0 |
                        {
0 Y( ]4 j. Y$ e                            if( Pulse>0)Pulse--;
; Q5 W# l" h* u4 ]: Y2 I5 l                            }
; E! g8 {; {* R. Q                        # L& S; `4 ?1 ~* _8 h
                        T1=MyLinRots[0].p_Data->Position;
2 l) u5 R' ~$ H0 P( {! |7 f% g( X                    }) u: P7 v; D* g' x( }
    }2 f! y9 }+ v- H' Z# J
        Channel2Pulse = (uint16_t) (((uint32_t) Pulse * (TimerPeriod - 1)) / 50);
; V. A- Y: Y1 W9 u) \        TIM_SetCompare2(TIM2, Channel2Pulse);7 q( O# _5 j5 V" F' `. t; f* |) G7 o/ @* ^

: ]/ P3 b, u( v这里其实还可以优化一下,比如没有触摸时就不用设定占空比了。
: l+ x/ A0 Y: J1 [! a, C% H4 Q7 ~/ p其他的没用到的都删了。: W+ d7 k# y. I0 s) [2 F& y
. U5 B  A4 |- v( c+ a
编译下载跑起来。视频:
; E6 v4 j: {- g
8 W4 A, @! l- u. p% @% D* b6 n
: C9 n# [! U* o  W6 n0 s
忘记传代码了,补上
) J% f9 V+ G. L# A! P+ C STM32F072B-Discovery_FW_V1.0.1(调光).rar (2 MB, 下载次数: 41)
收藏 1 评论2 发布时间:2016-3-31 12:35

举报

2个回答
zhangdaijin 回答时间:2016-3-31 13:03:46
谢谢楼主分享
沐紫 回答时间:2016-3-31 13:15:02
谢谢~
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版