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
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
5 K, m- A! U0 E# \% f0 ~5 c
4 H+ w& Z: m, N; i9 A: j
2. PD4 TIM2_CH1没有反应
: B' D7 \) K- v, n
- o6 }+ m8 O; W% I/ V
同样的 PD3 TIM2_CH2则完全正常。, z) B* s ^7 _; {' |" i4 A
经各种跳坑调试后发现,为了使用 PC7 [TIM1_CH2] 和 PC6 [TIM1_CH1]
所以在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 描述如下:
AFR0 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 =
TIM1_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 就完全正常了。
但刚才翻资料看到这句就懵了。
) \! h! S( B ]+ F" I- E
这个暂时还没得到答案!为保险起见,决定不使能AFR1,还是修改电路,把 PD2 [TIM2_CH3] 还是换成PA3 TIM2_CH3。5 s2 V; A7 R9 d
STM8L流水灯
*
* Copyright (c) 2002-2005 STMicroelectronics
*/
" ^9 w4 Y+ R7 {, \( w1 T0 r
#include <stm8l052c6.h>
void 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;
PD_DDR=0x02; //设置PD1为输出模式
PD_CR1=0x02; //设置PD1为推挽输出' b; F( L! f: P' ^( d: }
PD_CR2=0x02; //设置PD1输出速率为16mhz
PB_DDR=0x1e; //设置PB1~PB4为输出模式
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)
{
PD_ODR=0xfd; //PD1(红)灭/ [! R3 ]& V/ P: f6 Q* U% R
switch(i)
{
case 0: PD_ODR=0xff;break; //PD1(红)亮$ t0 J$ k3 ]! X) H
case 1: PB_ODR=0x02;break; //PB1继电器启动
case 2: PB_ODR=0x04;break; //PB2继电器启动
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
}
delay(12500); //延时1S, K2 R. _ a1 ^( k7 d3 Y% d3 P
i++;
if(i==5)
{6 U+ _( z; \* O# o7 {3 p/ S
i=0;
}
}. F1 ?3 v- w3 {( r0 t* I
}
void delay(unsigned int time)
{
while(time--);0 t y! P) \% O5 d s
}# ]; a" v$ ^: n2 J
继电器可以换成LED灯
STM8的乘除法指令是8位的,做16位或以上乘法运算时,编译器实际上调用了一个函数(通用作法);* O# [ l) Y/ H. O0 l Z
而这个函数竟然用到了几个编译器自定义的全局变量(猜测);
在进入中断时,这几个全局变量是不会被自动保存的,从而造成这个乘法运算函数不可重入;
$ }" _. |' Q: o6 A$ }
当主程序和中断同时使用8位以上乘除法时,自然就出错。" G# h B3 ?+ h3 _ J+ p4 n
$ C6 C% _. L0 m
从芯片或编译器上面想办法基本上不太可行,那么从软件上规避吧。
STM8L间隔1S闪烁
*) n4 o1 B9 C- W$ I
* Copyright (c) 2002-2005 STMicroelectronics
*/ d: `/ c& k% Z0 m w
1 @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);
void 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口为输出模式
PD_CR1=0x03; //设置PD0,PD1口为推挽输出
PD_CR2=0x03; //设置PD0,PD1口输出速率为16mhz
CLK_CKDIVR=0x07; //对HSI进行128分频,16MHZ/128=125KHZ
for(i=0;i<10;i++)
{
PD_ODR=0xfe; //PD1(红)亮- Q: W, X# s1 p! ^9 Y
delay(12500); //延时1S
PD_ODR=0xfc; //PD1(红)灭: I) q0 N2 x( V* x3 E
delay(12500); //延时1S
}
}
void delay(unsigned int time)8 n/ L1 { E5 @5 L9 A
{
while(time--);
}' l$ V9 c: \9 B# R
有需要的朋友可以来看看3 L. c0 S5 g: v- f- G4 f
STM8S003F3P6共享资料
, v8 g* }5 Q9 T, |) q6 {9 U$ A