前言& ]8 N) j! q- p8 h/ w
本篇文章带大家了解并学会使用蓝牙模块1 d/ C; L( {" U4 S& S, \& ~6 W1 L) C
7 v. _5 G2 N! N; J一、蓝牙模块介绍
! K; b1 P" ]4 LJDY31蓝牙模块2 B* {7 f. w7 S
2 v1 k2 m4 d8 ?- ?8 B
( A$ \- G4 Y, c% HJDY-31 蓝牙基于蓝牙 3.0 SPP 设计,这样可以支持 Windows、Linux、android 数据透传,4 s# \1 Y, m# a8 \2 u5 \3 o
工作频段 2.4GHZ,调制方式 GFSK,最大发射功率 8db,最大发射距离 30 米,支持用户通过1 ]9 `( P8 @$ _# q4 S. k( n( u
AT 命令修改设备名、波特率等指令,方便快捷使用灵活。
: Y+ d! Y% F5 l( s* k, T. {$ ~4 @4 f8 L+ \1 Y9 f* P7 u6 `4 ]( v$ }- L, Q; m
蓝牙接线方式0 C( s6 D& b2 G1 p$ H6 w5 H
VCC-3.3V
4 w9 B% `; d) l; k3 V7 E) {; pGND-GND
+ O$ L* J, \3 O" D6 pTXD-RXD
, b: C9 Z5 o* mRXD-TXD# o0 C1 Z4 i$ ?* E1 [* c
, W8 S0 a: e7 k; _: h3 P. Z, b$ u二、cubeMX配置及代码解析
1 }$ b9 M/ a% N' D! p1 o1.cubeMX配置9 H; o2 B p5 E0 {, I" L
1.选择型号
3 S# F, Y3 e3 Y6 O4 Z) g* z- I
1 s; x9 T/ _( \( R* Q
# y! l4 H& D* j* I; u7 y6 N0 |6 j
) I7 G( C2 q) B# d) E) g/ e6 e5 ?2.设置晶振; h3 ~# Z+ V+ B$ [9 E8 r2 k! I
- ~' e0 M, {! t/ N T" O( b
/ K8 l8 M& B8 G/ ?% P- X
$ Q8 K, w1 T. L+ z- |" k& S3.开启串口中断和设置波特率
' h2 \# L7 d' m: S1 R# P这里选择的是串口3大家根据自己的接线选择串口号! m! p% R( B" K
! c# r& z ]& A2 _$ L
7 ?: q& a8 b4 r0 T+ Y
- ^5 T/ |. U/ X. H# M
2 I" a8 n6 r- i# ^5 p ~/ r
) r4 d0 f2 K, b" w4.设置时钟树+ O9 G; d& D! e c/ N) s
7 a7 z4 V" H3 Q" q4 p4 v% V C5 e
5 y6 ]4 d1 N# a4 Z2 |( K3 A, f2 c( m! N _
5.设置一个灯用来检测蓝牙功能) o" S- C2 u g" W# a
0 L) W; |$ e! [! s/ S( y
2 C2 t: N/ c% U* ]8 _/ ~* X0 _/ a. R5 D( z
H+ O6 C" V& w# y7 E+ t6.创建工程6 C8 ]! y$ v8 V3 G2 w/ ^
. C- Y' k4 W2 i* M1 S; b, \! m4 l
% s8 n# |( i7 g5 m- `7 }2 h9 i
1 c5 c! T3 [5 L; g' k, ]2.代码解析
' G7 }2 c2 m6 [: S& C蓝牙大家可能会觉得很高大上其实不然他和串口的使用方法是完全一样的,4 f6 W' X3 {3 R& s6 G) | ^
下面就给大家讲解蓝牙代码的编写。( K B% M1 g% H% e8 }- w: z
u8 _# t& Q5 @7 w$ R3 D) ~
- //灯LED1的IO定义
' a7 @& N& ^/ A m - #define LED1_RESET() HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET) //设置LED1低电平
" J5 S9 K% a5 D! C - #define LED1_SET() HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET) //设置LED1高电平+ Z8 p, @* F4 Y, _" x
! b# d* @8 H# \! |- * T& i9 V9 e5 A$ q$ n$ S
- u8 RX_dat=0;//接收变量
& s+ A5 Y2 ~' T3 h+ p: d - u8 TX[]="Hello";' ]% `" Z$ ?5 X$ }8 l" d% p
- 3 g# [) h- c8 `8 U
- //回调函数
% D% R- F! P( x4 c) F; f) ? - void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
' S/ a G# P$ X0 S1 A- R; e: \1 { - {
2 j5 I& F& Y/ {8 ^ - if(huart->Instance == USART3)
' h' C2 l: D1 I, O% p1 t - {8 i E* c5 H2 q S& y8 h
- if(RX_dat==0xa1)
0 l P, [) i# e, h+ r% _ - {
. D; _' A3 {) N9 ?5 p - LED1_SET();
' f6 O+ E J& O6 T" Q/ {; C - HAL_UART_Receive_IT(&huart3,&RX_dat,1);//启动接收函数
2 e+ t3 F* s6 s9 l1 u. P6 U - }
% R- Q. R, z7 s& ]: W - else if(RX_dat==0xa2)
; M6 A: @0 I0 j+ N, x - {
% t1 b% m8 C7 J7 x5 z - LED1_RESET();
( k# Q' X% @' y& K8 [! h - HAL_UART_Receive_IT(&huart3,&RX_dat,1);//启动接收函数
- ~2 f& m$ Z+ o7 c - }/ E& P) ^8 ], K. t* m
- }& p: L2 p) [. y
- } m# \/ V* _5 |4 Z5 z, i5 k e
- 5 P: a" C% B7 k: H" L
- HAL_UART_Transmit(&huart3,TX,sizeof(TX),10000);//开机发送Hello
* K [ H! L$ [: Z! N( I - 9 L9 n* E% }1 u! k4 U- Z) v- O
- 7 V6 M% I9 \& E2 V
- while(1)- M$ T7 p$ [2 ~
- {* A6 S, S2 @8 Z' G" o
- HAL_UART_Receive_IT(&huart3,&RX_dat,1);
& r( f2 T/ o7 D$ R- |' n - }8 B9 ]6 A7 V& W p2 }9 @1 [; J* e( Z
复制代码 / w& l* P# S3 X+ I
总结
2 h1 S+ `) s7 \. U蓝牙大家不用觉得可怕使用起来和串口是一样的。
+ z6 |/ `1 \$ U" ?6 O8 n- S/ v/ ]
4 }% ^6 L3 g1 e6 O; `5 ?
* x5 V3 ?" G- V' q3 x/ K5 I |