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

【转】STM8S003F3调试跳坑记录

[复制链接]
feixiang20 发布时间:2017-5-24 10:26
1. CLK->PCKENR1 使能 CLK_PCKENR1_UART1 无效: n1 d) }6 \+ a7 @+ F
想降低功耗,单独打开 CLK_PCKENR1_UART1,但UART无输出。
# ?# v/ g/ z; w& @" G核对资料发现:
3 n5 z( z4 E% j, p2 W+ y( j2 u3 ~, Y3 T3 x
1.JPG 2.jpg 3.jpg
7 }8 p" v3 i2 h; M2 D6 D4 O
: \+ S% G; p$ W5 V解决方法: 不要使用 stm8s.h中的 CLK_PCKENR1_UART1
5 Z) l1 ?5 J2 i5 Q. v. r+ \自己使能 bit3
7 X- l: l( p- y& e  c# C% Q4 o* [( f
收藏 1 评论7 发布时间:2017-5-24 10:26

举报

7个回答
feixiang20 回答时间:2017-5-24 10:26:50
本帖最后由 feixiang20 于 2017-5-24 10:29 编辑
* ~% A6 s  ]8 l% J
: ?" l0 ^" e0 T1 G9 [5 K, m- A! U0 E# \% f0 ~5 c
4 H+ w& Z: m, N; i9 A: j
2. PD4 TIM2_CH1没有反应
" {+ s3 `( B7 W7 k' [: y: B' D7 \) K- v, n
- o6 }+ m8 O; W% I/ V
同样的 PD3 TIM2_CH2则完全正常。, z) B* s  ^7 _; {' |" i4 A

3 I; j; a. ]1 }3 b

