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

【转】STM8S003F3调试跳坑记录

[复制链接]
feixiang20 发布时间:2017-5-24 10:26
1. CLK->PCKENR1 使能 CLK_PCKENR1_UART1 无效: q+ R- p) z; H/ k* [
想降低功耗,单独打开 CLK_PCKENR1_UART1,但UART无输出。" L  t2 J& Z- r& y# h
核对资料发现:
8 @& ~: ]5 ]4 A2 i4 y2 y2 R5 v, M
- F6 B2 l* M4 w, p2 x2 X. l; u 1.JPG 2.jpg 3.jpg ' W0 V$ [6 N3 C: {4 B
3 r! R9 r  C+ m7 l' D5 g' H
解决方法: 不要使用 stm8s.h中的 CLK_PCKENR1_UART1
5 j6 J7 o  v1 n* d自己使能 bit32 k+ o+ G8 K6 t( j& g
$ o3 ]4 c) q" O9 X1 A+ z! z  u' D
收藏 1 评论7 发布时间:2017-5-24 10:26

举报

7个回答
feixiang20 回答时间:2017-5-24 10:26:50
本帖最后由 feixiang20 于 2017-5-24 10:29 编辑 , A8 C- F" l  v2 ?6 f. I( T# V
2 o" k  k, M# B( X5 m5 a! c

  r+ S8 o* C* p, V$ q
. u) n5 k' T8 ]5 u  J" o
2. PD4 TIM2_CH1没有反应
- ^% e5 Z# L, {3 A, C
8 e( c: }" l( b2 T2 b* N0 n
( Q7 _! W3 m; u" k
同样的 PD3 TIM2_CH2则完全正常。; k% d; U  @3 h$ f9 E3 M# K9 r) J

$ a( h6 Q: B3 O" S" a# t% d

: S& U  _9 ^; _# \8 v7 n经各种跳坑调试后发现,为了使用 PC7 [TIM1_CH2] 和 PC6 [TIM1_CH1]
7 x1 }2 n  C; [# y$ Q所以在option bytes里面启动了 AFR0! z3 Y1 d# l; ^  z$ ^, _
: z6 _2 ?- |, y" G
9 m8 s& t' `9 p5 h  \
数据手册对 AFR0 描述如下:
' a  z/ s) l' b: A$ J) HAFR0 Alternate function remapping option 0(2)
" X9 v8 P$ q; D* l: n* [0: AFR0 remapping option inactive: Default alternate functions(1)
6 K. ^1 F4 h' P& v+ P1: Port C5 alternate function = TIM2_CH1; port C6 alternate function =1 F" w& q; `1 p( H( Z( j2 K9 k/ j
TIM1_CH1; port C7 alternate function = TIM1_CH2.- V. V1 N4 g- v: J. i

. c& }; O" R, k8 Y
& F5 Q1 g8 N9 C
也就是说 TIM2_CH1也被映射走了,换成 PC5 TIM2_CH1 就完全正常了。8 c* c" R- c+ @2 Y3 w. V
feixiang20 回答时间:2017-5-24 10:27:16
3. 数据手册中有写 AFR0和AFR1不能同时使用,但他们的IO并不冲突呀?而且我目前就这样用了,而且调试正常。9 k3 x. C: l5 z: @6 t7 \+ q0 O) w
但刚才翻资料看到这句就懵了。" j  ^7 C6 {3 c0 v% P
) w( A7 D6 _+ n  J
AFR1 Alternate function remapping option 1 (2)2 U! {3 ?. P- W6 j9 {5 o: Z
0: AFR1 remapping option inactive: default alternate function(1)
. ], N. I7 x& Y1: Port A3 alternate function = SPI_NSS; port D2 alternate function =TIM2_CH3., v2 ?# J* |7 @7 _5 {$ Q( l- b
4 r; H8 G- A' D! `6 z/ _
AFR0 Alternate function remapping option 0(2)0 w0 c: ~/ h3 l
0: AFR0 remapping option inactive: Default alternate functions(1)! ?2 U3 q! _- Z# r+ h$ L
1: Port C5 alternate function = TIM2_CH1; port C6 alternate function =TIM1_CH1; port C7 alternate function = TIM1_CH2.1 K% ]+ p) q; J1 }5 H' h: q9 y
7 e6 b. o! }9 C5 ]0 s' n& s
1. Refer to the pinout description.
- G) m6 e; o( |: ^2. Do not use more than one remapping option in the same port. It is forbidden to enable both AFR1 and/ a. o' ~& I0 _( g& C: b' ~4 r; z
AFR0.

6 @3 }# q$ H4 E) s/ ^3 U% @' c# |5 _: J  P4 D( F" n. l' n
1.jpg " L. W# ?: K" h/ J8 S
. Y+ J$ L6 h7 b
这个暂时还没得到答案!为保险起见,决定不使能AFR1,还是修改电路,把 PD2 [TIM2_CH3] 还是换成PA3 TIM2_CH3。
$ I; K# n8 i; d2 i
feixiang20 回答时间:2017-5-24 10:29:34

