|
知识介绍工程文件放置
* y* Y* ~( N Z! @
只有在添加进这一串之后,才能使用头文件集合 stm32f10x_conf.h
6 N2 t2 q; A, K. H
6 b/ Q/ ^" g7 P* Y1 i" n% s* W# h1 w
选择类型 初始化时钟从哪找在stm32f10x_rcc.c中。
* G) G# F' c3 H( L+ h
- v M; P" k7 t+ c) d' j9 W1 R
断言函数
& a; N8 ^2 \1 v2 [4 b) ?
此工程需要编写以下五个文档
' d2 q% X# O! q6 p9 R7 ]
LED.h - #ifndef __LED_H) j }. y0 \/ ^( u9 s7 |/ \9 L, F
- #define __LED_H
: z% P7 j) ^3 P' D - #include "stm32f10x.h"3 z; O" I4 g; I" l4 x p
- #define LED_B_GPIO_PIN GPIO_Pin_1! v/ C( \5 g) p2 _7 d# o
- #define LED_R_GPIO_PIN GPIO_Pin_5
7 j; H6 E- }$ f9 n - #define LED_GPIO_PORT GPIOB
) L) J( B2 R, ` - #define LED_GPIO_CLK RCC_APB2Periph_GPIOB$ Q$ G- J7 K5 k2 ]! |$ U* f
- //反转
- R- g* l2 L* j- G1 q+ c' m - #define LED_R_TOGGLE {LED_GPIO_PORT->ODR ^= LED_R_GPIO_PIN;}//异或可以改变原来的状态
2 j$ u I s; I& W" x/ l - #define LED_B_TOGGLE {LED_GPIO_PORT->ODR ^= LED_B_GPIO_PIN;}//异或可以改变原来的状态; s) W6 R. W, q& N( ?
- void LED_GPIO_Config(void);
! \6 U: e1 W/ m: k. ~% } - #endif /* __LED_H */
复制代码 1 B( M# ]* }" E, q
LED.c - #include "YANG_LED.h"
/ c& y$ ]- r0 |( w- p$ ^ - void LED_GPIO_Config(void)- J* c w/ }9 G6 W! a' J
- {
0 ~5 E' C& o9 W6 E: O* L - /*定义3个GPIO_InitTypeDef 类型的结构体*/
' L2 z* |2 I3 {8 d, H - GPIO_InitTypeDef GPIO_InitStruct1;
& c5 O" P `4 N7 n$ l, p6 f - GPIO_InitTypeDef GPIO_InitStruct2;
9 `3 U+ {" Q- ]* Q - /*开启 LED 相关的 GPIO 外设时钟*/
. l, A9 d; b' k- B - RCC_APB2PeriphClockCmd(LED_GPIO_CLK, ENABLE);
' }$ S9 r. f7 W8 x - GPIO_InitStruct1.GPIO_Pin = LED_B_GPIO_PIN;# i; E# K7 j- l5 D- r
- GPIO_InitStruct2.GPIO_Pin = LED_R_GPIO_PIN;& o6 P% M* X" @2 x
- GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_Out_PP;
+ k! n0 S- p' f( {" e3 ~! n - GPIO_InitStruct1.GPIO_Speed = GPIO_Speed_50MHz;. v" k1 [" [( E& {8 Q
- GPIO_InitStruct2.GPIO_Mode = GPIO_Mode_Out_PP;
, \8 f) g: }$ M/ ]8 b! Q" O* y: F - GPIO_InitStruct2.GPIO_Speed = GPIO_Speed_50MHz;
0 B( o) W2 `, O8 A, H) x; w6 ]- Y - GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct1);
. E; H+ f: M T" J% X, e; V# ?3 T8 {' c - GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct2);8 h5 g: d, O1 W9 k/ |
- }
复制代码 % A [1 b' e o6 g( K
" z7 B6 i& {( t$ F
% U6 I4 z9 O8 J+ N% e3 e0 K
KEY.h
4 N3 R% q: Q0 E/ Y8 a9 w - #ifndef __KEY_H
+ O0 m& k% T' Z' b - #d#include "stm32f10x.h"
: V: f8 ?9 u/ H% e$ r! w - #define KEY_ON 1, e! c/ n# r" @4 C2 m( u
- #define KEY_OFF 0
' P) A$ Z/ u- k) v" P" n - #define KEY1_GPIO_CLK RCC_APB2Periph_GPIOA1 ]1 b; {% ^6 l) L
- #define KEY1_GPIO_PORT GPIOA
7 ~6 @4 ?" h5 S& R0 m. u - #define KEY1_GPIO_PIN GPIO_Pin_04 L& {4 V$ Q+ C. r. L9 N. @
- #define KEY2_GPIO_CLK RCC_APB2Periph_GPIOC
v3 ^: y* \( G$ T# p; N& a# d - #define KEY2_GPIO_PORT GPIOC
* R& u; L; q! ]2 t: l - #define KEY2_GPIO_PIN GPIO_Pin_13
+ e0 g0 d4 H x4 d' E% q7 z4 M) L - void Key_GPIO_Config(void);( J$ V L# \* `6 K! x
- uint8_t Key_Scan(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin);
4 c6 c$ N" i3 g" w6 ?. d - #endif /* __KEY_H */
复制代码 9 t, [3 a6 Z1 f
KEY.c - #include "KEY.h"
3 B% R3 _% f2 Z - void Key_GPIO_Config(void)
, i& a5 c6 Q$ m - {
2 R0 F/ @! N F+ C" T2 `5 A - GPIO_InitTypeDef GPIO_InitStructure;
6 F! U, F- ` v5 |6 C7 O$ s% _ - RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK|KEY2_GPIO_CLK,ENABLE);
' i+ b& q$ b5 c - //定义第一个按键
# t9 H/ f7 @1 o' h* ] - GPIO_InitStructure.GPIO_Pin = KEY1_GPIO_PIN;( y- W4 X( W4 w+ O0 b
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;8 f( C' D* ^$ ~. A7 ^7 H L
- GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);
8 a; G% t7 t2 c6 j; P1 x* } - //定义第二个按键+ M9 b9 r( y, g2 k2 F) ~
- GPIO_InitStructure.GPIO_Pin = KEY2_GPIO_PIN;
1 W+ ~9 \1 P( @4 d: P - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;; @8 t$ K" c/ N% ^7 v& p! n. I
- GPIO_Init(KEY2_GPIO_PORT, &GPIO_InitStructure);# G2 J8 k) p! U' ?. \, b ~7 \+ X* R
" ~: P7 E2 z2 I- r, R- }
$ I8 b( X3 P4 Z$ o; U. k - uint8_t Key_Scan(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin)
6 u; a" Q" o/ B) ?* a - {, L6 d* Q7 B" t9 P# C7 E
- if( GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON )
3 A) L7 ^% j, r, D [ - {
9 M, S6 H* G Y - while( GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON );0 R$ E" ^* ]5 U& v
- return KEY_ON;- s2 ?# ?" V2 B3 }8 c
- }
( `: F3 r% y7 r - else return KEY_OFF;
0 O) {+ e+ l1 i" } - }
复制代码
: k- C4 E$ W. w, o, Z( Amain.c - #include "stm32f10x.h" // 相当于51单片机中的 #include <reg51.h>. \2 C3 a) ^3 o7 ]" a
- #include "LED.h"
! {, ^. ^3 x' E- ^$ n2 \$ g - #include "KEY.h"
0 N6 m# H% a6 a' }& T" H2 r - int main(void)
! U, I: [ z0 _* k% S - {( ^7 O! I% _/ w7 f/ W, v2 w" F+ b
- LED_GPIO_Config();
5 d9 w Z' C$ x- t3 O - Key_GPIO_Config();
; e# ^# ]; j/ y - while (1)
. u/ G) _8 v! q1 W# T% i' o b - {# d5 A. i2 l9 I+ k8 [
- if ( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON )
4 z; B; w6 v) s2 R3 g - LED_B_TOGGLE;
/ G5 g$ ~0 A. M - if ( Key_Scan(KEY2_GPIO_PORT,KEY2_GPIO_PIN) == KEY_ON ) 0 C7 r+ r0 V0 ]+ k9 |7 _
- LED_R_TOGGLE;
$ {3 ^: `& [6 E - }
7 @/ @ s/ J( d* E. D
复制代码 * |3 b9 w* G8 J$ x6 v+ R
仿真图
. P t2 \0 e& E
) ?4 ?/ [* o; V
1 w9 T$ D2 R7 W X Z. q |