3 X: p% T2 ]' V- Z( p! z经各种跳坑调试后发现,为了使用 PC7 [TIM1_CH2] 和 PC6 [TIM1_CH1]
6 Z, Z1 j& O* l$ j& |所以在option bytes里面启动了 AFR04 N; Z- G- z  L/ G& m
% s+ W6 S: t, ]; B
/ S0 y+ M/ J1 `7 h/ @' C% g) _: I
数据手册对 AFR0 描述如下:
2 ~% `$ g( B% P+ L% X6 kAFR0 Alternate function remapping option 0(2)1 @* v, S, x, y6 O3 P
0: AFR0 remapping option inactive: Default alternate functions(1), H3 n" C  P1 L9 S; Y; k
1: Port C5 alternate function = TIM2_CH1; port C6 alternate function =
: g  A% E/ a) j! s. qTIM1_CH1; port C7 alternate function = TIM1_CH2.& C8 c$ B( u( a9 {6 p. Z; L9 }
% t+ K4 G4 Y* m5 y- ?# j
7 V- b. S  c' K% G! o1 I: f
也就是说 TIM2_CH1也被映射走了,换成 PC5 TIM2_CH1 就完全正常了。
% P. g# a; k: I3 ^4 H
feixiang20 回答时间:2017-5-24 10:27:16
3. 数据手册中有写 AFR0和AFR1不能同时使用,但他们的IO并不冲突呀?而且我目前就这样用了,而且调试正常。
+ S' N) @8 I# M0 u; r0 T. C但刚才翻资料看到这句就懵了。
8 ?  W" V9 M* q5 t- U
3 n- s& P+ e  ~3 U8 {4 O9 L; h
AFR1 Alternate function remapping option 1 (2)6 b. l+ p3 H  E" @; g/ n
0: AFR1 remapping option inactive: default alternate function(1)
& j! D" |2 M7 T* c+ f# s1: Port A3 alternate function = SPI_NSS; port D2 alternate function =TIM2_CH3.
2 [. b8 ]+ t% U6 f/ Q- P) T
+ I5 T9 @9 H4 W9 r3 yAFR0 Alternate function remapping option 0(2)
4 G0 {+ I! m% g" b6 o0 m0: AFR0 remapping option inactive: Default alternate functions(1). x9 b2 j- z: E7 r
1: Port C5 alternate function = TIM2_CH1; port C6 alternate function =TIM1_CH1; port C7 alternate function = TIM1_CH2.
6 F- y% H6 L" e
% t" b3 A2 P2 n; }1 Q1. Refer to the pinout description.
# B% \; K- }' X6 H* X2. Do not use more than one remapping option in the same port. It is forbidden to enable both AFR1 and
/ c4 p0 t$ {# t. \0 n" V" i- u" `AFR0.

' c' m# }. q. M5 r* X$ F
# A0 K* w4 b; @* T2 K 1.jpg 6 J2 d! ^9 Y% E; d: c) L
) \! h! S( B  ]+ F" I- E
这个暂时还没得到答案!为保险起见,决定不使能AFR1,还是修改电路,把 PD2 [TIM2_CH3] 还是换成PA3 TIM2_CH3。5 s2 V; A7 R9 d
feixiang20 回答时间:2017-5-24 10:29:34

STM8L流水灯

/* MAIN.C file1 ~3 f' R5 [7 G
*
2 V* O8 I9 R. K5 F0 o* Copyright (c) 2002-2005 STMicroelectronics
; d5 {& [) o( l+ O1 D* s*/
1 B3 u4 g8 E" n  B" ^9 w4 Y+ R7 {, \( w1 T0 r
#include <stm8l052c6.h>
& A1 G; H. j" P$ r$ ~" V8 U( Zvoid delay(unsigned int time);! L. a; Y! r9 n; K4 U0 |
void main(void)# g5 o" i% R) D$ m
{. E: ~- d" k. q/ e1 O, S; v
    unsigned char i=0;
9 ]6 K1 J( }5 f" r/ \+ P/ a$ Z    PD_DDR=0x02;          //设置PD1为输出模式
. d. P  J, f1 h1 z& s- e    PD_CR1=0x02;          //设置PD1为推挽输出' b; F( L! f: P' ^( d: }
    PD_CR2=0x02;          //设置PD1输出速率为16mhz
: V: u* L' D& O) @    PB_DDR=0x1e;          //设置PB1~PB4为输出模式
( \* H. R0 d% F5 }2 O    PB_CR1=0x1e;          //设置PB1~PB4为推挽输出0 B3 E% R3 i& h" E
    PB_CR2=0x1e;          //设置PB1~PB4输出速率为16mhz, q2 p- Z2 d9 L, t
    CLK_CKDIVR=0x07;      //对HSI进行128分频,16MHZ/128=125KHZ' C7 w- o+ y5 g* ?; ~
    while(1)
5 ]2 L" B& A6 U+ w    {
1 j4 E; c4 H, X9 j/ c5 ?; X+ c        PD_ODR=0xfd;        //PD1(红)灭/ [! R3 ]& V/ P: f6 Q* U% R
        switch(i)
: w- R3 j, ?) {7 w7 o        {
7 w2 Z8 s' j5 F  b            case 0: PD_ODR=0xff;break;          //PD1(红)亮$ t0 J$ k3 ]! X) H
            case 1: PB_ODR=0x02;break;         //PB1继电器启动
) y# `- J& S" l/ j            case 2: PB_ODR=0x04;break;         //PB2继电器启动
7 b# k9 }" V" O. s            case 3: PB_ODR=0x08;break;         //PB3继电器启动) ?: q+ O4 ?, Y6 e7 B
            case 4: PB_ODR=0x10;break;         //PB4继电器启动- A9 m2 r5 z& |3 D# q
        }
+ t  K6 C' q' f" W7 @9 r        delay(12500);         //延时1S, K2 R. _  a1 ^( k7 d3 Y% d3 P
        i++;
& W7 H" p, r, p# q3 K        if(i==5)
8 q$ |' p; c" C6 }! l0 r  O) M        {6 U+ _( z; \* O# o7 {3 p/ S
          i=0;
9 b2 R, C6 ]0 B        }
8 P, R# N/ Z: E: N    }. F1 ?3 v- w3 {( r0 t* I
}
  N! |. q8 ]9 f. A) uvoid delay(unsigned int time)