STM8L流水灯

/* MAIN.C file& r5 ]; b& ~$ ^: ]7 H% Q3 ?
*. g1 o1 z4 V( J! n' ]3 s# W
* Copyright (c) 2002-2005 STMicroelectronics
) T  H6 [; H5 M) W& k/ i*/& X" B$ C5 ]  r7 i( l
. U  F; F# [: B8 `3 O
#include <stm8l052c6.h>4 z* d# ]; T7 K9 Q+ ~/ ~
void delay(unsigned int time);3 b. S$ d# S1 Y! T" ]
void main(void)9 @7 C) k. e9 X# q# S( \
{
9 N% p; k$ W9 U$ Y, j8 o& f# S    unsigned char i=0;
  M5 B, m* p- Y" k0 a: c    PD_DDR=0x02;          //设置PD1为输出模式; l7 v  s* O7 a" w
    PD_CR1=0x02;          //设置PD1为推挽输出
& j& {$ R% }. e1 i# E    PD_CR2=0x02;          //设置PD1输出速率为16mhz8 T0 w& W9 x$ O: B5 R. }
    PB_DDR=0x1e;          //设置PB1~PB4为输出模式
8 j% E5 C# x" @$ t" q+ o    PB_CR1=0x1e;          //设置PB1~PB4为推挽输出
. a1 `% {# a2 G4 S+ F. H& d! ?    PB_CR2=0x1e;          //设置PB1~PB4输出速率为16mhz( H& o. B% s6 U  {; w- g9 d; w2 a
    CLK_CKDIVR=0x07;      //对HSI进行128分频,16MHZ/128=125KHZ! S' }7 S. @0 \% R# \$ M. s9 n+ H; }
    while(1)
7 k8 g: ~1 o* t6 N5 e    {
% x5 q* A+ T. D- p. i        PD_ODR=0xfd;        //PD1(红)灭7 T  t& ^. m# A( S& _# s  {& q5 c
        switch(i)' C, H# I5 ~- |5 G
        {
+ B+ }4 T5 R- O0 \" P. N            case 0: PD_ODR=0xff;break;          //PD1(红)亮7 Z+ L/ {6 k, o1 o6 @
            case 1: PB_ODR=0x02;break;         //PB1继电器启动; G- M+ l" H! D1 C- N
            case 2: PB_ODR=0x04;break;         //PB2继电器启动
9 Y9 E3 Z& S. P8 r0 I            case 3: PB_ODR=0x08;break;         //PB3继电器启动
4 `* J$ D8 ~& u+ R( b/ Z8 ?7 ]            case 4: PB_ODR=0x10;break;         //PB4继电器启动9 K3 @6 u* e0 `8 l# X( d3 {6 M
        }2 S! I! p1 _9 V7 _: q. o: L6 M$ k% }
        delay(12500);         //延时1S
* G& V+ t# e& @& j: I' ~& E        i++;  I1 m9 S* u3 ]+ ^/ {  l
        if(i==5)) U, x8 W2 o  A# J, C
        {4 s  U7 u* y) w0 Q9 c) D
          i=0;
