本帖最后由 slotg 于 2019-2-19 23:52 编辑 7 l' E, F3 O) D6 v; |$ U' D
& B/ \7 v" E+ M3 _% w# t& `1 @测试过 SPI 之后接下来的目标是想熟悉一下 UART 的功能,由于 STM8S001J3 已经摸索了一段时间了,因此有了一个想法就是想改用 STM8L,让 STM8L001J3 与 STM8L050J3 之间透过 UART 的方式互传资料,由于我是使用库函数的方式编写程序,因此直觉上认为 STM8S 与 STM8L 的库函数使用方式应该是相同的,我下载了库 en.stsw-stm8016.zip,新建了一个 STM8L001J3 的工程文件,参考了 【STM8-SO8】01-点灯 的工程文件修改差异之后重新编译后竟然出现了错误!
$ i1 g! u' i8 y% S, ^2 h, K
; U% z0 ^' Q0 X* F2 `
: W4 H( Q5 R4 V7 v# ]
1 d( c, y! l: R/ l' v, B
哦!怎么会有错误呢?查看了库函数说明文件才知道我目前使用的这个 STM8L 库跟原本使用的 STM8S 库 en.stsw-stm8069.zip 是有点不一样的!除了文字会有大小写差异之外,库函数也不是完全相同的。
, r1 n2 v# T/ L/ G; b; O$ ~( }2 j+ r" e" ~" @$ G8 ]! s- w
比如说对于 GPIO 引脚的指定,原本是:5 o1 f1 j, k* T9 p0 ?& }5 p9 L
#define LED3_GPIO_PINS (GPIO_PIN_5)
1 o* }6 _+ S: w; N+ d3 s& w7 y
8 b1 p9 E7 [, H0 j( U) R而现在是:; m6 D* @1 i, y( s3 T6 N4 N2 }# Q
#define LED3_GPIO_PINS (GPIO_Pin_5)3 q* X* g2 v" K0 p' \
( ^* n, L( q7 o7 n原本是:3 G9 x* z' t4 ^: k1 N! X8 W5 J
GPIO_Init(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
) @1 c4 t' a' v6 q) T0 a7 }% W
& U: i# v5 W$ [1 ?$ T. R现在是: O- B: @, I) O' N4 j+ ?4 z5 L
GPIO_Init(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS, GPIO_Mode_Out_PP_Low_Fast);
* f) h8 J) D. z2 O
! `7 l' p" W) x6 L在 STM8S 库里使用了 GPIO_WriteReverse() 函数反转 GPIO 的输出状态,而这个函数在 STM8L 库里是没有的,因此改用了 GPIO_ToggleBits() 实现相同的功能。
0 B! j2 f, {0 E3 {' R% h% I6 J3 U3 P" U; s0 Y" V1 G
main 回圈:( W$ Q9 I0 A" D
- void main(void)
! @4 z6 d+ |& `6 X/ O - {1 l) ] \- C; Y0 V8 w% T9 C2 m
- ( H; E; S, |! P0 Y" s0 Y) d
- GPIO_Init(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS, GPIO_Mode_Out_PP_Low_Fast);
6 f8 q4 z! ^9 }! C0 m+ a5 d+ X7 z& D - GPIO_Init(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS, GPIO_Mode_Out_PP_Low_Fast);
k$ _. J# N' ?5 H& T1 S - GPIO_Init(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS, GPIO_Mode_Out_PP_Low_Fast);7 {' M+ }) _! D% C6 ^# L1 [
- 4 e$ J+ s2 C1 @; \
- while (1)7 F5 Y! W- v0 A0 G: @- K
- {- H0 ?7 K* t4 i3 {3 L) {
- GPIO_ToggleBits(LED1_GPIO_PORT, LED1_GPIO_PINS);7 z- G$ @8 g1 e5 H: W# |, B7 t
- Delay(0xFFFF); `- |+ I1 v1 F5 f" F: G5 U8 ?# S; I( \
- % Z0 x0 A- d; W7 D8 e
- GPIO_ToggleBits(LED2_GPIO_PORT, LED2_GPIO_PINS);8 \% ^, e& `+ g$ p
- Delay(0xFFFF);
- q5 w6 _7 Y' i% Q. e2 ^ - / a. e U2 b- l) W: N+ z3 [9 f# ]
- GPIO_ToggleBits(LED3_GPIO_PORT, LED3_GPIO_PINS);
, \2 i; e* C# N( y( J+ L4 a - Delay(0xFFFF);
5 I8 A ^6 I3 W, | ~: x3 X; J - }7 d/ V5 R2 o& ~: Z% X/ ~( y0 O) S
- }
复制代码 : E" r( K9 n- m0 E
不太能够理解同样是 STM8 的 MCU 怎么库函数会不一样呢?是不同的库由不同的团队开发,而大家的编程习惯不一样所产生的差异吗?' \ r* ^ x/ G
$ Y# J; u5 _' s h6 ]3 k
1 Y8 A# a( ^, d( v" ]/ B, R源代码:7 j! [3 m1 x# m# B7 L* o3 ?
B10.rar
(1.12 MB, 下载次数: 94)
|
程序中我没有使用到 pin1 的功能(SWIM),因此没有加上5秒的延时。