1:新建固件库工程文件6 Y- l; B. q% X/ p- H( j1 b! C
1.1找到一个固件库模板! P% O$ H+ k) T7 |# u2 j2 o
. |, J! X# K9 p7 ] h8 n* D
2 Y# k7 Q! H7 J5 |7 M, u: F
& Y2 ^5 {! _- I% D a5 X2 J
1.2:打开KEIL5新建工程
% l& L9 l6 U1 a7 x: `5 H G0 I" g5 m
% |9 |& } w5 \
: s" }0 V, n, p: a: M# ^
# x1 c2 ]: Q3 W k/ S
3 P! I9 t) M' I6 N/ x) l: U' u$ N. d1 Z1 r0 S$ L0 C' Q+ W
! _ V" [0 \9 N
g; F2 A5 G F; A7 {
* J" C9 [5 J3 i5 l8 W
% |* k8 T& w& u$ b. u) o
; ^8 _3 K, w V5 ]# M& }; h' x4 {
4 J6 A5 f. M4 C1 U% p P3 B
最终效果:
; C8 ] ]; F) H+ W
0 h' [$ |7 [5 O6 }
! ^# d# D! ` e0 M2 y% M5 D7 X
3 N! @2 i! q9 L( V1.3:添加相关文件' X% n* t% M. ]5 ?) b1 C
然后我们针对不同文件夹 我们添加不同的文件进来。
( z& w, Q" T8 y" l! Z9 ]9 p% i双击STARTUP 添加我们固件库的启动文件" W" F! z9 J7 U+ ]' D8 f# r
& i. V3 O% \0 }STARTUP:添加Libraries——>CMSIS——>startup中的启动文件3 J5 o# z2 u8 r: S0 G& r
0 r/ z b, {, u- `. y
6 o* N5 E+ a& [/ H S. h
5 z2 ^+ B) f1 @8 i6 C" S( vUSER:添加固件库的User文件夹中的.c文件
( ^: `8 o% o3 g" f; z
& T( q9 G# Q, M, ^7 H( _( jCMSIS 添加Libraries——>CMSIS文件夹中的.c文件/ ]3 ?+ F5 k5 Z, f- j/ Z9 |9 u
DOC:添加固件库中Doc文件夹的readme.txt
+ D0 Q1 {& E Q5 U% V9 MFWLIB:添加Libraries——>STM32F10x_StdPeriph_Driver文件夹中的.c文件
0 e- o1 J3 ^& T. F+ R. r7 L. a N0 R* I" K+ Q. D. b0 o
添加完效果
2 [. V8 A$ w7 y5 Q
& l4 o: |& T4 y
7 L& e; W: B* f. ` s6 M0 f ~7 O7 B3 `" O: F
1.4:手动添加其他文件路径进来: s2 x& ?1 F: v4 r& i/ l# \
打开stm32f0x.h文件4 d% w% R+ i4 {! v$ v
3 U3 g7 s5 @: h2 L
, N7 i$ C; X9 v- H
4 m' E. g/ ^( F. B8 p7 S. d) O* l按 Ctrl + F 查找 stm32f10x_conf0 ]! t S' g Z8 I8 u
会调到一下的代码 我们得宏定义加载一下
2 Q! p" E9 U, z6 B9 h B, u" ~' B" l; C5 D
* i6 s( v# T$ K6 b8 T$ k) I1 m: G; X' r
) s" d T8 D4 p# M% n4 `. g0 W0 C [% U
添加其他文件夹.h路径 P7 {+ [+ G. g4 Y
! O: w, B" n8 f) x3 k
% D, L y4 I7 R7 C$ ^- B. G6 p& o; e1 P2 s. d$ \* ]
这样就是新建固件库工程文件完成了。。。。。
! s& M; A' p9 l4 x下面就开始点灯 点灯 点灯
4 u' Q! F H; o0 u0 r, u" B1 c下面就开始点灯 点灯 点灯5 G- Z4 p3 B2 y& D3 X" M
下面就开始点灯 点灯 点灯9 y9 W2 i( G$ z
( {0 K( F/ S3 ~" b- f
2:STM32固件库点灯
% [/ w$ {* l2 _! r首先你得有个固件库手册来参考 我这里直接上代码。
7 ?9 l+ R4 O2 h2 D+ A& U6 X, ]2 J7 F' P: ]. \
0 p9 `% w. a& [
% Z, _* Z1 M; \8 A我这个用的STM32C8T6板子 PC13是LED灯 根据原理图 给个低电平则点亮( V/ y) b7 D' T1 O4 r
0 Q( o/ |0 v( S# ]LED配置代码
6 Q- U! `+ n$ E9 J5 g* ? h0 iled.c
4 g* _9 r6 R. |8 C( [, _- #include "stm32f10x.h"
3 v3 z0 A' o; r- R+ t$ k - #include "led.h"
" |- X7 H; ^" ^1 W5 ^4 o - . M# S. a; f) d/ b
- void LED_Init(void)
8 X$ g0 v& @" [) m4 M5 j - {
3 ?+ g; G8 O2 b1 P; Q8 P - //1.打开控制GPIOC的时钟(APB2). m8 K. f7 y6 z1 w5 d% d
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);1 Q8 A" |& W4 Y- N; u. N3 j
- 6 k( X2 J6 j3 F
- //2.配置结构体 : B6 i- n$ f/ q; Y6 }1 k1 @: N
- GPIO_InitTypeDef led_init;# i1 }' O( m( h0 a9 l
- led_init.GPIO_Pin = GPIO_Pin_13; //GPIOC13引脚( v( p% H7 a+ I1 M. `
- led_init.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 , o" |( Z1 [% o. c5 ]4 e
- led_init.GPIO_Speed = GPIO_Speed_10MHz; //10MHz
. R( ^+ K/ h6 |5 z - # ]% }. v! v" w j, w' `( K
- //3.对成员进行初始化" q4 O# J& y& c5 W% c* n
- GPIO_Init(GPIOC, &led_init);
3 S$ _: h' E9 f - }
复制代码
9 g: S- m- y4 N8 k% a: aled.h
( i7 n' m' l7 d7 F1 ]- #ifndef _LED_H_
5 F. c9 ]5 O! U3 P6 Y$ ?7 a - #define _LED_H_2 a3 w z0 Y1 Q1 H6 z
% e# t8 y" d( B" W, x- #include "stm32f10x.h"* a: x ^: P/ m# A
- 1 ?" s: g6 Y1 X% m, J* M% m
- void LED_Init(void); //LED初始化函数声明
/ l b$ V6 W3 ?- D; n. L+ ~3 M a6 j
. j8 x, g# `( K- r6 Q3 b- #endif
复制代码
- r/ \, p+ S; N2 B) e1 D3 G# e2.1: 方式1点灯
" Z/ ~* `( S6 \5 { I- Omain.c
$ m' b4 Y2 ?" A- #include "stm32f10x.h"9 w5 I3 |' Q( `3 f, k
- #include "led.h": ~$ {* C& w' |
G& _5 R+ l6 @$ o6 B' w- int main()* b* C1 d+ B# f1 X
- {
4 P4 s: Z1 O$ Q j9 P - LED_Init(); //LED初始化- V6 \5 _! ^& H
-
6 ]# ]* l8 ^0 }: v - while(1)
6 b& P" A( R+ B, A" p - {" [8 Y Y$ ^, ?! @( ]& A, d
- //方式10 x" G/ U# @5 ?3 r( }2 y1 m
- //GPIO_SetBits(GPIOC,GPIO_Pin_13); //P13引脚输出高电平
" r1 m% o+ q! u4 T2 [0 y6 Y; s; Q - GPIO_ResetBits(GPIOC, GPIO_Pin_13); //P13引脚输出低电平
. p o& L0 @) J6 k6 Y0 _7 n5 L - }
* Z/ Q7 S0 H) p. x* s - }
复制代码 ) k3 J; f0 b3 M
2.2 :方式2点灯
- e6 p1 O3 g' ^- _% u$ ]) Nmain.c5 ^& L: ]3 c& S! A
- #include "stm32f10x.h"4 ]8 X/ c/ T! v
- #include "led.h"9 F1 o" i+ Q8 s# ]) u; m# u o# m
- 4 N: M: L! R* ]/ z/ E
- int main()+ }; g4 k" e! s r \- o
- {0 s: y/ y2 {. V) q8 R! h3 i
- LED_Init(); //LED初始化
' \9 L- i; w* z2 Q' Z7 o2 @' N7 | -
- C" P4 B1 I5 ?2 U7 p6 R4 e - while(1)9 x* a$ U# _4 A* G! u3 p
- {
$ J9 X! q* a& [/ J o( H' B - //方式2
1 z3 g2 `/ ~. O: Z5 K - //GPIO_WriteBit(GPIOC,GPIO_Pin_13, Bit_SET); //P13引脚输出高电平
' k# I0 l2 Y. M - GPIO_WriteBit(GPIOC,GPIO_Pin_13, Bit_RESET); //P13引脚输出低电平5 ]7 ^1 ~2 ?/ T% i @ l
- }
( \7 v( q, M6 K4 C4 q; S9 ] - }
复制代码
+ I$ y7 d5 m3 o5 m' F. t+ l5 D2.3 :方式3点灯6 k' E! S% A1 g# r- x# o3 \5 Q
main.c
- b, R( G% O. e9 k. ^; U; M1 ~: }* D- #include "stm32f10x.h"4 s$ ?9 o% F/ F8 \
- #include "led.h"
+ O: B" ]$ p' ]2 U - 1 z2 U! j* Y4 k1 a3 a2 r
- int main()
6 d9 M( Y& R9 n5 }8 Z) Y! ~ - {
( G% t5 ~+ H, W3 `" w, u" Q - LED_Init(); //LED初始化
1 m9 i6 v9 a4 L -
+ K2 J- ? l& i/ h" q; g9 j7 M& j - while(1)% v( M4 D$ ^" q
- {' B, |# R: w$ j) k$ g9 Q/ h
- //方式3
: s7 i( ~8 O; F+ q - //GPIO_Write(GPIOC, 0X2000); //P13引脚输出高电平- W" O" i' \! K2 t" G; v
- GPIO_Write(GPIOC, 0X0000); //整组端口输出低电平
) C: q! V! D! m7 { - } & t# z7 M. ?& O9 X) f7 x& y
- }
复制代码
5 F! P. Y8 r8 E9 z( n O; R6 {点灯效果
% h! q+ h( ~9 x( Z* e* Y1 k3 X
/ o2 ]. [: q h S/ Q
- }& w3 U# Y& b- w* F& A- D$ m0 s3 u7 w# F# ]9 d. k
3:STM32闪烁灯1 y1 U6 v# ~" V# K
加一个延时函数 我们就可以做一个 LED闪烁效果了
: p& t. Q+ m8 e; I+ ^这里的延时我们没有用到定时器 ,只是简单的通过循环来延时。
9 U. ?# \4 }: b$ c2 U. g, ~ r( F1 x7 h. w3 E
delay.c
7 y- @3 B4 f$ m u- #include "stm32f10x.h"0 O% d" H; n: \( E- P4 W0 {" y7 n
- #include "delay.h"
( {! r0 c1 Y6 Z# e# o! I) W
) s* c; e6 ~9 c! ~# C3 b- void delay_ms(uint16_t time)
; c Z7 U7 U4 W) L - {/ Z. K; K$ Q( N' S) e' r; r! t5 y
- uint16_t i = 0;
; `9 Q4 s, l$ F5 t' m" v - while(time--)( Z/ z* B8 `; b' M3 h8 O" K
- {
6 C: O4 O2 P1 g' j( ^" \ - i = 10000;
6 T/ } H* U* k. E3 E) o - while(i--);. {% @) B; N# J8 C+ [( x8 P9 Z8 |
- }
. F! W: \6 C+ u" x/ o - }
复制代码 - W, ^5 P {& H$ N# R, i
main.c
- Z- E+ t4 d( r+ Z" |2 Q& E+ L! J- #include "stm32f10x.h"
/ l5 f% n* ?( [* Q- p$ l8 N$ Q% G" | - #include "led.h"
3 L" H& P2 ^2 j8 |8 t - #include "delay.h"
+ _1 g( U$ d' z9 c9 Y i- N! Y0 l& { Y - + W* B" k+ l. ?
- int main() c8 ^* I. W+ Z a# z
- {' y3 a" o9 f2 t9 v% J$ {6 n0 p
- LED_Init(); //LED初始化$ g- L8 L f- @) h* X4 X# {
-
7 G" k0 R; l; D4 I' h* g - while(1)
: F- G# n: ?- ?- l l1 X; R* y - { \, V3 w6 @* P- a
- GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED点亮: i7 a1 g7 `/ W/ b% {2 F
- delay_ms(1000); //亮灯大约1秒
4 ~" h) m6 i/ I: ?9 d( W - GPIO_SetBits(GPIOC,GPIO_Pin_13); //LED熄灭
0 s* V4 X' g% M# B - delay_ms(1000); //熄灭灯大约1秒
5 l* |: C# F3 t* F9 i - } 0 j |7 p) Q% Z
- }
复制代码 闪烁灯效果% {" r# K9 V% [
9 @* L$ l+ _) u0 e7 L I/ _; e
! T' |/ [; Y5 t( u3 D! |9 ?3 S0 W$ g9 Y3 q* d
4:STM32呼吸灯" W3 X) D- ?& S, t9 @. o6 [* c
呼吸灯就像我们人呼吸那样,我们可以让灯慢慢的亮 慢慢的暗,这个就是通过占空比来调节。(可以理解为LED高电平时间和LED低电平时间)/ p+ c3 ?! N: ?" h: K w: }
比如 LED 亮延时100us 然后 暗 100us 这时候他们占空比是百分之50.- v; ]* i$ p/ N3 |' u
那如果我们 LED 亮10us 然后暗 还是100us 这个时候 你会发现 LED灯变暗了很多。 这个其实是我们的视觉暂停 原因导致的。
2 V) {, i) y1 [: |所以我们可以通过调节 LED点亮的时间 和 LED 熄灭的时间的比例来调节,让LED 慢慢的亮 然后 慢慢的 暗。& u3 f8 q# K0 b# `9 x& Q. Y- d& p6 k' p
5 [/ W; b; U% Y% y! N. Y慢慢的亮 意思就是 LED的低电平时间慢慢的增加。
6 j0 [4 g s$ L4 M比如从1us 慢慢 到500us 然后LED高电平时间则是 从500us 慢慢到1us。
# q& l: V' D0 e* L如果是想着LED灯 亮慢慢 暗 则相反。
. o- _. }7 q4 o" h7 l! `& N' w) a* w2 u2 u- p
main.c
4 ?# |: R) U3 }- #include "stm32f10x.h"! b/ U3 a( l+ q
- #include "led.h"% E' d5 V- U: n" A' b- V: J
- #include "delay.h"
! H0 h6 d/ B) e, e+ ?/ d! }
! B, w- b0 d x6 X3 v- int main()& j' y: O- o: `+ {( r
- {
9 T3 l* k, V$ ^0 G u: c - LED_Init(); //LED初始化8 M) |* m- z" p3 {, u" ]
- unsigned char i = 0;
2 Y9 I1 |1 R- D6 A: `& g, R - unsigned int t = 1;
# |* ~: t, q5 O5 V! s- N/ P' a - unsigned char flag = 1;
( Z2 [) Z+ s B4 ?1 h - while(1)
. ?' n& v& m8 V# b1 c - {
2 v! ^: y7 B8 Q - if(flag == 1) //LED由暗到亮6 `1 ]+ ^/ ~6 I, S9 x. R) G6 W4 R# O- k
- {
8 o7 N \' S$ Q7 ? - for(i=0;i<10;i++) p( B: L4 b; C) j6 e {
- {6 G* N! R" A: h/ i0 L6 }. x. q
- GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED点亮
2 |# Y W, f# e: e - delay_us(t);) I3 Y& W) S" H. m
- GPIO_SetBits(GPIOC,GPIO_Pin_13); //LED熄灭
$ _+ v- i. L1 y: b3 L - delay_us(501-t);
3 d/ d' M! q0 l! ^ - }4 g& q3 v3 f9 v7 o+ Z. Z
- t++;
8 h1 n- B/ Y' h$ Q7 s - if(t == 500)
. D9 ?! l7 }; \/ R - {$ b! e8 P' m3 `7 s5 b E1 ^2 W
- flag = 0;3 ]2 D% v2 B! y9 y9 U, w; y
- }
: n9 e/ y8 X2 | - }
, a0 ]9 M9 ~& ]# b, @ - if(flag == 0) //LED由亮到暗8 Q# U3 }0 f: K0 a- c! H: Y$ s
- {+ D d7 a. R2 A7 R2 c. c
- for(i=0;i<10;i++)9 m H1 L! F! z9 d0 n
- {
" _0 m& u4 G8 g& o; U - GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED点亮
( g7 k$ l/ T/ w Y# c" i6 x - delay_us(t);; u p- ~, E. u( K
- GPIO_SetBits(GPIOC,GPIO_Pin_13); //LED熄灭( l' ^ `( t, `
- delay_us(501-t);
1 W1 q7 L. w4 h- w+ |1 z: F - }
. p3 P$ c |) l2 a7 e - t--;! l6 P3 }6 G( R7 s6 @5 {% c
- if(t == 1)
( \# P2 k8 c8 B1 ~4 ~ - {
. M# e. |$ \' ?0 K1 S6 P - flag = 1;: O; n/ Z3 d# v7 G( N: r; M- x
- }& q! C6 p$ `5 M9 Q: |
- }
; F8 ~" @ s; A2 _( i3 n8 z% a& j+ n - }
* g7 `; { t# L! s+ [( R } - }
复制代码 * h: Y! T$ _" R' D, X
! O6 _- \% r5 c1 s; D2 S+ D
6 Q; h* }( j9 m
& e7 a+ G' [5 {$ X/ n5:STM32按键点灯
7 O, w- D+ d8 u7 J我们玩了呼吸灯 也可以玩玩按键点灯,按键其实也是挺简单的,我用的按键是只有两个引脚的,我们任意的一脚接单片机的GND ,另一个接单片机的GPIO 当按下按键 这个GPIO则会是低电平。 那我们就检测这个GPIO是否是低电平 如果是 我们则点亮LED灯。; N3 G% ^# I; p
, t9 I# c% ?' }6 D r6 V/ ~key.c5 t, P/ _1 b" X! G1 i
- #include "stm32f10x.h"
3 e- w1 r) _' q - #include "key.h"4 c0 X0 I" C& d
2 a { P" J. [6 p4 X& m2 h- /*按键初始化函数*/1 G9 }# z: J# x
- void KEY_Init(void)- W& a8 U: M m3 g
- {6 G2 T6 p3 T y4 X
- //1.打开控制GPIOA的时钟(APB2)
3 m2 O2 X1 D4 X6 W - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);3 y6 }+ t* P) }# t; I* s# H5 o' E
-
, G( j1 P0 r7 h - //2.配置结构体 / A2 \, H* ]+ i! R
- GPIO_InitTypeDef key_init;3 G$ }5 h7 {' N
- key_init.GPIO_Pin = GPIO_Pin_5; //GPIOC13引脚
4 q: H" a2 i- R - key_init.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
9 G$ A. i) V, e2 Y8 ? - //led_init.GPIO_Speed = GPIO_Speed_10MHz; //10MHz. @; ~3 n4 e& c7 k
-
( d2 A( i3 a% d: A" g - //3.对成员进行初始化* F. V/ n( v) Y6 l& N, w
- GPIO_Init(GPIOA, &key_init);. j K7 R% v' D3 M0 K
- }
复制代码 , W+ n# B2 `3 a! C6 F" r" O
main.c; N* q5 D n; }4 r X( Q/ Z
- #include "stm32f10x.h"3 Q f2 ?& q' g. H, n5 @" q
- #include "led.h"1 `2 A2 _, \. v+ Q# }
- #include "key.h", R* T! {( b4 E- x v3 J5 |
- #include "delay.h"5 S t5 u8 n% T. ~
& H. u, [# v: s- int main()
* n9 j% e" \( v; W( q, O# D+ s - {
7 |7 Q" Q; ~* t; |6 ` - LED_Init(); //LED初始化
- R0 n4 O" O0 O" o U - KEY_Init(); //按键初始化. s& C; s) E9 h T0 U j
- GPIO_SetBits(GPIOC,GPIO_Pin_13); //LED设置高电平
, ]* |" l: c: {0 ^ - GPIO_SetBits(GPIOA,GPIO_Pin_5); //按键设置高电平1 t& ?5 ^ B$ E" x! k. q6 y3 ]
- " c1 b3 r ?. H
- while(1)2 M1 ^7 L( s& s. K' J
- {
0 o2 m) B% Q8 Y - //如果按键被按下/ P y) h4 s* k8 r
- if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) == 0) ) V) h1 y. |) j Z& p0 W, d
- { E& N+ N1 l9 o# ?6 E
- delay_ms(20); //消抖再次判断是否按下
, A2 m0 C/ I4 Q9 V. f; T) @/ q - if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) == 0)& ^7 O/ S2 E( l
- {
/ l; m8 l$ l9 P5 {3 c - GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED点亮
6 ^( y) W8 g0 K |6 z1 y - delay_ms(1000); //延时大约1秒 : r/ v' ]2 R( k
- }# }' B u; Y; @
- }
3 J, [- S' M1 A, Q( b9 ^ - else
) {9 X, s* @' [, e7 @. a - {
7 j9 B d6 d4 s5 Z s+ s0 R - GPIO_SetBits(GPIOC,GPIO_Pin_13); //LED熄灭
* x4 G- _' N9 m3 N# e) e - }
" I7 T! G( J& W8 r - } 3 z5 d& e0 f+ P% t
- }
复制代码
$ c+ y$ a1 Y, ?* y: F按键点灯效果
`0 N& ]" O: z6 ^4 N' V
* ]$ S( W$ ~- E5 f
& [1 k& E j# S) g
7 s3 p1 R6 p8 \+ q1 K! I8 i6:STM32震动感应灯0 ?* p$ X# W6 r
需要材料:" [- q& k' x% |8 ]: ~/ S" H
6.1:震动传感器
9 B% z( ?0 n1 D( `5 F+ P# I' e3 G% L" l* q
: v# m" z$ V+ L9 U
5 K7 P' `" m( L" _2.继电器6 ]0 z: z% [1 ]6 |/ t4 l
(我用的这个是高电平导通)
7 E9 H! d: G& m
5 l2 O% O( j# G3 F9 A( R' O, C4 r
9 k9 B% [2 Q/ A/ i/ x0 p
% O% j4 E& o0 X% [; j/ e* U
灯
5 B4 G) o9 u$ y" e% L这种是震动传感器,我们可以也通过震动来点灯,我用的这个模块是当发生震动时,会变成低电平。那其实就是相当于我们的按键,我们去检测一下这个模块到底是不是低电平如果是低电平,那么我们让LED灯点亮1秒啥的都有可以。: D" @) s4 Q- K3 A* @! t
直接上代码:
" z* A& Y4 T; b6 T" z( _) V配置震动传感器模块代码
! s1 V" o9 [2 e7 a$ T5 g6 j3 E3 h/ I; C& [% [
代码
+ S; q1 { r; [9 _: T! B7 s2 W- shake.c+ `. ]% H" m' T) k1 x. z
- #include "stm32f10x.h"- b( s8 b7 [# n3 W
- #include "shake.h" Z" a' w0 ~& L, o! u0 I' e
- " U7 K& @3 |) E- w
- /*震动传感器初始化函数*/' D6 l, f; ?( b" N* T. \: l4 M9 X4 P
- void SHAKE_Init(void)
; g$ X% W- O8 h) l - {6 M3 [. O5 {! H# Q' x- H
- //打开GPIOC时钟
. S" j0 {1 T) F6 l( d - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
3 o5 y" T9 L+ ?7 x8 b# | - 3 w5 g$ v+ x" E7 `
- //配置结构体+ m6 o& W0 U4 O( ^8 c
- GPIO_InitTypeDef shake_init;# K6 j' N" L, t) D3 A% N
- shake_init.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
7 t* O9 N- Q9 k4 [' z5 R - shake_init.GPIO_Pin = GPIO_Pin_3; //A3引脚$ h4 U, Z$ F$ ?, d
- //shake_init.GPIO_Speed = GPIO_Speed_50MHz;, w8 _! x' l5 g! X# l3 N
-
t, s# k5 ]+ E: P* }; _ - //成员初始化
, T8 f/ |9 W; D+ K - GPIO_Init(GPIOA, &shake_init); # a5 C& U0 b$ M u% V* ` }0 i
- }
复制代码
5 A: C% I: O8 F/ C+ O) W( A6 ~: i* p继电器模块配置代码:
2 P8 \, I0 }* i$ d0 C2 i: i
# H. k& D! _! Y( ^% N& I. Q0 wrelay.c% h0 R* |% }) j. F/ V! b* S
- #include "relay.h"
' c% p6 D/ B9 U. Q2 B, t - w: Y% a ?% |
- /*继电器模块初始化函数*/9 ~; Y- n) V8 u9 _/ l
- void RELAY_Init(void)
2 W. J. q" E" h$ a+ _& i/ x; n" Y - {
4 o1 \! `! A0 c7 C& L! q - //打开时钟" y$ v+ s) U3 W
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);# X8 |' f" Z! {% D: K+ m
/ P% y# ^" R8 ^- //配置结构体
" d& w6 c: n" |/ X - GPIO_InitTypeDef relay_init;
4 @1 v9 s" m6 o5 x, F - relay_init.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
, T9 ]0 @4 z X3 V - relay_init.GPIO_Pin = GPIO_Pin_4; //3引脚2 r9 Z0 ^4 k4 R: k2 {! v5 A* C
- relay_init.GPIO_Speed = GPIO_Speed_50MHz;
# E- h1 i; P7 U - * J* y' A- G: v7 W* U! D5 j/ W, b
- //成员初始化
( V: l( z( P* M' n2 j; D - GPIO_Init(GPIOA, &relay_init);
$ E4 F2 v2 |: G6 j2 i: P - }
复制代码 main.c7 {% @3 t* b) Y K7 |/ p! o' n2 |1 n
- #include "stm32f10x.h"- g6 ]# k3 |, |
- #include "led.h"5 p/ ?: h% ~" ^1 f+ e# R+ _/ m
- #include "relay.h"
# g" q7 D& `: J5 i, z* C4 w' l- u - #include "delay.h"
3 [2 p/ z+ D- d# j9 e- l) v- a - #include "shake.h"7 ~$ x- [4 C) E8 J, V; M; Z
! S4 }: ` @' Y6 }* P: W# x- /*主程序入口*/
; u m9 O! i# d+ _1 Y - int main()* D4 \1 b/ o0 a( D4 R7 b$ s% l3 l
- {
5 I. {8 g8 ~9 T" I - LED_Init(); //LED模块初始化" l- s3 e/ p) }9 j. J
- RELAY_Init();//继电器模块初始化
|, q) a. M y/ A4 ^ - SHAKE_Init();//震动传感器初始化
% b( y, p8 `8 R - 1 T" r1 ~4 D. s+ O$ p! z+ a( A
- GPIO_SetBits(GPIOC, GPIO_Pin_13); //LED高电平
$ w6 H z8 k5 V7 y8 G - GPIO_SetBits(GPIOA, GPIO_Pin_3); //震动传感器高电平; g5 M* ]* g+ z$ B0 `$ N
- GPIO_ResetBits(GPIOA, GPIO_Pin_4); //继电器低电平(关闭)/ M* T! T# E" k+ t
- while(1)& _; d/ p* _' L. ?
- {
# Z) N3 I/ d8 l6 T# Y - if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3) == 0)
/ J; ?: R0 ~, a/ g8 O - {( e$ u* e7 o7 `7 f) {5 @
- GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED点亮
: v" W" B2 s4 W# s$ w+ ] - GPIO_SetBits(GPIOA, GPIO_Pin_4); //继电器导通 (高电平)# b7 x! ~+ ^5 u$ A) L5 d" \
- delay_ms(1000);
4 s. C( _) g9 r. A5 S$ `8 q - }
9 ?4 h. H R* Z/ s* K: K- { - else
3 k/ f( l j& O$ e1 W - {) G% \2 _$ `9 w* H" D, T/ v
- GPIO_SetBits(GPIOC, GPIO_Pin_13); //LED不亮7 {' X, p0 p" E" }8 \' e" o' L' `
- GPIO_ResetBits(GPIOA, GPIO_Pin_4); //继电器不导通 (低电平)% F4 v0 L- A5 ~; S. C
- }! ]) r0 o8 o( q- \
-
& [1 Y Q/ X8 Y+ D0 X" v - } 4 o& @, u! N+ ~
- }
复制代码 / @0 X' i& W. o8 J0 a9 Q/ N5 _
如何接线& F2 v9 y$ D3 }( V2 w2 I8 l8 @9 w3 X3 x
$ @7 |2 y# B1 N. m, F( {% v
) O% o, L- y" A; Q
; O( a7 E7 p7 L& j5 M& s6 X& g- s
# i0 p+ W7 n7 `8 H1 |8 o4 ?' S! |, {( }8 g
项目效果
: A( x' d: [. ?# i- w+ \- ]( Z
& ?" A1 x. i; W2 b( a
& v O7 B# J8 z8 _ c2 s# |# l————————————————/ g" h! }& p7 ]) s) m
转载:皮卡丘吉尔 |