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

STM8 控制电脑风扇转速 4PIN PWM

[复制链接]
abv123 发布时间:2018-1-6 21:20
一个很简单的例子读取电位器电压,然后调整占空比3 x* X3 v7 n8 ]) V5 S

* |7 P4 u" H* M% n2 ?% E* b* x. \ AIS_AIR_V3_11_3.png
' ?. r0 O* Y1 | AIS_AIR_V3_11_2.png : L$ q* m/ X' C: n- V0 ]% P" s+ V
AIS_AIR_V3_11_1.png / p, p3 G% a, E+ f* s
* r) d% k) ]8 {; J5 S3 h
程序代码:! ]! _8 p! _4 {& Z3 B& e. a
  1. #include "stm8s.h"7 a- |! m9 U( f/ E( X! d
  2. #include "stm8s_gpio.h". T9 E9 D; g9 B% u: R

  3. 3 v( C( G+ V# S. t7 `* Y: [, R
  4. #define PWM_F  640+ T+ B) d1 H) X& A

  5. ; m  R- L' Q5 V
  6. uint8_t HexTable[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};8 m; ]* w+ |; q% h: V
  7. uint16_t CCR1_Val = 100;4 b: b" M1 S+ d0 w! I5 F4 N

  8. ; Q9 E- s( D" ~  Q: v
  9. void DelayApi(uint16_t uwDelayCnt);
    * e  c0 p& ~2 n4 {: ~$ N1 f
  10. void TIM2_Config(void);
    ; k0 e. G5 ~/ E6 D: M
  11. ) L# Y: z; {+ S& y
  12. void Init_UART1(void)
    ) n2 v; l: {; ~
  13. {
    9 M$ ]; G% R7 W
  14.         UART1_DeInit();
    : n  x- c; y: R# d: o. I
  15.         UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TX_ENABLE);# i" B, a5 ]# \  G5 [+ J
  16. //        UART1_Cmd(ENABLE);
    3 |1 p0 a) V. r2 a3 S/ c: d
  17. }. b9 N7 P1 |9 A; W9 @9 @+ {
  18. void Send(uint8_t dat)) d+ o* d+ ^. N  l/ Y9 ^& L4 i' j
  19. {9 t4 w% J9 `: A7 u+ P2 R
  20.     while(( UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));
    - J8 _" N" ]* E
  21.         7 i  ]/ F* q( G7 o5 |
  22.     UART1_SendData8(dat);& \2 G) ~  d/ x5 [. O+ {  r' i( u
  23.         - E2 N7 s2 K' u8 f: \( M
  24. }
    . T% B+ |9 k. m7 Q/ O
  25. void Init_ADC(void): L+ j. q$ m6 P0 N
  26. {( q) K0 P+ P* t& C8 p: u
  27.         //GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_IN_FL_NO_IT);
    ! C  S: ]+ Q) K; Y* P+ r3 F: o. ~
  28.         ADC1_DeInit();8 m8 H% x/ V+ t6 j- X1 R0 y- Y
  29.         ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_3, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL3, ENABLE);9 ~' T2 A; m$ V1 n1 A( Y
  30.         ADC1_Cmd(ENABLE);
    ( o1 V) `" }& Y: L! G
  31. }5 i; v; Y! }7 w. P+ ^
  32. void UART1_sendhex(unsigned char dat)
    ( P8 l( {  ~: ~) T8 H6 Q- J3 Y. {0 y
  33. {
    , ?6 o5 q; w) i
  34.     Send('0');" m1 n3 F0 k, r9 W) n  @  `
  35.                 , L, Z7 e% q9 v2 J1 n# D
  36.     Send('x');+ b0 \7 b1 X9 l5 S
  37.                
    0 q* y0 @' Q; q. }" D9 n% O& s) T
  38.     Send(HexTable[dat>>4]);
    . k: I6 n, d* S4 C3 w, j- X, g0 q
  39.                 - U* _+ G6 N0 t! k! T9 q6 U
  40.     Send(HexTable[dat&0x0f]);
    7 m) S+ r) v' f2 F, K( U
  41.                 , ~2 `+ q8 W/ o+ e
  42.     Send(' ');
      j8 j# W' B4 ~$ a7 B
  43. }
    + b$ d7 n  U3 l. C4 b. b
  44. void UART1_sendstr(unsigned char *dat)0 g3 [: ~- r2 b  W3 l4 K  k3 P8 T
  45. {
    & ~. }6 \; j9 H8 S
  46.     while(*dat!='\0')
    6 e, J& ]0 z* q" w* R
  47.                
    2 L2 k2 y2 v8 w( [1 g* d0 n! l, \
  48.     {
    2 G' W; H" @# [6 e' ?# }, d! _0 b
  49.                                
    - `( j4 U+ T0 T- Q
  50.       Send(*dat);
    # z2 w. `: Y1 z5 u6 h& n% h/ `
  51.                                 $ w, k! k8 X' j. b# R3 h4 d( N* u+ I
  52.       dat++;
    - M4 w' Q: o6 o& Z, x
  53.       //delay2us();) N; q% U+ p, I: W+ [; N. M
  54.                 0 ~: L; P2 b, P8 J$ \3 ]
  55.     }
    / }' r  Y4 v& n+ {! \
  56. }$ A( q& J+ l3 ]; y6 n
  57. void main(void)
    ( s' [- S* g6 ~$ |" a
  58. {
    9 @+ ^/ e$ O' G4 m9 {& W
  59.     //FlagStatus flag_status;3 g' v6 T7 U1 O- W
  60.     u16 u16_adc1_value;( M" u9 M6 `6 V! w! P( T' d
  61.     //Init_UART1();- v+ Q4 Q* w  W, s: V! }
  62.     Init_ADC();
    & d% I8 c* D4 [1 v2 S4 {/ E0 {
  63.     . h7 f1 w7 s- R: y3 K% M, M
  64.     CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//16/1=16MHZ
    ) k. f! J) ?) L
  65.     GPIO_DeInit(GPIOD);
    * F: d  v9 C; b" _$ o7 S) m( H; j
  66.     GPIO_Init(GPIOD,GPIO_PIN_2,GPIO_MODE_IN_PU_NO_IT);
    * k' z& @: [) K8 Y* ^4 f
  67.     //GPIO_DeInit(GPIOD);
    # H3 v5 d( y# U: V& I  O% o
  68.     GPIO_Init(GPIOD,GPIO_PIN_4,GPIO_MODE_OUT_PP_HIGH_SLOW);0 ]! j& y$ Y) d' Q' l* v" [
  69.    
    1 r2 H* _( @" o! {7 K, ?
  70.     TIM2_Config(); - Q0 u) N3 x- X3 c
  71.     TIM2_SetCompare1(CCR1_Val);, ?6 {" C# }# [$ P4 g+ k- {
  72. /* Infinite loop */6 s4 e8 v+ Q9 H% E3 k1 G( e
  73.     while (1)
    . T$ W: d' o- j+ M# S0 k' H
  74.     {
    * V2 u: L, u0 Y* b/ i4 K
  75.                 //Send(0xf0);
    ) t" D/ p; n. A& _$ m& }
  76.          ADC1_StartConversion();
    8 E! Q# r' S. d8 q. ?$ n$ D( }
  77.          //flag_status = ADC1_GetFlagStatus(ADC1_FLAG_EOC);8 }* S: G" M9 |+ d' k# B
  78.         // while(flag_status == RESET); // SET or RESET
    4 m8 Y, h) }! q9 z' F5 m, a
  79.          while(RESET == ADC1_GetFlagStatus(ADC1_FLAG_EOC)); 9 S6 W0 K3 Q  R' S- J8 ?) n3 E4 p( N1 V
  80.              u16_adc1_value = ADC1_GetConversionValue();2 q, f! y5 i% x% L- v
  81.          //CCR1_Val=u16_adc1_value*2/3-66;9 {, y% E/ I3 Y
  82.          //CCR1_Val=101+u16_adc1_value*10/19;& w$ h4 R) Y8 q+ I
  83.          /*if(u16_adc1_value<180)9 q1 `5 W. z6 E6 F
  84.          {! K7 H( c- r' ~/ b! p& W9 A' P
  85.             CCR1_Val=70+u16_adc1_value*2;/ N" c7 g( Y7 h+ u* M
  86.          }else0 x7 n5 k" h( ~3 |' m, a$ ?' p
  87.          {
    # C. G  p, r. [$ Z: z1 i! x8 ^# e
  88.           CCR1_Val=460+(u16_adc1_value-180)*10/47;
    5 L/ Y6 K2 U8 }: F: U! T3 |
  89.          }
    7 H+ X2 G8 {4 `4 N* m$ {. @
  90.          */# Q/ n& O& }. p4 O- D
  91.           if(u16_adc1_value<180)" [/ A& @; f( t6 }
  92.           {5 d  r) h, ]1 N6 O2 B& A
  93.             if(u16_adc1_value<100){u16_adc1_value=100;}8 j& ?- K: Y, E  U! B, T! `
  94.             CCR1_Val=u16_adc1_value+((u16_adc1_value-100)*36/10);! W( `0 E/ y" @$ A, ?5 G9 s! {1 a1 f
  95.           }else) p& L& R, ^4 \  X
  96.           {+ L* R. T# \: }0 l5 h
  97.             CCR1_Val=460+(u16_adc1_value-180)*10/47;
    / K, _) I( ~& d' i) F6 X7 n. }  Y
  98.           }7 i( K: [' H6 @. h2 h/ \) k) v
  99.            
    $ f' k4 ~1 G, ]; W% `
  100.          if(CCR1_Val>30000)/ X: l' j6 ^( s$ u9 W8 a; x, s
  101.            CCR1_Val=0;
    2 M4 t3 ~6 R+ h3 v8 E
  102.          if(CCR1_Val>PWM_F && CCR1_Val<2000)
    2 ?% F! Y0 W) }8 e2 n
  103.            CCR1_Val=PWM_F-2;
    ; m  K# M4 \: t% `7 B$ E
  104.           TIM2_SetCompare1(CCR1_Val);, t7 w9 g* j! }- {3 d9 V
  105.          //UART1_sendhex((u16_adc1_value>>8));
    6 i% F# Z( @  r6 g3 Z  V
  106.          //UART1_sendhex((u16_adc1_value&0xff));! t) Z  [9 D# t* G$ S+ b! V
  107.          //UART1_sendstr("\r\n");3 b! ^4 e6 S- M) e" ^! `( Z
  108.          / [- m1 ]& d- L. T5 m1 }" i
  109.          //GPIO_WriteReverse(GPIOB,GPIO_PIN_5);
    1 U# w+ ~7 i1 k+ @4 e- k
  110.          
    " k. N& y: l2 v$ c. P4 R
  111.   }. m. r. Q& W* u1 }7 n0 [4 G
  112.   
    - E* H. r* O0 y* Z6 g
  113. }1 X0 |) J% v' A* n  a: b  ~& H) k

  114. , y+ j8 R* B3 F8 ^8 O: g! g* M) j
  115. void TIM2_Config(void)- z% }; Y6 }/ v
  116. {  k) F" P: S, W, C7 M

  117. 7 G# z: A  H4 D  W0 f
  118.   TIM2_TimeBaseInit(TIM2_PRESCALER_1, PWM_F);$ x. ^# Q2 M0 v( u& @4 r
  119. : e5 F/ }6 |& g* n7 t8 A% I
  120.   TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR1_Val, TIM2_OCPOLARITY_HIGH);! A  K1 O/ V1 T' {2 @3 g! c+ M
  121.   TIM2_OC1PreloadConfig(ENABLE);
    2 t# s6 t% e. j  h+ P+ H! {

  122. " h- H1 _( i) h+ C9 u
  123. //  TIM2_OC2Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR2_Val, TIM2_OCPOLARITY_HIGH);- Q8 E) p( r' o  s
  124. //  TIM2_OC2PreloadConfig(ENABLE);% d5 W  y6 D4 w* ?
  125.           . Y5 i% \$ y9 x4 \. I/ v
  126. //  TIM2_OC3Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR3_Val, TIM2_OCPOLARITY_HIGH);
    : ]& f6 q' K) @* D$ w. D6 s
  127. //  TIM2_OC3PreloadConfig(ENABLE);
    5 R, d1 S" \1 G8 N
  128.   TIM2_ARRPreloadConfig(ENABLE);
    . T% G8 h' D6 e, h% M# y, Z

  129. - D% A2 H9 F8 h# d+ r
  130.   TIM2_Cmd(ENABLE);
    ' V4 z8 o0 ^% |( P
  131. }) B0 W6 f* _$ z! n  c2 s7 v2 p

  132. . b6 ]' T+ K% m8 W- e7 f
  133. void DelayApi(uint16_t uwDelayCnt)% t5 |) X8 k. \( D" e  }2 d2 S
  134. {/ B6 c8 |2 o- H6 z
  135.   while(uwDelayCnt--);+ ~/ ]0 ^3 g" U- N' b) J% X
  136. }
    0 `& G, y* f0 p9 x( q' E, B" Y4 ^

  137. * i9 `! N3 x  I' n0 l9 q
  138. #ifdef USE_FULL_ASSERT, _3 h! Z1 u! @
  139. 5 k% r+ N* A: k% ?8 O0 E
  140. /**
    $ s4 H# |4 F6 M( Z
  141.   * @brief  Reports the name of the source file and the source line number
    % P$ }- l4 ~+ h3 b4 @
  142.   *   where the assert_param error has occurred.
    9 a6 y8 T  |9 w. P) D2 h; Q. q9 }3 D
  143.   * @param file: pointer to the source file name
    2 F* m7 U# \7 b7 A7 {8 P6 g+ p& z1 _
  144.   * @param line: assert_param error line source number  Y8 G5 ^3 z& l1 i
  145.   * @retval : None6 v+ N6 a% p% Z$ u4 M- y/ j) a
  146.   */9 G$ f+ M. M2 [7 ~/ Q
  147. void assert_failed(u8* file, u32 line)
    ' c7 E# `! H  j( t
  148. {
    2 x  H; J$ g+ K/ z, }, {
  149.   /* User can add his own implementation to report the file name and line number,- R0 G! I7 v" |  p4 C
  150.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
    & k+ S; A& T+ [% h. p4 M& x
  151. 6 \* e2 _: ?: n* F' s  F
  152.   /* Infinite loop */# F. c' q! `2 S( H: b  C+ D
  153.   while (1)
    0 u" e* T" r) p5 Z" `
  154.   {9 p1 T" v4 t  x: x* d
  155.   }4 D0 Q; N5 ?: l. Z( V- q
  156. }# Z- r% s( T3 \* ^5 M2 r0 N
  157. #endif
复制代码

4 w2 s: W" ?" S$ x3 t
- `1 `4 k/ E2 H1 c/ K2 U程序文件打包下载(IAR 包含原理图大图)
4 ?! G0 R; D, Y链接:https://pan.baidu.com/s/1i5aShzn 密码:t8rc; {2 w+ {& k# J$ f4 N! B3 W% C3 g6 ?

评分

参与人数 1 ST金币 +2 收起 理由
爅爩灙欟旝巘 + 2 很给力!

查看全部评分

收藏 1 评论5 发布时间:2018-1-6 21:20

举报

5个回答
robter 回答时间:2018-4-4 20:46:55
很好的资料,感谢感谢
hclin-146115 回答时间:2018-4-9 03:16:29
链接已过期
1315150719@qq.c 回答时间:2018-6-9 10:35:43
感谢分享
xanadu2009 回答时间:2018-10-17 21:04:05
7 i" y$ C3 T& j3 _+ Z$ N$ s% e, O
感谢分享
robter 回答时间:2018-10-25 08:03:11
很好的应用实例,学习了

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版