本帖最后由 damiaa 于 2019-1-23 15:42 编辑 * k- C; r: O6 A6 e* z4 t
9 u) ]' c* T5 Q+ m0 X【STM8-SO8-DISCO】+ 基本定时器四中点灯 & y$ j, _; h0 G
小8芯的STM8S001 只有TIM1,2,4。 TIM4为基本定时器。只有些基本功能。用它最好理解了。
# W6 K& m0 o0 [) F. [& S$ j! k5 F& F+ A; q先看一下原理图:
" w; V1 w/ d) V3 n0 x/ r/ t7 ^( y+ S r3 x- q) r
; }# w4 Y: F% ]' J! k# D
3 W% h1 h& Z* M- V3 a" o9 |4 C
" w3 m" A2 B1 O+ nIO口1 PA1/PD6
3 {6 |7 _8 ?4 V2 LIO口5 PA3/PB5- s* L5 c) Y6 ~/ ~; m
IO口6 PB4" P4 S+ J- M: W- X8 y; e2 J
IO口7 PC3/PC4/PC5 上面四个IO口可以用
5 U! o$ B+ S- q& m5 TIO口8 SWID不能占用
& r3 C E) m t! x4 J9 ~, }IO口7用到按键了,IO口5用到LED1了。
6 ]6 I/ P$ i5 f* T可以根据情况使用。
$ }5 ^9 a7 E$ A/ [% x! w
$ ]& ~+ t1 Y9 I) D- J, d; b! E/ N" t下面开始! ]) M6 a3 m2 \8 r) }: E9 F% ~! b
' P; p6 W3 J, k1 z# Q: p3 g0 g' [: @8 f
z' }' {. ]6 k0 p4 u: Z4 z1,安装IAR开发环境。
0 K1 ?. R! H: l2 W# y2 ]2,申请一个免费的lisensee。
5 m" S9 P2 \8 r9 o3 K& h8 I/ l$ q4 G3,建立stm8s001test目录,在它下面建立:project,user,libraries三个目录。6 G4 d5 `7 ~9 I2 w9 u
5 X9 e0 k# h- L7 B4 D7 O
$ A( R @) t' L' _6 z- Q( T2 g3 H
4,拷贝一个STM8的工程模板到project目录。* c' h! D( x, p9 @; o+ @( C
5,拷贝main.c stm8s_conf.h stm8s_it.h stm8s_it.c到user目录。2 S! o3 l8 H: O
6,拷贝库文件到libraries目录。5 p0 s3 D/ K- M- I2 F! s
7,加入文件到工程。(如果以前有删除后加入):
5 v) n" N+ U1 r5 l, K; }) ` Z
8,配置头文件路径。) B) R3 |; |1 y
% t0 i9 j) S" h+ C" N/ l3 H9,main.c 加入
4 N9 y+ }8 e5 _7 Z- /* Includes ------------------------------------------------------------------*/2 m: x3 D8 V3 C/ l# q
- #include "stm8s.h"
: N9 Y4 Y3 F. A3 }( K2 v: N6 D0 e! D - #define LED_GPIO_PORT (GPIOA); ^2 I# g' ]/ R) y9 f6 I
- #define LED_GPIO_PINS (GPIO_PIN_3)6 i o: g' C1 }( z" e
- #define TIM4_PERIOD 124- f9 {1 v" Q" E
- void Delay (uint16_t nCount);( o# A) w; q7 j6 S2 t, w
- static void TIM4_Config(void);
( T2 M- x+ a' c- H% U3 c5 e+ _! d - void LED1_Toggle();$ |0 e0 u9 V' A' z! F0 b
- void main(void){
$ e% N: O: z- c - /* Initialize I/Os in Output Mode */
7 ^; ]% Q+ j' A g - GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
& |1 Y2 j& g* y6 _: U - /* TIM4 configuration -----------------------------------------*/3 m: x. X3 \3 K! M: ]7 r
- TIM4_Config();
0 c# M% Z, v! K0 ]* d8 x - while (1): z6 l# [0 Q/ {- i) m* q
- {
* i/ E( p& v6 ^5 T( I - }
6 T" j2 k6 U5 M# P - }7 _9 k+ d3 y7 j. G) u0 p6 X
- void Delay(uint16_t nCount){( K5 h# H9 z9 |; r5 Z- P4 o
- while (nCount != 0){ nCount--; }
+ C8 _/ ]- w+ [ - }* i% K; K: y3 O+ z
- static void TIM4_Config(void)
" Y9 ~( D# V- c/ x0 ^7 O- `. k' K - {; s' D) L, ^4 o' [7 @' U
- /* TIM4 configuration:
, o4 i8 T4 T2 h: ^" P4 b - - TIM4CLK is set to 16 MHz, the TIM4 Prescaler is equal to 128 so the TIM1 counter
3 U" r( w+ f! e( X. m4 { q - clock used is 16 MHz / 128 = 125 000 Hz, a* s( ~8 p8 z. A( y/ ]
- - With 125 000 Hz we can generate time base:6 f9 |7 Q" f6 E- ~# N
- max time base is 2.048 ms if TIM4_PERIOD = 255 --> (255 + 1) / 125000 = 2.048 ms9 z# ^/ a% o2 w) v/ I0 F! m6 Y
- min time base is 0.016 ms if TIM4_PERIOD = 1 --> ( 1 + 1) / 125000 = 0.016 ms8 d1 H; O* @0 ]
- - In this example we need to generate a time base equal to 1 ms
# K$ h' O8 w. f: p+ F/ F% ?8 V3 B - so TIM4_PERIOD = (0.001 * 125000 - 1) = 124 */
" s) I: |& M# G% l7 R+ t - /* Time base configuration */
) O( F1 J& g- b( F - TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD);
( _2 @- ?9 f0 x% A' W - /* Clear TIM4 update flag */
1 A! O5 j; W, [8 Y9 f - TIM4_ClearFlag(TIM4_FLAG_UPDATE);5 o$ F% o, c, H, n' |
- /* Enable update interrupt */# C% a7 I# s7 s! f
- TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); 0 `; H: O+ l; z5 b# c# A
- /* enable interrupts */5 K* j3 k. `, B& {* v: a* K
- enableInterrupts();
4 C, Z3 ?& A0 @, A5 P$ O* J% k - /* Enable TIM4 */
4 _* V! J; y; X6 X - TIM4_Cmd(ENABLE);) }( |6 ~9 _. [6 R' h' o9 k4 E
- }
& S) P6 L; ]& F* K - void LED1_Toggle(){
8 e) C- Z. [ D) V2 M - GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);9 l, M9 F" x6 X" E1 Y2 ]" h" t
- }
复制代码 stm8s_it.c加入
% L' o. [; O3 G( \3 `9 z- extern void LED1_Toggle();
! ^6 L/ J# n5 j - ...) w9 e4 @( b* V$ N& e
- ...
" o9 Q" P2 r* P0 V - INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)' l2 U' F) d% t5 @ L
- {
, ~- `3 f* h; k+ l - /* In order to detect unexpected events during development,1 [# a; H/ M+ [$ a8 R2 W, [
- it is recommended to set a breakpoint on the following instruction.
' D. K$ V1 w$ m - */( a0 ^; w# h: Z3 f9 h8 p
- static uint16_t tims=0;
2 Z5 m. c4 e1 t$ h r2 m: X/ a - tims++;5 `! c% B* Q$ i, h! ? q
- if(tims >1000)
) f& U, l; ^* a% V- G/ J- t - { & k9 D0 Y4 W' R! {3 J
- tims =0;
( V7 l3 c+ i/ J/ d# N; c/ P% E9 G0 ~ - LED1_Toggle();
* B9 _- n+ e" c1 ]$ J1 G - }2 T$ u, [+ F* p# t
- }
复制代码
3 u; B/ e* r3 P& c5 N, A$ q; ]10,编译调试:
/ E0 E A0 }& n/ ~+ u' x
' @( O' T' n9 M! U0 v' v
8 a m& z9 W* _, A11,文件:
5 B$ W3 Q, \) v+ Z% u8 G, U8 ?
stm8s001test.zip
(2.91 MB, 下载次数: 5)
|
好 希望能申请到。
我这个是STM8S001 。STM8L001J3是不是要换一下几个文件?没试过。留意要换的 stm8s_conf.h stm8s_it.h stm8s_it.c 还有库。或者自己找一下。不记得了。你自己看看吧。