6 j6 W2 Q1 F$ \9 b, R8 }        }4 @+ J% w5 q. U2 }. j! N$ T
    }
: t0 m. l- Y+ c9 R+ Y) m3 u}
9 N8 _: `" s+ K& f$ Q" v. [( Tvoid delay(unsigned int time)6 L  R; r8 X1 Z; P
{
  ~/ t3 D. G0 E  ^6 U, _4 y1 P+ J  while(time--);
8 b2 U$ i& N. f- P}* W- O% s+ w3 J; i! a* R" D
继电器可以换成LED灯
6 R, B. e7 ]1 r: t$ a* Z2 F: U) w+ t$ s  X
feixiang20 回答时间:2017-5-24 10:29:59
4. 不要在主程序和中断程序中同时做8bit以上的乘除法运算,会出错' V/ @; i( I; r, Z" \( V' f4 q
: y+ ^# o/ g: t& A9 W3 W- a
STM8的乘除法指令是8位的,做16位或以上乘法运算时,编译器实际上调用了一个函数(通用作法);
3 `4 U3 f, D# [6 N8 e+ _而这个函数竟然用到了几个编译器自定义的全局变量(猜测);. d  |; n# v: \3 S6 Y
在进入中断时,这几个全局变量是不会被自动保存的,从而造成这个乘法运算函数不可重入;9 }9 d. ?3 h& e4 f6 v

7 A) X: t, X7 N. a6 P! D4 F当主程序和中断同时使用8位以上乘除法时,自然就出错。
+ l# ^* \  R0 F( _8 i* |9 _9 F5 M% p, @. x2 ?/ d4 O
从芯片或编译器上面想办法基本上不太可行,那么从软件上规避吧。
feixiang20 回答时间:2017-5-24 10:30:43

STM8L间隔1S闪烁

/* MAIN.C file
6 y. V' o+ Q' n" i; Q% Z: @*
* A$ Z: W9 L# P  j, G* Copyright (c) 2002-2005 STMicroelectronics
- e0 v; V4 c/ I  R1 i*/" u3 k  ]5 }, W; j( m) Y

8 L7 u' n. ?. e1 ?- n& l( B7 S/ Z% \" J1 a+ f" W
#include <stm8l052c6.h>
8 q  B# ~" \: }: E: D' Lvoid delay(unsigned int time);
$ ~8 j7 B) i" b+ X$ X8 Qvoid main(void); R5 U0 j0 R2 k: z; ^' l
{
& [( P7 d1 ]$ _1 X    int i;4 R+ G( R% S8 S& ]
    PD_DDR=0x03;         //设置PD0,PD1口为输出模式$ g% t; k! v8 F
    PD_CR1=0x03;         //设置PD0,PD1口为推挽输出
1 [- G0 Y/ ~* q- |. T6 T    PD_CR2=0x03;         //设置PD0,PD1口输出速率为16mhz
) C" j$ x, @( {7 p0 y( Z0 b    CLK_CKDIVR=0x07;     //对HSI进行128分频,16MHZ/128=125KHZ
! z4 d- T$ x8 r6 D) ]    for(i=0;i<10;i++)2 _5 R9 A! }' G2 X! u
    {; y% Q- c3 R" i$ F$ f
        PD_ODR=0xfe;      //PD1(红)亮
, }9 z5 h, J: V& z, c        delay(12500);        //延时1S) J' a; b( G  r$ a8 @( A4 p
        PD_ODR=0xfc;       //PD1(红)灭
4 p5 T! [8 O2 [1 t        delay(12500);        //延时1S
: t: z1 x8 y2 E$ d/ C* c    }: E$ R: U4 j4 t' H0 K
}
% e$ E  e0 V' |$ Kvoid delay(unsigned int time)
0 i: L% ?% o4 A9 g{1 L# Z: {2 ]6 b% v* H4 M/ {- I. k" N
  while(time--);
% e9 w/ M2 D0 P}
+ H. g4 b  J" A+ K有需要的朋友可以来看看, C* p  L2 G9 h* y0 F
. X6 ?3 c- m: r# {3 E
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 手机版