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

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

[复制链接]
damiaa 发布时间:2019-1-22 11:10
本帖最后由 damiaa 于 2019-1-23 15:42 编辑
; b" [9 |) `+ }  r1 J
* p4 \- X6 B3 M2 f( g【STM8-SO8-DISCO】+ 基本定时器四中点灯  ! z1 ~# s& g" G9 T
小8芯的STM8S001 只有TIM1,2,4。 TIM4为基本定时器。只有些基本功能。用它最好理解了。
: e: @+ ^* N# s! f# ?4 b& D先看一下原理图:7 X( I% Q' W" a! f
$ W7 T/ e8 f$ w0 d* N
. R* I% H" u* M) D
+ |1 m; b' u5 Y$ X; O) R
QQ图片20190122164711.png , Z1 e% `# e" q# |
IO口1 PA1/PD68 i- I2 B/ P7 E; {! K) f
IO口5 PA3/PB5$ q- s8 p8 d2 N0 z9 n
IO口6 PB4
. X) a5 q' K8 e$ g9 Q# ]- ?5 Y' C: dIO口7 PC3/PC4/PC5 上面四个IO口可以用
; c; @9 z; A# ]) QIO口8 SWID不能占用
# I" H0 X$ X% j) @8 H0 _' rIO口7用到按键了,IO口5用到LED1了。/ Z7 q* G% s3 }* b) r
可以根据情况使用。
6 U' S# c! Z) l6 j1 y7 K" a7 ^# J+ G9 s/ w2 g' l9 L9 P8 s
下面开始1 o: w& {5 u* K- t* y$ k" l

+ s* t7 v" Q3 D; v/ b
  z# e1 r( B3 w. z- U' B1,安装IAR开发环境。
$ O( ?; R% Q  Y. U2,申请一个免费的lisensee。9 g; D$ B3 e* y
3,建立stm8s001test目录,在它下面建立:project,user,libraries三个目录。! L6 L0 I3 o. Q7 t5 c( p' V
QQ图片20190122110421.png 4 g& i8 A4 I: ]

. X; s* j4 B- u4,拷贝一个STM8的工程模板到project目录。
: b  [- K# {! C9 V5,拷贝main.c stm8s_conf.h stm8s_it.h stm8s_it.c到user目录。) u6 m4 A0 }. ^6 e( {5 S
6,拷贝库文件到libraries目录。
# K6 q4 F' J' ?& S! G3 p7,加入文件到工程。(如果以前有删除后加入): QQ图片20190122110700.png
5 i1 |3 O! g7 X, s6 D4 j" m8,配置头文件路径。
# R$ D# k& t7 l* G6 e. a# E) l QQ图片20190122142628.png ; u6 \, U; `3 J2 x  |" C/ b- [9 @
9,main.c 加入
! c5 S* m+ V9 O  G: D+ P- W0 s5 Q
  1. /* Includes ------------------------------------------------------------------*/' P# h* m6 F. ^
  2. #include "stm8s.h"- w# o, w, Q, @. G
  3. #define LED_GPIO_PORT  (GPIOA)
      ?3 Q+ @6 `( c- I  h, B+ e# e
  4. #define LED_GPIO_PINS  (GPIO_PIN_3)4 ^0 P: H8 H' e9 h% c% ]
  5. #define TIM4_PERIOD       124" Q7 P. Z! n4 D. N
  6. void Delay (uint16_t nCount);
    7 I6 {9 o  ?2 C" [
  7. static void TIM4_Config(void);
    , r8 l' r' t* W- `
  8. void LED1_Toggle();: _$ f8 V! ~1 [- ?
  9. void main(void){
    8 u1 V, B' W& b" w5 a9 |
  10.   /* Initialize I/Os in Output Mode */) Y( J/ d- a" Q" |0 r( v0 [& ^
  11.   GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);% m7 f  }* B  A; r
  12. /* TIM4 configuration -----------------------------------------*/1 l" f6 s! A( X; ~- d4 _: u* t% C4 g
  13.   TIM4_Config(); : Q  b8 ]1 s; S0 {) V
  14.   while (1)
    $ D; W% F( d+ @+ c
  15.   {9 h0 g2 l9 N' z! {. d
  16.   }$ e0 U7 q  S5 n
  17. }, e3 l" k, T% r  @
  18. void Delay(uint16_t nCount){# n& U* \+ R/ R  `( v# l
  19.   while (nCount != 0){   nCount--; }- T# k' d* k# r. U% e
  20. }
    * d* C6 P# S; [3 w2 a
  21. static void TIM4_Config(void)
    $ z" ?' I3 |2 m
  22. {, i4 E9 t  r$ n+ e
  23.   /* TIM4 configuration:
    ; j* A+ p! m; M4 K
  24.    - TIM4CLK is set to 16 MHz, the TIM4 Prescaler is equal to 128 so the TIM1 counter
      U) R  ?; c$ u# L3 ]
  25.    clock used is 16 MHz / 128 = 125 000 Hz! @4 o2 t# r- e1 n. ]) q  m
  26.   - With 125 000 Hz we can generate time base:6 D4 m) ]9 e7 P+ U$ ?$ l: U: C
  27.       max time base is 2.048 ms if TIM4_PERIOD = 255 --> (255 + 1) / 125000 = 2.048 ms+ A$ }) X( H  b+ L1 a/ z/ R
  28.       min time base is 0.016 ms if TIM4_PERIOD = 1   --> (  1 + 1) / 125000 = 0.016 ms
    $ P* t( k8 w! W0 G: A1 K
  29.   - In this example we need to generate a time base equal to 1 ms& @: Q' ^7 ?; |+ |" t
  30.    so TIM4_PERIOD = (0.001 * 125000 - 1) = 124 */
    ! b' z0 M8 t; a6 R4 ]( z
  31.   /* Time base configuration */: h  Q& W0 z8 N: m* C5 N- R
  32.   TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD);
    % p# {% t0 \, [  o8 U1 I( T
  33.   /* Clear TIM4 update flag */& Y4 x& f+ ?- ?  o& w6 o, Q( e
  34.   TIM4_ClearFlag(TIM4_FLAG_UPDATE);. o4 l/ J4 K1 Q
  35.   /* Enable update interrupt */
    # U0 `# Y# \2 L+ \
  36.   TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
    2 z6 P& T6 ~4 [! r& m# R# a! A
  37.   /* enable interrupts */
    " ]4 o1 P0 i2 `0 J7 Q
  38.   enableInterrupts();
    / V: z5 b: H2 L+ z
  39.   /* Enable TIM4 */( l/ q/ k6 Y7 O! \
  40.   TIM4_Cmd(ENABLE);( Y  O& d! o9 m( f9 u& d+ `
  41. }% @% a% A  Y1 f9 M9 N
  42. void LED1_Toggle(){7 l! K# v, e5 ~
  43.    GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);8 K( t1 H2 [$ U
  44. }
复制代码
stm8s_it.c加入4 ~9 _8 O6 Q, S$ s0 y. A: {* n
  1. extern void LED1_Toggle();9 X/ c& y$ l' M& R& L7 L
  2. .... U4 _; O! H, u3 ~
  3. ...' F0 o. E" Q; u4 V& }
  4. INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
    / R" i6 G3 `7 D: G  f* k
  5. {- Q3 m5 }% Y# c& G- k6 \9 P
  6.   /* In order to detect unexpected events during development,
    ' V' j' Q* U: K/ L& @0 H
  7.      it is recommended to set a breakpoint on the following instruction." |+ K, C2 U: ~; I: `
  8.   */
    & x# y3 Q2 ]  [8 q# H. I4 x7 s
  9.   static uint16_t tims=0;3 q$ e, Z$ {6 g+ e- E
  10.   tims++;& j) L4 E3 O( k: [$ T
  11.   if(tims >1000)) c2 r* D$ B+ ^4 |
  12.   { ! h) `0 Z0 Y! U$ x( n" q  \! L
  13.     tims =0;
    ( I: _/ @6 `6 b6 U0 y) O! o
  14.     LED1_Toggle();0 U6 F- o" u4 V) X
  15.   }
    1 K  P; C: X# u  V9 G4 }
  16. }
复制代码

$ Y+ U& |+ C% u* q; n/ x9 B10,编译调试:
; p, L& \  ]& [4 I9 ` 微信图片_20190122102947.jpg
2 @: u6 V/ T+ ?/ M8 s 微信图片_20190122102956.jpg
* J! c7 c4 U: v! E, y11,文件:
7 l9 B1 ]  [. f$ m5 r# U stm8s001test.zip (2.91 MB, 下载次数: 6)
赞 收藏 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& U& x  C: W5 q& c3 z
下次申请到开发板了来试试。
5 ?# D$ z0 X( F, Z
好 希望能申请到。
yuandm1 回答时间:2020-12-10 17:10:44
楼主你好,我使用的STM8L001J3,按照您的例程,测试不能进入定时器中断呢,请指点,谢谢
damiaa 回答时间:2021-1-12 09:27:14
yuandm1 发表于 2020-12-10 17:106 ^9 F  B4 C" U$ G: Q
楼主你好,我使用的STM8L001J3,按照您的例程,测试不能进入定时器中断呢,请指点,谢谢 ...
% ?  n& V# V- V& _5 ?0 S
我这个是STM8S001 。STM8L001J3是不是要换一下几个文件?没试过。留意要换的 stm8s_conf.h stm8s_it.h stm8s_it.c 还有库。或者自己找一下。不记得了。你自己看看吧。

所属标签

相似技术帖

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