本帖最后由 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
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
* ?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,加入文件到工程。(如果以前有删除后加入):
( C( g: u) I1 K8,配置头文件路径。- `$ Q4 d# H$ o! j Z6 ?# M7 U; p
6 K( K ]8 V [9 L9,main.c 加入
3 Q, Q- y) o% h# y) a- /* Includes ------------------------------------------------------------------*/
5 s6 _# A& V6 {! [ - #include "stm8s.h"
! ]5 ]! L9 h' x/ P% `5 Z* L" D - #define LED_GPIO_PORT (GPIOA) a* j& k1 s% H: |
- #define LED_GPIO_PINS (GPIO_PIN_3)
) Y- P$ P# f! Z - #define TIM4_PERIOD 1243 {6 d k) Y$ k9 J% h" a+ z% F
- void Delay (uint16_t nCount);
; i% |1 _+ `: K& I4 W1 `" B - static void TIM4_Config(void);
3 G }' V, J" ^& d - void LED1_Toggle();+ b" @: W! b3 d" S2 }( f
- void main(void){
$ X1 n4 V' c+ o0 @% K - /* Initialize I/Os in Output Mode */
0 Y- d' F: {4 z4 P M$ l8 M, k - GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
9 [1 @4 ?3 J9 ?( i7 q - /* TIM4 configuration -----------------------------------------*/
) _9 s# D8 E8 i. [% [7 F - TIM4_Config();
+ A1 U5 n3 Q) m4 s - while (1)9 h8 E: }) |$ W- F
- {; `. S9 b t; \* C# U, h7 l
- }4 ]* m: f6 u; s/ C/ ?! s* m' u
- }" i# p. x8 [/ q- u7 j
- void Delay(uint16_t nCount){
3 |" e. w$ Q! ^2 U - while (nCount != 0){ nCount--; }) G& J+ A7 l! ?2 `
- }
2 D. Z. @% F2 r5 [! H0 { - static void TIM4_Config(void)# y+ \; S/ q; t9 Z: Z+ Z! G
- {
( |. ^3 @! ^* W) \ - /* TIM4 configuration:
+ K/ I8 i" K/ r8 y5 a3 v7 H. L - - TIM4CLK is set to 16 MHz, the TIM4 Prescaler is equal to 128 so the TIM1 counter
) V1 o1 B. B' k. S - clock used is 16 MHz / 128 = 125 000 Hz K4 w. j' }# V4 t% z+ U" V
- - With 125 000 Hz we can generate time base:
! i) B+ d4 F0 y6 Y$ Z - max time base is 2.048 ms if TIM4_PERIOD = 255 --> (255 + 1) / 125000 = 2.048 ms* W' k" u! m$ ]. B: `
- min time base is 0.016 ms if TIM4_PERIOD = 1 --> ( 1 + 1) / 125000 = 0.016 ms
1 n% T. J' S+ @. ]0 ]* D - - In this example we need to generate a time base equal to 1 ms# C2 s1 R# ?! ^9 ^% Q
- so TIM4_PERIOD = (0.001 * 125000 - 1) = 124 */3 d+ _ v- B$ R+ H8 b+ K/ k
- /* Time base configuration */
1 X2 b) _8 J5 O6 v9 A- _ - TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD);- c D; n9 X1 Z3 u: ~7 D1 S
- /* Clear TIM4 update flag */7 a! g* C6 X6 l5 N
- TIM4_ClearFlag(TIM4_FLAG_UPDATE);
& h$ p6 U; `1 d6 s: E# j. ?: _6 ? - /* Enable update interrupt */
% n0 f2 ~" ^) k8 ~# A - TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); / q0 W; }" I, y- p% ^
- /* enable interrupts */8 B4 h0 q5 M8 O: V, H
- enableInterrupts();7 { | t6 p+ n- R2 w0 ~
- /* Enable TIM4 */
, N; R" Y8 C8 {$ D8 ] - TIM4_Cmd(ENABLE);1 z! v! _6 ~# C, ~% c# d- q
- }
* r: Y9 S& U& M5 W - void LED1_Toggle(){7 H: ~9 ?% U j* c2 ?
- GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS); r3 Q2 I! P4 H2 K
- }
复制代码 stm8s_it.c加入- s7 Y4 j" {2 V5 i* `) W
- extern void LED1_Toggle();5 d' K3 g8 _" r- r' a# A8 _
- ..." u$ f7 q2 z2 H) c# s% b/ g
- ...
# z( n9 U3 F6 b$ L - INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23), U( c0 a. f a: b$ p' `" W P9 Q
- {7 ^2 } E3 S9 e8 {- j
- /* In order to detect unexpected events during development,
" |/ p/ Y1 V W$ F2 z1 K - it is recommended to set a breakpoint on the following instruction.- h& X: r Q& Z J8 U. {* O
- */+ U" M7 _* h' I# w. f( K
- static uint16_t tims=0;
: s0 u a# Z( @4 D# R$ d - tims++;2 T) a! X& J" I+ U1 Z7 e
- if(tims >1000)5 I4 T3 ~; H8 z O
- { 6 e( } }, A4 ~0 X* j" q
- tims =0;
6 d+ j8 l3 R1 |: \9 S - LED1_Toggle();$ J) V* }; C6 g; Z
- }+ l3 I$ _" a9 W
- }
复制代码
. J$ U! V. C5 U) @7 c- T. j10,编译调试:
2 a3 k$ @6 G* E1 R4 T
( o, B- `: f% z
' |3 I$ h0 F/ r$ h4 I11,文件:2 X# a6 \3 l" a, q" x) e
stm8s001test.zip
(2.91 MB, 下载次数: 5)
|
好 希望能申请到。
我这个是STM8S001 。STM8L001J3是不是要换一下几个文件?没试过。留意要换的 stm8s_conf.h stm8s_it.h stm8s_it.c 还有库。或者自己找一下。不记得了。你自己看看吧。