前言
M* p' p' a0 q/ l; d相关模块的资料不再赘述,已经有很多人写过,这里给出其中一篇我觉得写的比较详细的文章链接:
" }6 ~5 F4 ?4 H/ y! g4 e模块资料介绍:
7 p7 h0 Z) D2 @4 q7 x) f# `5 L5 b4 N6 k探究人体红外传感器HC-SR501
8 i; h9 B; ]8 M: I1 N9 c4 Y# V# v; j, x; `1 I
程序整体框架是基于我的上一篇串口收发的工程修改的,相关串口、GPIO配置也不再赘述,这里给出链接:
9 c. R: ^3 C c/ c2 d+ DSTM32学习笔记 二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发
# U4 e5 U: x% F/ N
/ O7 [ `% _- A3 p) P一、配置CubeMX
- s* l: {( G8 h/ n+ b5 C1、新建工程;, V; s, ]( G% n( w' A: n# K
2、配置时钟源,在RCC里面的HSE配置的是晶振时钟;
8 \5 T& x: ^; ~+ v C. t" r3、配置程序烧录引脚SYS为SWD模式;
$ j; z2 _- ]7 \4、配置GPIO输出口,配置一个LED灯(我的板子是PC13),起到串口成功接收到数据时的指示作用;
% \% |. y/ R( N& d5、配置GPIO输入口,用来读取模块的输出电平,我选的是PA1口;
& [ ~( \5 W$ ]6、配置串口收发引脚;9 e( f1 V2 F" U- P
7、配置时钟树,我还是开到最高的72MHz;+ s! }* c: B# W+ n1 o- ]7 ]; T B, @
8、进行项目设置,最后生成代码,CubeMX部分就大功告成了
+ T# k7 r! j z! P4 n
. c* F" F5 E- A7 [, w
3 ~3 c$ U& y7 K* q
: q/ K' [4 v9 c# e" B二、硬件连线部分
# [5 I: F4 [: K; p# g* zCH340 ↔ STM32F103C8T6最小系统板:' k) I3 i$ ^( F/ T; @
TX ↔ RX, n$ i A4 _. x5 E5 b% R( I4 B
RX ↔ TX( J ^( r( L! C& q+ Q. j$ F1 s0 D
/ G# M) f1 w2 |; wDAP-LINK ↔ STM32F103C8T6最小系统板 L1 {& L {7 N: ^/ d$ B
3.3V ↔ VCC' b: i& I+ F/ l0 {# e
GND ↔ GND
, Q/ d; x& }) Z" ^ SWIO ↔ SWIO
7 @7 T& k; n9 i: o, a4 q: A. [ SWCLK ↔ SWCLK
3 [- B( ` k# c1 K3 j# E8 {$ u, k f4 j9 ]. P @4 L
HC-SR501模块 ↔ STM32F103C8T6最小系统板
. u$ U1 i" _! v; O2 @0 l* P; R OUT ↔ PA1
) M- ~3 L. Q4 E& J, Z) T GND ↔ GND
& g3 D" V8 p* j& D0 R
- ~ E: l1 \7 cHC-SR501模块 ↔ DAP-LINK (这里注意模块供电范围为4.5V-20V,用3.3V无法驱动)) |' M5 q: [* Q+ O
VCC ↔ 5V
# w" [: ?# s. ^
( g: j1 u/ v, @9 f! s9 z2 W% w n/ S) H三、逻辑代码部分
3 o5 e) F `$ G @代码很简单,在之前工程的基础上,仅用在while里进行修改
; T8 o. ]3 y5 B' c$ p- |- {2 \/ q( g9 r
- /* USER CODE BEGIN 4 */ i* L) S% H& r( s' V
- 6 y ~0 v% y* C* k0 v
- /* USER CODE BEGIN WHILE */
% P* v9 @" U( P$ q8 K8 z - while (1)
& |$ L' _$ Z- W" Q) e" b; l; t - {
* }) O5 b9 ?* ? - /* USER CODE END WHILE */
2 P: \% r# b/ \( Z; z* g; a
. f8 x' o* v8 V9 d- /* USER CODE BEGIN 3 */
4 F3 K e* N, o0 `; W6 o4 H/ f - if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1) == 1) q4 D* x2 K3 ^! U- Q
- {
1 q: o8 G2 @' @" A6 x. Y+ z - HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);//灭灯
1 k' l1 v$ X8 D6 A+ ` - printf("有人\r\n");
# ]! c( [8 G0 l3 b - HAL_Delay(100);5 H+ \6 L$ ?' j' C# O. X
- }& _" y1 M( i+ }" g' B6 s3 P
% H! K! Q. ~5 u* D. ^& E# t0 e0 \! M- else
1 a' c; G( o6 H0 o2 w) Y" y" m- } - {# x, E' W# Q' d4 o9 Z. {
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);//亮灯
! b' r* r+ V" V( A" \" d5 ` - printf("没人\r\n");% I9 [8 a7 l4 _% |7 ~
- HAL_Delay(1000);
% W+ B% S& w* Q - }
$ p' [$ l$ d: u: o4 ^% N - 7 y0 S) _) p7 z; l
- }" T3 h' Z. c9 V/ _2 I7 Z$ s2 H
- : O0 O' Y) y. k0 J3 S2 A* w/ e
- /* USER CODE END 3 */
& N L! c, q5 Q3 @) H2 X4 X
复制代码
: B; G/ \2 y, B/ ]; {现象:
& M) F3 m; Q' f) T
! {- k! h( _" n4 f7 x: n% Z/ ]/ p, S感应到人体,板载LED绿灯亮,同时串口打印“有人”。
4 P. b! s! j2 o$ `& |
, o3 ]4 y" Z4 x+ n& ?
! V3 V5 a* W7 G- N+ R
- V% G1 }7 G5 l! b( v& Z- v注意:: e8 n. C6 [* H ~$ r: x% C, ]3 H
重定义printf后,必须在target里面勾选上MicroLIB,调用一下这个微型库,不然一直卡在里面。7 V, f# `0 W' {( v
- o2 b' h2 ]) D) d: D# ~2 J
& _7 f, c0 T& B; P, i
/ W7 U/ D' x1 E5 k3 S/ X: N% k; t5 @. H4 ?9 S/ k, j/ F" t
|