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

【方案秀】+ 基于STM32L073的脉冲计数 精华

[复制链接]
jinglixixi 发布时间:2016-4-26 16:28
     在色彩识别仪的设计中,主要是通过脉冲计数的方式来获取色彩值,因此对脉冲计数功能的实现是必不可少的。
在STM32L073开发板的基础上,配以LCD5110液晶显示器即可构造一个简单的脉冲计数器。LCD5110与STM32L073的连接如下表所示:
) Z/ ^5 F+ U& h9 e& B) X
  
序号
  
名称
连接
作用
1
VCC
3.3V电源
LCD5110供电
2
GND
电源地
LCD5110供电
3
SCE
电源地
片选控制
4
RESET
PC0
复位控制
5
D/C
PC1
数据/指令选择
6
SDIN
PC2
SPI接口数据收发
7
SCLK
PC3
SPI接口时钟输出
8
LED+
3.3V电源
背景光控制

! {! k% }2 W# Z! w
那么外部的计数脉冲如何获得呢?最简单的方法就是使用LCD5110的时钟信号SCLK来提供。
为了实现脉冲计数功能,并将计数值显示到LCD5110上,可在STM32L073RZ-Nucleo例程的TIM_InputCapture 的基础上进行改造来实现,主要的任务是添加LCD5110函数。
: B% I+ L! y2 q3 H$ R" u
为了控制LCD5110各引脚的高低电平,相关的输出引脚定义如下:
  1. #define SetLCD_SCLK_High()     { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_SET);}' Z/ g/ Y; |$ [# V3 X' r
  2. #define SetLCD_SCLK_Low()          { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);}" G' W* ^; x# I, L5 E+ }# [
  3. : D* @" u1 ]9 A* _" ~- _. D
  4. #define SetLCD_SDIN_High()     { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET);}  S7 R9 U4 @, O
  5. #define SetLCD_SDIN_Low()          { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);}' ~) }& G  @" v/ K) K! t
  6. 5 e; S, ]( K; A0 Y
  7. #define SetLCD_DC_High()            { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_SET);}/ ?6 |; @7 }( _+ O/ n9 L
  8. #define SetLCD_DC_Low()            { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET);}2 s, M% D) n: _- s8 K( t
  9. ; o% Q. P/ Z% D" L; K4 ^- c0 g
  10. #define SetLCD_RST_High()          { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);}; _4 j: k! m9 K" a
  11. #define SetLCD_RST_Low()            { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);}
      O* z- ^7 U& x  ]3 P. R" {  m& x

  12. : P" q4 g  k+ D
  13. #define SetS2_High()           { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);}- V$ u( ~4 Q, ~( h# J
  14. #define SetS2_Low()                 { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);}* z$ S& Y4 {" L  `+ C; I4 e5 M) z4 z

  15. ) H( F5 w' F3 p2 R3 s2 o* }' [
  16. #define SetS3_High()           { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);}
    . t4 I6 H5 u2 D/ z) Z4 N
  17. #define SetS3_Low()                 { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);}% F5 H8 F0 H2 G& F' V6 b' m
复制代码
LCD5110的初始化函数为:
. R0 G& `0 w" w3 i
  1. void LCD_Init(void)
    * f0 y. Z" C3 j
  2. {        
    6 Q' \& b2 z/ S/ `- K
  3.         //SCLK--PC.3
    + w/ S% W* _9 `) N7 U/ j
  4.     //DIN--PC.2
    " E9 ~$ Q8 S) z4 x# _/ l6 l6 ^* W
  5.     //DC--PC.1
    : g# x* \; o8 Z/ ?: w/ E
  6.     //RST--PC.0
    % \6 I3 x1 U2 u* s# F
  7.         __HAL_RCC_GPIOC_CLK_ENABLE();) L/ R7 ~. V+ J9 x, p, K" |( x
  8.         GPIO_InitTypeDef   GPIO_InitStruct;% w- W; }* f! r& G2 V
  9.         GPIO_InitStruct.Pin = GPIO_PIN_3| GPIO_PIN_2|GPIO_PIN_1| GPIO_PIN_0;, q3 a- D" C6 F, U" d
  10.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    # e. \' e/ K/ i9 K: ^" P7 F
  11.     GPIO_InitStruct.Pull = GPIO_PULLUP;
    : U/ G; K# I# c1 N! H" {5 P
  12.     GPIO_InitStruct.Speed = GPIO_SPEED_FAST;2 f7 e! t4 N0 }$ m
  13.     HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);- I* }% e$ S1 }4 ]/ ?) J
  14.         ! v. B2 Y$ y5 j- A
  15.         SetLCD_RST_Low();   
    6 X9 {$ f, f! O9 A" I. a6 s7 O
  16.         delay_1us();
    , x) \* B1 U  w7 U/ B0 |% i
  17.         SetLCD_RST_High();   
    % c. m/ e( F) R+ y- f
  18.         delay_1us();
    6 {2 j- ?; n3 L0 F2 g
  19.         delay_1us();1 A  p; \8 P: N  T
  20.         
    ) a. {$ s: i1 p5 [" A4 O& [+ B  y8 X
  21.         LCD_write_CMD(0x21);) Y9 H: s+ ?1 C9 J5 n
  22.         LCD_write_CMD(0xc0);6 C0 l( e$ y0 O: i  L8 A5 q3 c
  23.         LCD_write_CMD(0x06);& B1 c; ~/ H" L9 w/ Z+ q
  24.         LCD_write_CMD(0x13);
    ! l1 S% g1 t" N; u0 T4 |( }+ Z
  25.         LCD_write_CMD(0x20);9 M0 Z' }% G5 W& J( u
  26.         LCD_Clear();           5 x5 b5 j) _" C" e& ^! c/ I
  27.         LCD_write_CMD(0x0c);        ) p" b1 c+ S- S8 T
  28. }
    9 p# z1 p) r3 z: r6 t5 u
复制代码
所涉及的函数有延时函数delay_1us()和指令输出函数LCD_write_CMD(),具体代码如下:
% m4 v& o; b5 K- _% [
  1. long int delay_1us(void)
    ) n, J" }! m; h3 J+ X
  2. {
    * D! J, {. _0 u
  3.         long int count=2;6 y' g2 m9 J1 K6 X* z9 l
  4.         while(count--);" V7 ]  v5 G  s4 R$ x* |+ |. C' d$ E
  5.         return 0;8 B% o- n7 c, a; W( k, l
  6. }4 h) J# q1 i: s

  7. 5 G! S3 F" _! L8 Q
  8. void LCD_write_CMD(unsigned char com)& H! @" j" \# _  ]6 b
  9. {% Y5 v1 t& {$ m& D  c& y9 t0 [" @7 s/ f
  10.     unsigned char uci;" G7 o: ?* C! ^/ p- f3 q
  11.     SetLCD_DC_Low();
    " ~$ J2 G) C8 b7 V: D
  12.         for(uci=0;uci<8;uci++)
    : F) ]$ u( k, a  I
  13.         {. ^5 c$ @( D4 n5 U; n+ h
  14.                 if(com & 0x80)
    + D+ T) R9 ?" k5 {
  15.                 {, y. Z0 }4 X' D. Z
  16.                         SetLCD_SDIN_High();1 M* ^. f; ?9 R# |( u* F% \
  17.                   }
    7 O3 I9 `: {3 i( {$ i/ U7 G! t+ M
  18.                 else
    8 P5 _( u3 u: _! _5 K* U
  19.                 {
    : y" j  ~  W$ l3 X& m
  20.                         SetLCD_SDIN_Low();3 `# g, \; T8 g/ M3 x
  21.                   }0 f! W1 h# @0 |1 ^' V4 F0 c3 _  W
  22.                 SetLCD_SCLK_Low();        
    5 S+ B3 V: Z9 \9 v% W. E( r
  23.                 com = com << 1;
    # {6 x5 L, {$ R: a* `$ H$ E
  24.                 delay_1us();        
    / ?& M2 N1 G+ h+ S9 [3 i5 v* q$ }
  25.                 SetLCD_SCLK_High();
    3 s1 @. [6 K$ e
  26.         } . ?  B9 F1 g) l; i! Y
  27. }' x. Y& I( j( A) R+ w' E$ P! Y
复制代码
在LCD5110显示的过程中,离不开清屏函数LCD_Clear()和字符输出函数LCD_write_char()。
清屏函数用到了显示定位函数LCD_set_XY()和数据输出函数LCD_write_Data();
,其的代码如下:
  1. void LCD_Clear(void), f! R: m: f3 P7 _/ o
  2. {
    7 g" `: @. a8 p" l
  3.         int uii;
      t& b# D- W- m
  4.         LCD_set_XY(0,0);0 @) l8 D( {, w" `" g
  5.         for(uii=0; uii<504; uii++)6 u' j, ?) F9 n3 @' \  ?
  6.         {4 _  j/ y% S8 B$ v" l
  7.                 LCD_write_Data(0x00);
    5 m# m' H; N' a: F+ A' P: Z8 b
  8.         }0 |+ a: x+ w+ y* r' X: ?
  9. }$ T7 e$ w) i  }5 I( ^
复制代码
数据输出函数是通过读取字符库数组来显示字符的,其代码如下:' a5 Q" T2 F" E3 u) x; J0 A! P$ [
  1. void LCD_write_char(unsigned char c)1 q4 l1 d( j! M$ `& Z
  2. {
    % z6 n! e: T+ f* ?$ V
  3.     unsigned char line;# k0 D+ @8 F& N% z1 c) E1 ]
  4.     c -= 32;# H2 R# F! f7 n3 l4 A
  5.     for (line=0; line<6; line++)
    " ^+ V4 Q- _4 b
  6.         {7 Q; e% ?$ b" B& T* R0 D
  7.               LCD_write_Data(font6x8[c][line]);* l4 w( m4 u8 r+ }6 [0 U, i
  8.           }2 }) x. C' I4 H: F& x8 V
  9. }
    ! p4 k- y/ C' R8 \
复制代码
字符库数组的结构如下:
5 \! ~/ @$ q; x+ b# V
  1. unsigned char font6x8[][6] =; ]8 c6 ^  h" Z7 g; A, ^7 |
  2. {# y! q' j  u2 A  p9 y& M: ^/ P
  3.     { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },   // sp
    # g6 S. ]5 n/ T& _4 l
  4.     { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !: x' \. @3 K5 j- e- V( M
  5.     { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },   // "& C; k) o% M& r& U. |2 V0 S- v' p
  6.     { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },    // #. f1 `& e; i3 V! I, _
  7.     ... ...
    ) p$ n/ r: K* E# T. w$ J* m4 y

  8. 2 o6 d5 b3 T0 D8 {! h' b) B$ l
  9.     { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },   // x; N7 H& j5 B1 I. c
  10.     { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },   // y; G/ x3 K3 A3 C; t- n
  11.     { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z  t& j' H# r( x) V6 t6 e9 t) |" X
  12.     { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }    // horiz lines4 V+ u1 Z8 \: _1 f
  13. }
    + B1 p! j" q7 z; e! t
复制代码
主函数的代码为:) Z) V4 v  F; {/ i* y
  1. int main(void)
    * k* w- S  V0 V9 s, Z
  2. {
    3 N! n$ X' Z8 \. m$ d; v
  3.   HAL_Init();& d/ S" V( d0 c1 h7 P
  4.   /* 配置系统时钟到2 MHz */+ h4 R: x# f+ L$ E, P! {
  5.   SystemClock_Config();
    9 M, J5 S5 T$ x* E' \1 a# R8 b
  6.   /* 配置LED2 */
    8 W- b9 @  s  {$ m
  7.   BSP_LED_Init(LED2);$ }/ M2 ]/ c- v
  8.   /* 配置 TIM 的外围情况 */
    ; ~4 z9 z) `% K
  9.   /*  TIM2 配置: 输入捕捉模式
    4 {) u  O* {2 w  U& p2 }
  10.      外部信号连接到 TIM2 的通道2 引脚为PB.03  L  a+ Y. h% y! A% C/ q
  11.      使用上升沿触发,TIM2 的CCR2 用于 计数的频率值  */
    0 m  k& r- Y7 S+ a
  12.   TimHandle.Init.Period      = 0xFFFF;
    7 }" V7 d( {! E9 v
  13.   TimHandle.Init.Prescaler    = 0;
    5 T! k, U; G3 {) E/ L& g
  14.   TimHandle.Init.ClockDivision  = 0;& _/ w1 S& ]' L
  15.   TimHandle.Init.CounterMode  = TIM_COUNTERMODE_UP;. J5 Q( O9 `4 W& R
  16.   if(HAL_TIM_IC_Init(&TimHandle) != HAL_OK)" j0 |! i7 T4 `% |( |, ]% c! Y$ q/ a
  17.   {2 \- W7 W+ ^' _  Z
  18.     /* I初始化报错 */% r  n5 Q4 \. L7 j( j( I
  19.     Error_Handler();8 r5 H( Y: ]1 m0 }" c
  20.   }
    ) l+ m) ^" _6 K% W( X7 O$ ?6 J, S9 d
  21.   /* 设置输入捕捉通道2 */ , d7 }1 v) }5 y; `
  22.   sICConfig.ICPolarity  = TIM_ICPOLARITY_RISING;
    1 K# K! T4 U; l' i, U9 F% U2 @+ q
  23.   sICConfig.ICSelection = TIM_ICSELECTION_DIRECTTI;. T/ D% O7 x- S/ U
  24.   sICConfig.ICPrescaler = TIM_ICPSC_DIV1;
    2 z# a6 B9 U# L0 R+ G. b% z( N
  25.   sICConfig.ICFilter    = 0;   . z+ g4 l- e5 h8 O# [- T, L" O$ l- \# ~
  26.   if(HAL_TIM_IC_ConfigChannel(&TimHandle, &sICConfig, TIM_CHANNEL_2) != HAL_OK)
    * G& Q3 Q7 l* j* Z+ e* {! p
  27.   {: o0 E! ?: O/ M$ L2 d, W# q
  28.     /* 配置报错 */" B$ Z" n+ H- S5 `1 J
  29.     Error_Handler();+ m& ^0 N( f9 F
  30.   }, e* @4 h7 D( T6 ]; j
  31.   
    5 {3 s5 N' \; @$ f0 P3 h0 i
  32.   /* 以中断模式启动输入捕捉 */, ^* q. W* D# r5 }) W- R2 A0 `) Q
  33.   if(HAL_TIM_IC_Start_IT(&TimHandle, TIM_CHANNEL_2) != HAL_OK)
    6 k) ]  P' t6 e  T
  34.   {
    7 d9 n2 O9 k2 D, i0 i
  35.     /* 启动报错 */
    : w% G& d+ `) z8 Y
  36.     Error_Handler();8 ~3 O) W0 _  b$ f
  37.   }
    ! `3 ?( X- k5 G, P" {& E
  38.             LCD_Init();    // LCD5110初始化( d0 t/ j' t6 I# L* g6 {
  39.             jm();        //  显示界面& Z- }1 x& f2 ]0 I2 }' }( P$ _
  40.         // 设置显示格式3 g/ H/ j$ n5 h$ Q+ X
  41.                 LCD_set_XY(0,1);
    7 K5 r' a$ k) E
  42.                 LCD_write_char('C');
    : Y9 o( B- X$ ~
  43.                 LCD_write_char('1');* s- Q2 v7 V% k- s% }& N
  44.                 LCD_write_char('=');
    % L9 }9 A& m; I4 a
  45.                 LCD_set_XY(0,2);$ c( t# l, J% L% @# J7 L% ?# Q
  46.                 LCD_write_char('C');
    - V* V6 n& _0 f) d! G$ U& e2 t8 @1 ~
  47.                 LCD_write_char('2');8 @! M3 q8 [+ w
  48.                 LCD_write_char('=');# u  ~" u/ m- G% r, C4 T& G) t6 J
  49.                 LCD_set_XY(0,3);
    & N0 r* A0 Y6 ~( z1 H
  50.                 LCD_write_char(' ');+ ~- M( f  j& \% g# J* L1 G
  51.                 LCD_write_char('d');
    1 C/ h. O! d$ n$ H3 \5 L
  52.                 LCD_write_char('=');
    ! ~: ?, i/ l0 Z$ r
  53.             LCD_set_XY(0,4);
    , b0 Y2 L5 t$ i5 q
  54.                 LCD_write_char(' ');
    ' h/ }# c$ z0 ^4 o
  55.                 LCD_write_char('f');2 W$ ?- B& y, E( O, `7 s: M
  56.                 LCD_write_char('=');; Q  i5 v5 m; @$ X( W" J1 V
  57.   while(1)
    ) B) t8 f6 t0 q/ q
  58.   {     //  显示捕捉值5 L! S, ~7 p* Z8 h9 o
  59.                 LCD_write_number(30,1,uwIC2Value1);  |$ c9 |4 }& ^! T7 f: X$ g' Z
  60.                 LCD_write_number(30,2,uwIC2Value2);& I* g$ m) v1 g% V
  61.                 LCD_write_number(30,3,uwDiffCapture);: c: C, \4 S4 Y# ?4 E& P6 M
  62.                 LCD_write_number(30,4,uwFrequency);/ m4 `' `7 n! V6 h5 f+ Q
  63.                 delay_1ms(1000);  // 控制采集数据的显示间隔
    0 m9 c" c( Z0 g% _; G3 X- S3 e: W8 x4 i6 c
  64.   }
    3 `' W4 T( ~! q' A+ U, T
  65. }
    / j6 F) v0 c5 ^" v3 l' _
复制代码
定时捕捉处理函数代码为:
5 I# Z1 T$ J1 y& B
  1. void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
    / Y8 {" A* s3 u5 ~) H( a
  2. {
    3 a, v; ?$ h3 b4 ~6 E
  3.   if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)5 K0 E( A5 F2 C$ G: ?. o( P$ I
  4.   {
    # T  V1 L& b" `7 ]. w: G, b$ k) \0 k
  5.     if(uhCaptureIndex == 0)  |9 T$ Z! p* ]+ A" |
  6.     {) b7 ~% C0 E% c3 @8 f, u& R
  7.       /* 获取第一次捕捉值 */
    : ~6 m3 o0 I) X
  8.       uwIC2Value1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);
    & R+ j4 V; `! Y( i; m
  9.       uhCaptureIndex = 1;: \9 z) V: h( C' U5 p' N8 C
  10. }. A" B4 G5 [5 t7 W! @, C, e
  11.     else if(uhCaptureIndex == 1), v" u# o2 ~4 P) o; J9 H
  12.     {
    ' x: ]2 k1 b: ]( u5 q0 \; T
  13.       /* 获取第二次捕捉值 */
    : J% P8 |& d( S# N' t
  14.       uwIC2Value2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);
    ' T; \- u& d+ S/ P1 ]; w
  15.       /* 捕捉计算 */
    & S$ X8 x4 [- g9 ^
  16.       if (uwIC2Value2 > uwIC2Value1)6 j! X5 d( o, K
  17.       {) |. d" X, x% q* X7 J2 x2 G* l1 y; R" j
  18.         uwDiffCapture = (uwIC2Value2 - uwIC2Value1);            //  计算差值  " W+ \( S& \3 ?1 F
  19.       }
    8 i) }$ T7 U. f
  20.       else if (uwIC2Value2 < uwIC2Value1)
    3 Q* h$ E# k/ C' E, @
  21.       {
    2 w; @! c2 |/ J1 t& i' O
  22.         uwDiffCapture = ((0xFFFF - uwIC2Value1) + uwIC2Value2) + 1; //  超界补偿处理
    , S6 t1 F, W) f8 `5 W& s
  23.       }) z! }9 ^$ b, Q- N+ L4 C' L4 L  s
  24.       else9 O( D: E# L. C3 O% v% B. D$ Q
  25.       {. x# l# M; ]  U: o7 |- [
  26.         /* 假如捕捉值相等,则已达到测量频率的极限 */
    5 G. u& G$ N; m) F$ j( G# X
  27.         Error_Handler();                                     //  捕捉值相等时报错
    # M1 e* P, z; r- U- _2 Y# @: B
  28.       }- r! K% r5 @7 c# D8 q6 q9 l4 h4 Y
  29.       /* 频率计算: 这是一个以APB1Clk为TIM2计时的示例 */      - _1 A! X0 P5 |! I: J
  30.       uwFrequency = HAL_RCC_GetPCLK1Freq() / uwDiffCapture;
    & A. E, ?6 J& P; [
  31.       uhCaptureIndex = 0;8 x1 _8 E: t  \( O! `! G7 o
  32.     }! {/ e3 |- M1 e2 i
  33.   }
    * B* Y5 C0 D8 F: W
  34. }1 ~0 z5 n& F& H$ m9 u
复制代码
数据定位显示函数的代码为:
8 E( Z0 `7 Z* W3 s5 s/ O) O5 ^* I' X
  1. void LCD_write_number(unsigned char X,unsigned char Y,uint32_t dat)  k4 ~( ?& i! M  b9 Q9 C0 `
  2. {
    $ s: L' o; P8 }* w
  3.                 LCD_set_XY(X,Y);# [! e  f9 D  r3 {1 S
  4.                 LCD_write_char('C');8 I4 S8 s/ E# R& L/ o
  5.                 LCD_write_char('=');
    ( Z" `5 T8 v; A2 `4 L) m' {# g, o7 ^
  6.             if(dat>999999) LCD_write_char(dat%10000000/1000000+0x30);
    - a  O! C! I% B2 Q
  7.             if(dat>99999) LCD_write_char(dat%1000000/100000+0x30);% I, V5 ?% c% {2 Y: h! o" E3 U
  8.                 if(dat>9999) LCD_write_char(dat%100000/10000+0x30);
    0 k2 \) C) ]3 F, R" L
  9.             if(dat>999) LCD_write_char(dat%10000/1000+0x30);
    : H% D4 w' q! z6 }7 I( f
  10.                 if(dat>99) LCD_write_char(dat%1000/100+0x30);
    0 X/ t/ N9 f& r& x. V
  11.                 if(dat>9) LCD_write_char(dat%100/10+0x30);
    ; s$ m8 P. I6 Y$ h: b" O0 L! T
  12.                 LCD_write_char(dat%10+0x30);9 L: H6 T, X# N1 }! r
  13. }
    6 i, x2 E  H- I% l, W/ f
复制代码

6 |- Z4 h' W) |# j
, ~" A. Z# [) v, d
a.png

评分

参与人数 1 ST金币 +20 收起 理由
zero99 + 20

查看全部评分

赞 收藏 5 评论10 发布时间:2016-4-26 16:28

举报

10个回答
df_flying 回答时间:2016-4-26 16:40:16
东西不错哦~
jinglixixi 回答时间:2016-4-26 16:43:17
d与f的值基本不变,c1和c2值是随时递增的,到界后再从零开始计数。
沐紫 回答时间:2016-4-26 16:47:33
谢谢楼主分享
jinglixixi 回答时间:2016-4-26 16:55:32
后续再将TCS3200色彩传感器加进来,依次控制芯片内部的RGB滤色处理来输出RGB的色彩脉冲,以获取RGB色彩值,为RGB到Lab的色彩模式转换提供支持。
埃斯提爱慕 回答时间:2016-4-27 10:53:46
提示: 作者被禁止或删除 内容自动屏蔽
jinglixixi 回答时间:2016-4-27 12:19:06
感谢!      
sxdahss 回答时间:2016-9-27 14:26:21
麻烦楼主把程序工程分享一下
jinglixixi 回答时间:2016-9-28 08:48:08
sxdahss 发表于 2016-9-27 14:26
' {+ f; R! b- F. F, z5 Y! H4 I麻烦楼主把程序工程分享一下
8 i, e6 \0 O4 r* C
你代码放到STM32L073的相关例程中进行编译即可,我做的主要工作就是为它配上了LCD5110屏的驱动显示等,你试一试就知道了。
sxdahss 回答时间:2016-9-28 09:10:38
jinglixixi 发表于 2016-9-28 08:48$ e: N' c. [  [! l/ @6 T$ b
你代码放到STM32L073的相关例程中进行编译即可,我做的主要工作就是为它配上了LCD5110屏的驱动显示等,你 ...

0 g5 |+ w8 y8 X2 ]我已经下到了官网的例程,谢谢你
zhangdaijin 回答时间:2016-9-28 09:11:32
谢谢分享

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版