本帖最后由 slotg 于 2019-2-19 23:52 编辑 : G4 F( c0 `4 i1 i9 ^/ |6 ] q
7 P4 A% I3 ^/ \' T( P k/ r. ^
测试过 SPI 之后接下来的目标是想熟悉一下 UART 的功能,由于 STM8S001J3 已经摸索了一段时间了,因此有了一个想法就是想改用 STM8L,让 STM8L001J3 与 STM8L050J3 之间透过 UART 的方式互传资料,由于我是使用库函数的方式编写程序,因此直觉上认为 STM8S 与 STM8L 的库函数使用方式应该是相同的,我下载了库 en.stsw-stm8016.zip,新建了一个 STM8L001J3 的工程文件,参考了 【STM8-SO8】01-点灯 的工程文件修改差异之后重新编译后竟然出现了错误!
. c5 P# L" w; h0 G5 N
+ f# ]1 E# M) B8 |$ g5 [* q7 Z
' v& D& h- u4 v, P$ ]7 g9 m
6 w8 z8 E2 D$ P# T哦!怎么会有错误呢?查看了库函数说明文件才知道我目前使用的这个 STM8L 库跟原本使用的 STM8S 库 en.stsw-stm8069.zip 是有点不一样的!除了文字会有大小写差异之外,库函数也不是完全相同的。! F8 p6 x- k8 l6 W, O' X" ~
( ^$ ?$ s6 H! `" R3 ^
比如说对于 GPIO 引脚的指定,原本是:
+ ^% b3 N: z8 `' O$ N& C: Z#define LED3_GPIO_PINS (GPIO_PIN_5)
' Z' m. t' k/ W" y. c# D. R# y5 R6 X, Z
而现在是: Q+ ?& Y4 o9 \6 F8 X
#define LED3_GPIO_PINS (GPIO_Pin_5)
9 N' u2 A; p$ ?9 n) d% {' t
% ?! `+ V6 P4 I+ V. g* l原本是:
8 s6 S- J( y; ~4 z& QGPIO_Init(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST); 9 P, j) }- I& S1 V% C
! P' T& J$ @( t5 n+ T* @现在是:
1 c6 @( h$ Y1 A) l4 cGPIO_Init(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS, GPIO_Mode_Out_PP_Low_Fast);
) X& V8 }6 f- b* K) Z% @0 w" O" ] e: e& Q1 D1 F: C6 L; [) u
在 STM8S 库里使用了 GPIO_WriteReverse() 函数反转 GPIO 的输出状态,而这个函数在 STM8L 库里是没有的,因此改用了 GPIO_ToggleBits() 实现相同的功能。
5 l$ `: a8 g, D5 `3 d, Q% z5 I# ]! N" h6 G( ?2 x/ A; O1 @
main 回圈:
! ^ N# U7 N- }2 u- void main(void)
& h0 y* e4 g4 }) \1 w! H. s0 F8 h - {& q/ T& N/ _$ h& x( ?# ~
0 Q$ g2 [9 Q; D- GPIO_Init(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS, GPIO_Mode_Out_PP_Low_Fast);; y7 p# d; z( ]2 m. v6 o. h" s. K8 U
- GPIO_Init(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS, GPIO_Mode_Out_PP_Low_Fast);
) s+ X4 l* K5 u" r) s z( G - GPIO_Init(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS, GPIO_Mode_Out_PP_Low_Fast);" d8 Q) r$ {3 }. C, U
-
* o- q* ]- R5 c, ? K* b4 L, s( N - while (1)
1 Z8 L, r7 f' e( S9 |- R$ c - {9 t% e: w2 W3 v
- GPIO_ToggleBits(LED1_GPIO_PORT, LED1_GPIO_PINS);
& |/ j1 B* j: }* } - Delay(0xFFFF);1 d q* X1 H( a4 I9 t- i, i
- 1 o5 }, d) q8 ^
- GPIO_ToggleBits(LED2_GPIO_PORT, LED2_GPIO_PINS);! g( W& ^6 d/ b/ X
- Delay(0xFFFF);0 R/ C: Y' V7 @6 }
- 2 s- z9 f9 X4 B: V4 ^
- GPIO_ToggleBits(LED3_GPIO_PORT, LED3_GPIO_PINS);
) `$ t% N: B( ^! i3 u - Delay(0xFFFF); 1 }( u. N+ {, H k) h5 q/ x" m
- }3 d/ F" p. L. [& q" f( G
- }
复制代码
9 D% z, [1 R7 z! a6 [5 z I2 k3 d不太能够理解同样是 STM8 的 MCU 怎么库函数会不一样呢?是不同的库由不同的团队开发,而大家的编程习惯不一样所产生的差异吗?
1 }/ c" j* F4 g# s [3 o( ]2 `# a; `: D: U$ T
- v# T4 T! ?: C! {7 f8 i源代码:
: p" _! K6 ~2 |1 |+ m
B10.rar
(1.12 MB, 下载次数: 94)
|
程序中我没有使用到 pin1 的功能(SWIM),因此没有加上5秒的延时。