本帖最后由 slotg 于 2019-1-29 22:32 编辑
6 [$ U1 c/ s3 f; M) N( X; s' ?9 ~8 R, I6 V- i+ M1 i. r7 `/ d
在 STM8-SO8-DISCO 板上的使用者 LED 对应 STM8S001J3 器件的安排是在 PA3 高电位输出点亮,而使用者按键是在 PC3 电路上有安排下拉电阻。而我在面包板上的接法 LED 也是在 PA3 高电位点亮,使用者按键也是在 PC3,不过我不接下拉电阻而是配置 PC3 有上拉电阻。
! t. b% M4 v7 r* P* E
* ^) l6 X3 W( T9 O5 Y
. F! W: d2 p2 C% K, Y
3 b* v$ u1 P( ^7 c8 B7 @+ }' X; z$ J3 F
在上一个 LAB 当中使用到了 SWIM 这根管脚,因此程序的开始做了一些必要的设定与延迟,不过目前所要实现的功能都不使用 pin8 这根管脚,所以程序中先移除这部份的代码。
! _/ \2 O) x( T4 { m, y6 J$ e- m" a+ P+ r1 o& t8 W* o" Q" ~( y1 L/ f
(一)
' U" ? T! B( _* ~7 z# l2 I _ P, _+ K第一个程序先来实现一个最简单的 GPIO 输入输出功能,程序读取 PC3 按键状态并直接输出到 PA5 上的 LED。
' N! r& z, N% U+ p8 j0 f" T2 a. } G8 k) R& M
管脚定义:
m" J9 J& q$ ^# S2 C- #define LED_GPIO_PORT (GPIOA)
9 G! P. c0 z2 B/ D$ K8 D, E - #define LED_GPIO_PINS (GPIO_PIN_3)
+ N. K7 z8 V/ ?7 E: k. w
6 g" B* Q# ~1 b$ W# V9 ?1 k3 j, W- #define KEY_GPIO_PORT (GPIOC)" B0 p% f! h# a% T( b: z4 {
- #define KEY_GPIO_PINS (GPIO_PIN_3)# l2 R$ T- a/ x" m* ?; [: P
复制代码 4 M+ \2 t) r9 Z9 G" v1 I8 M
main 回圈:
% H+ Y: ~' H" m( H7 U3 K- void main(void)7 x4 j/ a) b& H9 ~* `
- {
3 p: m. c" e1 Q# C+ X5 G - GPIO_Init(LED_GPIO_PORT, LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
0 G# }9 \& L5 Y" N' f7 v4 Y - GPIO_Init(KEY_GPIO_PORT, KEY_GPIO_PINS, GPIO_MODE_IN_PU_NO_IT);
8 u" `1 p; ^5 x/ B" } -
) U: P, o* [! i; p - while (1)8 S! A# u2 o5 o. C5 k/ A5 c0 T5 j
- {
2 R2 M/ Q5 i' ]# Y o - if(GPIO_ReadInputPin(KEY_GPIO_PORT, KEY_GPIO_PINS))
# M9 z7 Q9 w' L/ ?* B - {3 o$ A- k7 D- X4 r7 G
- GPIO_WriteHigh(LED_GPIO_PORT, LED_GPIO_PINS);- Z Y1 f/ a% H f X$ o5 P
- }, m% j Y- D$ w* W; m' q
- else
1 s1 M, d4 W3 v - {# K3 J3 p* n4 c7 D1 ~; Q' I5 ?" u
- GPIO_WriteLow(LED_GPIO_PORT, LED_GPIO_PINS);
. t. c1 ~4 z# |5 Y8 j; d) @/ b - }
5 @# G4 [! {2 T. l - }
4 I/ A. F/ [/ X8 y! R5 G - }7 y* @: n3 h" y" n
复制代码
3 _' s V1 Z! d' A0 K. o按键放开时由于有上拉电阻所以输入状态为 1,直接输出给 LED 因此 LED 是亮起的状态,按键按下时 LED 熄灭。
0 H2 @) y( q# t8 l+ i3 Z
+ w$ B5 L" |( O& P- l, b源代码:
! A' G2 s/ l% \! u
B03.rar
(715.63 KB, 下载次数: 6)
|