" C& W, f7 G+ N5 y3 S{
* e2 G* m9 S, [) G  while(time--);0 t  y! P) \% O5 d  s
}# ]; a" v$ ^: n2 J
继电器可以换成LED灯
* @, j- P* z% y4 b
" u$ `/ O/ h" L! `3 M
feixiang20 回答时间:2017-5-24 10:29:59
4. 不要在主程序和中断程序中同时做8bit以上的乘除法运算,会出错
8 o# A9 s/ q9 n
! w4 j, e* Q0 S0 B) b' sSTM8的乘除法指令是8位的,做16位或以上乘法运算时,编译器实际上调用了一个函数(通用作法);* O# [  l) Y/ H. O0 l  Z
而这个函数竟然用到了几个编译器自定义的全局变量(猜测);
  V9 o! H, K0 I! b) W: @在进入中断时,这几个全局变量是不会被自动保存的,从而造成这个乘法运算函数不可重入;
! i  x' ~" [6 i! V$ }" _. |' Q: o6 A$ }
当主程序和中断同时使用8位以上乘除法时,自然就出错。" G# h  B3 ?+ h3 _  J+ p4 n
$ C6 C% _. L0 m
从芯片或编译器上面想办法基本上不太可行,那么从软件上规避吧。
feixiang20 回答时间:2017-5-24 10:30:43

STM8L间隔1S闪烁

/* MAIN.C file
. ~* `& z1 r0 F' _*) n4 o1 B9 C- W$ I
* Copyright (c) 2002-2005 STMicroelectronics
9 V/ R4 A2 B( v2 |9 ^& X*/  d: `/ c& k% Z0 m  w

1 f: {5 H, h$ d% g- o* J, S' e' H8 E) F1 @8 J4 T, D1 y# M. O" P/ i( S
#include <stm8l052c6.h>7 e' y' ^5 F; t2 [2 O
void delay(unsigned int time);
0 B0 ?3 @2 ^2 @" C2 J. M7 p  hvoid main(void)8 I* ~( f! G* c
{$ H+ R3 Y) k" ?! l- d
    int i;) @/ L' ?/ b! s0 M9 c6 h' F
    PD_DDR=0x03;         //设置PD0,PD1口为输出模式
1 f* P% p  z4 ?9 p8 C, r    PD_CR1=0x03;         //设置PD0,PD1口为推挽输出
$ [: s& T( |0 w0 I4 j  E    PD_CR2=0x03;         //设置PD0,PD1口输出速率为16mhz
. p( |& |+ A" U+ ?4 i    CLK_CKDIVR=0x07;     //对HSI进行128分频,16MHZ/128=125KHZ
* E) z/ p: C, p; r8 S* ~. z7 S    for(i=0;i<10;i++)
: o' ]& h  \. n/ b    {
( J: I* `- m: A2 \2 s5 R        PD_ODR=0xfe;      //PD1(红)亮- Q: W, X# s1 p! ^9 Y
        delay(12500);        //延时1S
3 j" i8 R) n, W* v        PD_ODR=0xfc;       //PD1(红)灭: I) q0 N2 x( V* x3 E
        delay(12500);        //延时1S
* g3 H. W8 J4 ~1 i, x) o$ ^! y    }
* u6 e6 c+ j" c: h& d}
9 v7 l7 r$ J; T7 R1 Q" z0 xvoid delay(unsigned int time)8 n/ L1 {  E5 @5 L9 A
{
* R4 W, i$ d) u+ q% e! \5 z6 l  while(time--);
* j. C  X; B) A$ C, `: t( J( y* C}' l$ V9 c: \9 B# R
有需要的朋友可以来看看3 L. c0 S5 g: v- f- G4 f

  k$ ?/ w  ~+ P7 B
feixiang20 回答时间:2017-5-24 10:35:51

STM8S003F3P6共享资料

STM8S003F3P6共享资料.rar (3.51 MB, 下载次数: 67)
feixiang20 回答时间:2017-5-24 10:36:51
STM8S105xxx中文数据手册.rar (1.61 MB, 下载次数: 13)
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版