本帖最后由 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
, 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
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,加入文件到工程。(如果以前有删除后加入):
5 i1 |3 O! g7 X, s6 D4 j" m8,配置头文件路径。
# R$ D# k& t7 l* G6 e. a# E) l
; u6 \, U; `3 J2 x |" C/ b- [9 @
9,main.c 加入
! c5 S* m+ V9 O G: D+ P- W0 s5 Q- /* Includes ------------------------------------------------------------------*/' P# h* m6 F. ^
- #include "stm8s.h"- w# o, w, Q, @. G
- #define LED_GPIO_PORT (GPIOA)
?3 Q+ @6 `( c- I h, B+ e# e - #define LED_GPIO_PINS (GPIO_PIN_3)4 ^0 P: H8 H' e9 h% c% ]
- #define TIM4_PERIOD 124" Q7 P. Z! n4 D. N
- void Delay (uint16_t nCount);
7 I6 {9 o ?2 C" [ - static void TIM4_Config(void);
, r8 l' r' t* W- ` - void LED1_Toggle();: _$ f8 V! ~1 [- ?
- void main(void){
8 u1 V, B' W& b" w5 a9 | - /* Initialize I/Os in Output Mode */) Y( J/ d- a" Q" |0 r( v0 [& ^
- GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);% m7 f }* B A; r
- /* TIM4 configuration -----------------------------------------*/1 l" f6 s! A( X; ~- d4 _: u* t% C4 g
- TIM4_Config(); : Q b8 ]1 s; S0 {) V
- while (1)
$ D; W% F( d+ @+ c - {9 h0 g2 l9 N' z! {. d
- }$ e0 U7 q S5 n
- }, e3 l" k, T% r @
- void Delay(uint16_t nCount){# n& U* \+ R/ R `( v# l
- while (nCount != 0){ nCount--; }- T# k' d* k# r. U% e
- }
* d* C6 P# S; [3 w2 a - static void TIM4_Config(void)
$ z" ?' I3 |2 m - {, i4 E9 t r$ n+ e
- /* TIM4 configuration:
; j* A+ p! m; M4 K - - TIM4CLK is set to 16 MHz, the TIM4 Prescaler is equal to 128 so the TIM1 counter
U) R ?; c$ u# L3 ] - clock used is 16 MHz / 128 = 125 000 Hz! @4 o2 t# r- e1 n. ]) q m
- - With 125 000 Hz we can generate time base:6 D4 m) ]9 e7 P+ U$ ?$ l: U: C
- 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
- 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 - - In this example we need to generate a time base equal to 1 ms& @: Q' ^7 ?; |+ |" t
- so TIM4_PERIOD = (0.001 * 125000 - 1) = 124 */
! b' z0 M8 t; a6 R4 ]( z - /* Time base configuration */: h Q& W0 z8 N: m* C5 N- R
- TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD);
% p# {% t0 \, [ o8 U1 I( T - /* Clear TIM4 update flag */& Y4 x& f+ ?- ? o& w6 o, Q( e
- TIM4_ClearFlag(TIM4_FLAG_UPDATE);. o4 l/ J4 K1 Q
- /* Enable update interrupt */
# U0 `# Y# \2 L+ \ - TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
2 z6 P& T6 ~4 [! r& m# R# a! A - /* enable interrupts */
" ]4 o1 P0 i2 `0 J7 Q - enableInterrupts();
/ V: z5 b: H2 L+ z - /* Enable TIM4 */( l/ q/ k6 Y7 O! \
- TIM4_Cmd(ENABLE);( Y O& d! o9 m( f9 u& d+ `
- }% @% a% A Y1 f9 M9 N
- void LED1_Toggle(){7 l! K# v, e5 ~
- GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);8 K( t1 H2 [$ U
- }
复制代码 stm8s_it.c加入4 ~9 _8 O6 Q, S$ s0 y. A: {* n
- extern void LED1_Toggle();9 X/ c& y$ l' M& R& L7 L
- .... U4 _; O! H, u3 ~
- ...' F0 o. E" Q; u4 V& }
- INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
/ R" i6 G3 `7 D: G f* k - {- Q3 m5 }% Y# c& G- k6 \9 P
- /* In order to detect unexpected events during development,
' V' j' Q* U: K/ L& @0 H - it is recommended to set a breakpoint on the following instruction." |+ K, C2 U: ~; I: `
- */
& x# y3 Q2 ] [8 q# H. I4 x7 s - static uint16_t tims=0;3 q$ e, Z$ {6 g+ e- E
- tims++;& j) L4 E3 O( k: [$ T
- if(tims >1000)) c2 r* D$ B+ ^4 |
- { ! h) `0 Z0 Y! U$ x( n" q \! L
- tims =0;
( I: _/ @6 `6 b6 U0 y) O! o - LED1_Toggle();0 U6 F- o" u4 V) X
- }
1 K P; C: X# u V9 G4 } - }
复制代码
$ Y+ U& |+ C% u* q; n/ x9 B10,编译调试:
; p, L& \ ]& [4 I9 `
2 @: u6 V/ T+ ?/ M8 s
* J! c7 c4 U: v! E, y11,文件:
7 l9 B1 ] [. f$ m5 r# U
stm8s001test.zip
(2.91 MB, 下载次数: 6)
|
我这个是STM8S001 。STM8L001J3是不是要换一下几个文件?没试过。留意要换的 stm8s_conf.h stm8s_it.h stm8s_it.c 还有库。或者自己找一下。不记得了。你自己看看吧。