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

【转】STM8S003F3调试跳坑记录

[复制链接]
feixiang20 发布时间:2017-5-24 10:26
1. CLK->PCKENR1 使能 CLK_PCKENR1_UART1 无效
* f% Y6 [9 g' G想降低功耗,单独打开 CLK_PCKENR1_UART1,但UART无输出。( z9 Y9 m/ T1 s# P; Z) E
核对资料发现:
, Y/ H7 q& T6 i6 E5 j
0 K& m: P+ b( w- R7 M' X 1.JPG 2.jpg 3.jpg ) a8 S# S0 K! ?7 J# l1 @

8 m' T, k7 N( ^. t: a/ K6 C解决方法: 不要使用 stm8s.h中的 CLK_PCKENR1_UART1; l9 ?" ]2 c$ [* ^/ `  o
自己使能 bit3
* V, S; a. G# P1 U1 t5 J. z7 W! g8 @( x
赞 收藏 1 评论7 发布时间:2017-5-24 10:26

举报

7个回答
feixiang20 回答时间:2017-5-24 10:26:50
本帖最后由 feixiang20 于 2017-5-24 10:29 编辑
" [- P" E; B! y* Q% w, c; g1 O0 {* k# \- {
7 S6 h& R% n' T

# l% j; C9 O* a) D( K2. PD4 TIM2_CH1没有反应
0 N* n7 ]; F- M+ M1 s/ G- I* @- G9 n7 e9 A. L7 n
* X/ h. F7 M- `
同样的 PD3 TIM2_CH2则完全正常。
% o9 @2 V1 ^1 y3 @8 S4 b9 W8 Y* |$ ^% _$ @" Z/ k

! H, s4 ^! F4 Q: T1 T# {8 f经各种跳坑调试后发现,为了使用 PC7 [TIM1_CH2] 和 PC6 [TIM1_CH1]
! [0 j9 ~( g; `' }; q0 T; \所以在option bytes里面启动了 AFR0
/ F, p; k8 |0 Q" Z- L( |
" x% r+ c. `9 a! t6 c+ }2 z
/ n) O' H5 s7 P6 l& A0 t. `2 ?
数据手册对 AFR0 描述如下:
7 h' Q) H- w: }; [% XAFR0 Alternate function remapping option 0(2)* S* C9 p! d8 w( |) F2 u- J3 L
0: AFR0 remapping option inactive: Default alternate functions(1), H' |  I8 h! X5 X7 G$ e" y5 ]% t7 g
1: Port C5 alternate function = TIM2_CH1; port C6 alternate function =
$ C: q0 S9 X% L) A- uTIM1_CH1; port C7 alternate function = TIM1_CH2.8 B5 r  D% |+ d$ O0 E" E- W
, ?. i8 j- N0 ]9 ~& u. l9 R: G: q

