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

【STM8-SO8-DISCO】+ (1)基本定时器四中点灯

[复制链接]
damiaa 发布时间:2019-1-22 11:10
本帖最后由 damiaa 于 2019-1-23 15:42 编辑 : g& M1 d. S* q4 I" o  V* g
8 T* c( ^  k7 j% q$ T( `
【STM8-SO8-DISCO】+ 基本定时器四中点灯  % n8 f( \8 M* \! U, }( [
小8芯的STM8S001 只有TIM1,2,4。 TIM4为基本定时器。只有些基本功能。用它最好理解了。
. P# }7 c( c3 W$ n# [8 D; M先看一下原理图:: }' T2 f. E$ y' p* K, L
1 t& o+ o7 e- ^; i; Y' x
- [9 W  R" Y0 h1 a+ X' r0 o
' ]# P3 K& N7 L7 y7 w* f  C5 L" k
QQ图片20190122164711.png 2 H, |2 T# F1 N+ o- f" U
IO口1 PA1/PD6/ x0 j' U- m8 q3 x- [
IO口5 PA3/PB5
. `0 F  Q. ?& m- Q( Q& nIO口6 PB42 Z9 l$ b# f+ v9 V, J  l% E% Z% d
IO口7 PC3/PC4/PC5 上面四个IO口可以用
* y. {* D+ n" ^IO口8 SWID不能占用/ i/ T" w: s+ d- m3 f( S
IO口7用到按键了,IO口5用到LED1了。
  Q& C, ?' S( r0 b) x0 H3 D, @) ]可以根据情况使用。) |: D) _  d0 @1 X- o

2 T" }# m9 l! w7 e5 P  ?+ _0 z下面开始
$ L" }; C0 [7 h5 E0 s' ]. G3 X
& L% a6 Y9 P  z1 R$ Z( ?! I0 O/ i2 c* [! ?0 D
1,安装IAR开发环境。
1 f) M0 H3 P# @' L. M2,申请一个免费的lisensee。, r% c1 M0 u$ p# u7 C* L
3,建立stm8s001test目录,在它下面建立:project,user,libraries三个目录。
* F' G( }  D$ }0 |4 }+ M+ J3 u9 h) R3 k QQ图片20190122110421.png
* ?2 E% e- W, L, \: S& m# @) [4 Z0 \" Y7 F
4,拷贝一个STM8的工程模板到project目录。& t5 @' t- H) X" `
5,拷贝main.c stm8s_conf.h stm8s_it.h stm8s_it.c到user目录。
" w4 u" p6 {% |- g/ f& q0 X6,拷贝库文件到libraries目录。5 ?! g! B, ?; g8 V# o3 d" |
7,加入文件到工程。(如果以前有删除后加入): QQ图片20190122110700.png
( C( g: u) I1 K8,配置头文件路径。- `$ Q4 d# H$ o! j  Z6 ?# M7 U; p
QQ图片20190122142628.png
6 K( K  ]8 V  [9 L9,main.c 加入
3 Q, Q- y) o% h# y) a
  1. /* Includes ------------------------------------------------------------------*/
    5 s6 _# A& V6 {! [
  2. #include "stm8s.h"
    ! ]5 ]! L9 h' x/ P% `5 Z* L" D
  3. #define LED_GPIO_PORT  (GPIOA)  a* j& k1 s% H: |
  4. #define LED_GPIO_PINS  (GPIO_PIN_3)
    ) Y- P$ P# f! Z
  5. #define TIM4_PERIOD       1243 {6 d  k) Y$ k9 J% h" a+ z% F
  6. void Delay (uint16_t nCount);
    ; i% |1 _+ `: K& I4 W1 `" B
  7. static void TIM4_Config(void);
    3 G  }' V, J" ^& d
  8. void LED1_Toggle();+ b" @: W! b3 d" S2 }( f
  9. void main(void){
    $ X1 n4 V' c+ o0 @% K
  10.   /* Initialize I/Os in Output Mode */
    0 Y- d' F: {4 z4 P  M$ l8 M, k
  11.   GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
    9 [1 @4 ?3 J9 ?( i7 q
  12. /* TIM4 configuration -----------------------------------------*/
    ) _9 s# D8 E8 i. [% [7 F
  13.   TIM4_Config();
    + A1 U5 n3 Q) m4 s
  14.   while (1)9 h8 E: }) |$ W- F
  15.   {; `. S9 b  t; \* C# U, h7 l
  16.   }4 ]* m: f6 u; s/ C/ ?! s* m' u
  17. }" i# p. x8 [/ q- u7 j
  18. void Delay(uint16_t nCount){
    3 |" e. w$ Q! ^2 U
  19.   while (nCount != 0){   nCount--; }) G& J+ A7 l! ?2 `
  20. }
    2 D. Z. @% F2 r5 [! H0 {
  21. static void TIM4_Config(void)# y+ \; S/ q; t9 Z: Z+ Z! G
  22. {
    ( |. ^3 @! ^* W) \
  23.   /* TIM4 configuration:
    + K/ I8 i" K/ r8 y5 a3 v7 H. L
  24.    - TIM4CLK is set to 16 MHz, the TIM4 Prescaler is equal to 128 so the TIM1 counter
    ) V1 o1 B. B' k. S
  25.    clock used is 16 MHz / 128 = 125 000 Hz  K4 w. j' }# V4 t% z+ U" V
  26.   - With 125 000 Hz we can generate time base:
    ! i) B+ d4 F0 y6 Y$ Z
  27.       max time base is 2.048 ms if TIM4_PERIOD = 255 --> (255 + 1) / 125000 = 2.048 ms* W' k" u! m$ ]. B: `
  28.       min time base is 0.016 ms if TIM4_PERIOD = 1   --> (  1 + 1) / 125000 = 0.016 ms
    1 n% T. J' S+ @. ]0 ]* D
  29.   - In this example we need to generate a time base equal to 1 ms# C2 s1 R# ?! ^9 ^% Q
  30.    so TIM4_PERIOD = (0.001 * 125000 - 1) = 124 */3 d+ _  v- B$ R+ H8 b+ K/ k
  31.   /* Time base configuration */
    1 X2 b) _8 J5 O6 v9 A- _
  32.   TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD);- c  D; n9 X1 Z3 u: ~7 D1 S
  33.   /* Clear TIM4 update flag */7 a! g* C6 X6 l5 N
  34.   TIM4_ClearFlag(TIM4_FLAG_UPDATE);
    & h$ p6 U; `1 d6 s: E# j. ?: _6 ?
  35.   /* Enable update interrupt */
    % n0 f2 ~" ^) k8 ~# A
  36.   TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); / q0 W; }" I, y- p% ^
  37.   /* enable interrupts */8 B4 h0 q5 M8 O: V, H
  38.   enableInterrupts();7 {  |  t6 p+ n- R2 w0 ~
  39.   /* Enable TIM4 */
    , N; R" Y8 C8 {$ D8 ]
  40.   TIM4_Cmd(ENABLE);1 z! v! _6 ~# C, ~% c# d- q
  41. }
    * r: Y9 S& U& M5 W
  42. void LED1_Toggle(){7 H: ~9 ?% U  j* c2 ?
  43.    GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);  r3 Q2 I! P4 H2 K
  44. }
复制代码
stm8s_it.c加入- s7 Y4 j" {2 V5 i* `) W
  1. extern void LED1_Toggle();5 d' K3 g8 _" r- r' a# A8 _
  2. ..." u$ f7 q2 z2 H) c# s% b/ g
  3. ...
    # z( n9 U3 F6 b$ L
  4. INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23), U( c0 a. f  a: b$ p' `" W  P9 Q
  5. {7 ^2 }  E3 S9 e8 {- j
  6.   /* In order to detect unexpected events during development,
    " |/ p/ Y1 V  W$ F2 z1 K
  7.      it is recommended to set a breakpoint on the following instruction.- h& X: r  Q& Z  J8 U. {* O
  8.   */+ U" M7 _* h' I# w. f( K
  9.   static uint16_t tims=0;
    : s0 u  a# Z( @4 D# R$ d
  10.   tims++;2 T) a! X& J" I+ U1 Z7 e
  11.   if(tims >1000)5 I4 T3 ~; H8 z  O
  12.   { 6 e( }  }, A4 ~0 X* j" q
  13.     tims =0;
    6 d+ j8 l3 R1 |: \9 S
  14.     LED1_Toggle();$ J) V* }; C6 g; Z
  15.   }+ l3 I$ _" a9 W
  16. }
复制代码

. J$ U! V. C5 U) @7 c- T. j10,编译调试:
2 a3 k$ @6 G* E1 R4 T 微信图片_20190122102947.jpg
( o, B- `: f% z 微信图片_20190122102956.jpg
' |3 I$ h0 F/ r$ h4 I11,文件:2 X# a6 \3 l" a, q" x) e
stm8s001test.zip (2.91 MB, 下载次数: 5)
收藏 1 评论4 发布时间:2019-1-22 11:10

举报

4个回答
qiangtech 回答时间:2019-1-22 14:58:52
下次申请到开发板了来试试。
damiaa 回答时间:2019-1-22 15:38:15
qiangtech 发表于 2019-1-22 14:58
( ^+ [/ P' f# ]下次申请到开发板了来试试。
0 D% O- ~( I* S
好 希望能申请到。
yuandm1 回答时间:2020-12-10 17:10:44
楼主你好,我使用的STM8L001J3,按照您的例程,测试不能进入定时器中断呢,请指点,谢谢
damiaa 回答时间:2021-1-12 09:27:14
yuandm1 发表于 2020-12-10 17:10
! O7 E$ P8 ?1 M  \8 u9 ^楼主你好,我使用的STM8L001J3,按照您的例程,测试不能进入定时器中断呢,请指点,谢谢 ...
9 V; c! u2 @+ Y  D5 N
我这个是STM8S001 。STM8L001J3是不是要换一下几个文件?没试过。留意要换的 stm8s_conf.h stm8s_it.h stm8s_it.c 还有库。或者自己找一下。不记得了。你自己看看吧。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版