. X9 Q0 l" [. ?! C9 R; G也就是说 TIM2_CH1也被映射走了,换成 PC5 TIM2_CH1 就完全正常了。
' k. E# ?5 {. }& B; I: d" k: ~
feixiang20 回答时间:2017-5-24 10:27:16
3. 数据手册中有写 AFR0和AFR1不能同时使用,但他们的IO并不冲突呀?而且我目前就这样用了,而且调试正常。
2 C4 ?6 |( ^2 z但刚才翻资料看到这句就懵了。4 v& {5 h, l; E5 l. Y, w  J3 r6 ~( w

6 A$ a: f. c2 ~: X
AFR1 Alternate function remapping option 1 (2)2 K# D4 x( T- T+ k2 u5 P* r
0: AFR1 remapping option inactive: default alternate function(1)
0 I& T9 f" w0 T1: Port A3 alternate function = SPI_NSS; port D2 alternate function =TIM2_CH3.( \& q  {* N6 \# ~7 S/ l

9 ~+ {. j2 s$ l  ]( o1 }1 V( VAFR0 Alternate function remapping option 0(2)- R. y1 ^8 l+ S6 [- u* ~. t/ z
0: AFR0 remapping option inactive: Default alternate functions(1)
. d  H6 h: ^6 x  y: L) J" Z1: Port C5 alternate function = TIM2_CH1; port C6 alternate function =TIM1_CH1; port C7 alternate function = TIM1_CH2.' w4 ^2 U" `* J2 J" \

& e" @2 R6 D! U! Y* R1. Refer to the pinout description., K6 _0 i# B- Q, V- `. C- [
2. Do not use more than one remapping option in the same port. It is forbidden to enable both AFR1 and' z; O8 n! M- M6 B
AFR0.
) U  Q% k$ Q, }1 R6 F

- d1 R) P! R: P! Q$ R 1.jpg * o* t4 k, R9 C$ z9 ]. F1 A
4 I0 o, E( ^; y' D$ d+ |8 Y/ h  H
这个暂时还没得到答案!为保险起见,决定不使能AFR1,还是修改电路,把 PD2 [TIM2_CH3] 还是换成PA3 TIM2_CH3。
- D, }6 Z; ^/ E& U: ~
feixiang20 回答时间:2017-5-24 10:29:34

STM8L流水灯

/* MAIN.C file. ~- b1 I# {6 M: K$ _
*5 g6 P) a! P2 v6 p7 a; J* ~  d" X+ L
* Copyright (c) 2002-2005 STMicroelectronics0 F6 W& i3 i6 C) x0 B( s
*/) H8 R0 ^( x( |* R
( y. i. V/ ?, ]( g2 w7 h
#include <stm8l052c6.h>
6 B4 d4 a" A( y" s& Pvoid delay(unsigned int time);4 I, ^+ z* M' d' N
void main(void)3 y$ S: p' D9 Y. y. T8 l
{# T% k. J( X  w7 A
    unsigned char i=0;" T1 V! z" Q: e' L! H) ?& Z/ d
    PD_DDR=0x02;          //设置PD1为输出模式' S7 h! O9 h; J# J  J# q2 c
    PD_CR1=0x02;          //设置PD1为推挽输出; g! O0 z8 M9 \4 G9 V7 x! L# }
    PD_CR2=0x02;          //设置PD1输出速率为16mhz
: w" b# W0 t; x. s+ i9 p3 A% q9 O    PB_DDR=0x1e;          //设置PB1~PB4为输出模式
1 p7 }- c2 l; ~& Y, ?    PB_CR1=0x1e;          //设置PB1~PB4为推挽输出
! W7 R" K# R7 P9 {/ [$ p5 P6 J0 I    PB_CR2=0x1e;          //设置PB1~PB4输出速率为16mhz
3 b- ~% I& E) U. L9 z0 a) z    CLK_CKDIVR=0x07;      //对HSI进行128分频,16MHZ/128=125KHZ! g' |$ Y% l7 j/ N, W4 p- O, C' \
    while(1)8 j+ t  B; K! H+ I, h
    {
. b- V0 l/ |; e        PD_ODR=0xfd;        //PD1(红)灭5 Y. G0 j6 i5 W; J
        switch(i), B2 T. R/ l4 u4 u5 e1 P3 t; }
        {
8 ~3 _1 E3 R/ f' f# h$ L8 S            case 0: PD_ODR=0xff;break;          //PD1(红)亮
) i! B+ h: Q. s: M5 z            case 1: PB_ODR=0x02;break;         //PB1继电器启动
+ g. w- P  F! a9 E+ q4 n            case 2: PB_ODR=0x04;break;         //PB2继电器启动
; ~9 C( ?9 @! r4 O. ^/ s$ Q* M            case 3: PB_ODR=0x08;break;         //PB3继电器启动
; Y# `$ [0 l3 z1 w6 L1 P6 _            case 4: PB_ODR=0x10;break;         //PB4继电器启动4 f9 R. V, _% o8 Z" n" P/ a7 E# g9 p& N
        }/ G( D9 c! f4 ]1 z
        delay(12500);         //延时1S/ b# m# f9 S1 J4 j6 E8 Y; f" b7 l
        i++;; ^- y8 ?' t0 Q& f9 \- W
        if(i==5)0 E/ }$ ]+ `' @
        {) G) L* k  L( ?; {9 r$ K
          i=0;
- \) B  H5 K: ?, W7 B        }
/ A9 i, i0 w# m$ f    }
6 }/ T6 c: E- b! C, @' v}
( ^! b+ t- j; w9 R* Y5 O- dvoid delay(unsigned int time)) A$ I  H, P1 _4 W# G7 r# @3 W, X
{
6 ?$ h7 V- K, Y4 \  while(time--);
6 Y3 H, d/ T% y}
4 n& o9 Z, i% S( }继电器可以换成LED灯2 A% n* x' M& D& A. H6 k1 a

9 w" j0 v# t" ^8 c
feixiang20 回答时间:2017-5-24 10:29:59
4. 不要在主程序和中断程序中同时做8bit以上的乘除法运算,会出错! z  B# F4 g  o4 |/ j- ^, m( j, b

1 A. R) s( @8 eSTM8的乘除法指令是8位的,做16位或以上乘法运算时,编译器实际上调用了一个函数(通用作法);6 L8 E6 c* z4 y! K
而这个函数竟然用到了几个编译器自定义的全局变量(猜测);9 z. b( Q  x3 X; \
在进入中断时,这几个全局变量是不会被自动保存的,从而造成这个乘法运算函数不可重入;
: q4 Q* [- @) O4 Y2 J4 e! ?
9 R# Q5 [; H6 h: x( @% s当主程序和中断同时使用8位以上乘除法时,自然就出错。% }' d( F6 v6 \! I5 ?# X( a

4 m0 Y( Z2 P, n# _) m" J4 h从芯片或编译器上面想办法基本上不太可行,那么从软件上规避吧。
feixiang20 回答时间:2017-5-24 10:30:43

STM8L间隔1S闪烁

/* MAIN.C file
: e! [) s" I- Y, }5 k! d*  s$ N9 ^% p5 p& s% S" y6 V+ V
* Copyright (c) 2002-2005 STMicroelectronics* R* _# T6 A# K- W+ s( `  R
*/
5 E  h9 F1 X5 Z* p. y4 n; X) b" F) x0 j
" l6 A4 c8 j# E- I9 t. a& X* b, d7 g( G7 v5 Y$ n; ]  `0 c1 O
#include <stm8l052c6.h>$ ~( O% Y( D0 z$ a- n( H. O, P* p
void delay(unsigned int time);
4 `! T5 C" D0 evoid main(void)
* R4 p  v# G8 D& m6 {4 q0 U7 ?. r{
; [8 N3 M5 F- K6 o% {0 r4 s/ m, I    int i;
8 j2 A) v# H5 @. Z5 q! n- W, }    PD_DDR=0x03;         //设置PD0,PD1口为输出模式+ C, E8 N& W& d4 o& H: S/ A
    PD_CR1=0x03;         //设置PD0,PD1口为推挽输出
+ R, D& W0 H  X: k6 f: H# m8 _, @; r    PD_CR2=0x03;         //设置PD0,PD1口输出速率为16mhz
/ {4 e( u) g2 e! R, `) S    CLK_CKDIVR=0x07;     //对HSI进行128分频,16MHZ/128=125KHZ
2 \' N8 \, _2 F/ \5 T    for(i=0;i<10;i++)0 t4 j- b0 w3 y% x
    {8 M* _9 `8 p/ I0 [
        PD_ODR=0xfe;      //PD1(红)亮( V  i! d; I' d. T; |
        delay(12500);        //延时1S
- F; P, d( d7 t! i$ v; T        PD_ODR=0xfc;       //PD1(红)灭
- K) r- d# h7 {  W; y5 C8 f' Q! N        delay(12500);        //延时1S
4 U* M7 Y8 ^7 w    }
1 S7 {4 J+ v9 b: Y' V) h) Z3 O}. y1 U1 C, F. Z$ D6 l1 M
void delay(unsigned int time): Z3 T% @2 s% z/ C# j1 s
{+ x1 }' {0 E9 i2 K) z0 F2 M
  while(time--);$ {0 H3 K9 r4 d# O, q! |9 f
}# r* l* @) i- Q' q7 l! O- Q% g
有需要的朋友可以来看看/ J% j: _9 M! X8 Z% ~: _

! {: I- l) g' J& ?! B4 l2 \
feixiang20 回答时间:2017-5-24 10:35:51

STM8S003F3P6共享资料

STM8S003F3P6共享资料.rar (3.51 MB, 下载次数: 68)
feixiang20 回答时间:2017-5-24 10:36:51
STM8S105xxx中文数据手册.rar (1.61 MB, 下载次数: 13)

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版