前言/ o. \6 \" |+ Z! Z A, ?& @" S; O& h }
本篇文章带大家了解并学会使用蓝牙模块* w: h6 ]# k. |0 q+ j# B/ Y
" o9 ^ j5 `4 I( q: ? M# W- q一、蓝牙模块介绍$ g. s" D1 C$ p: ?0 C
JDY31蓝牙模块
$ k [) ?7 }+ R$ a b5 _+ U+ \) ?
: I) O$ p4 i8 U1 I" _& V- d/ z* W8 k; y( U4 K
JDY-31 蓝牙基于蓝牙 3.0 SPP 设计,这样可以支持 Windows、Linux、android 数据透传,
, \( a: b7 Z; A2 l9 n工作频段 2.4GHZ,调制方式 GFSK,最大发射功率 8db,最大发射距离 30 米,支持用户通过( H) `# Q; {! e% @: n# N
AT 命令修改设备名、波特率等指令,方便快捷使用灵活。0 z" _0 C" ? @$ _
/ o5 g+ a" D- J$ p3 h% V! g
蓝牙接线方式
2 Q) \1 L% `8 S+ V) M! p8 y, @/ JVCC-3.3V& o; _5 I9 I y" m) O; a1 _
GND-GND
. d, S0 g5 V/ T9 ~5 rTXD-RXD6 J% [- K/ {, U9 I8 r' @
RXD-TXD
8 r) K* z* k4 G1 J1 I a8 o9 Z6 z# e9 u
二、cubeMX配置及代码解析4 i: X- T) p' c' O
1.cubeMX配置
2 ]( u+ O# l: ^! p1.选择型号- |% O: V. |( ^3 Z/ r" d1 D. u
) u8 \- D: ~8 c
; v' q' U% ~0 J! G. X" e) M
, C5 V, ~ j7 [- o+ j( U
2.设置晶振2 b( a$ x+ n+ v
# V2 ^/ I+ H* ]6 n" @% S0 V1 t7 ]2 r
" @: I& x+ u q
/ o3 W2 c: ], D2 K k [" S# ]6 A3.开启串口中断和设置波特率
% M3 C3 P1 e1 e) j h6 F( f2 s这里选择的是串口3大家根据自己的接线选择串口号
# u7 h) a3 B0 l
) ~& H8 s8 E: d; }6 \- j/ c* {- @
% R1 {7 w( Q9 k7 E) a" _' t& G* F0 r4 P" E; I$ y9 z- q/ K
3 J; H6 q! c; _5 J Y( n- j
8 i# e& c* ?" l% O) Y& ~3 k4.设置时钟树
6 r7 q5 u' Z# T- U& z$ }; Q4 H% T8 o. a7 I% ~8 D) ]4 z9 @+ a* A% j
1 j, r7 V6 h% \, Y: j- k9 k- T- j- v2 j/ [% K7 _, h5 r
5.设置一个灯用来检测蓝牙功能 z8 j8 s u# W& c/ K
' J3 e# Q7 \$ ^6 o# @" t
2 m5 p# |, z& m2 H* z: U! Z2 T) D+ V6 C" O
6.创建工程( g; n! F) E, w/ L' b3 l+ F5 N/ r) H
0 R, Y) Z6 K6 T" b8 d
4 W* `* B7 R- d$ V9 v' \$ P3 ?/ F
2.代码解析
% Y) { S9 X0 b* C" D ~蓝牙大家可能会觉得很高大上其实不然他和串口的使用方法是完全一样的,2 e+ P7 D) |/ u* l6 Q: H. x) i
下面就给大家讲解蓝牙代码的编写。
* ?6 f4 j2 ` y& K! Z3 O$ h0 g
' o' ]1 [% I) b; T2 I# p( x+ f- //灯LED1的IO定义
c/ a; o3 F1 u0 O/ ] - #define LED1_RESET() HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET) //设置LED1低电平8 F' H) R2 R4 Q8 ]
- #define LED1_SET() HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET) //设置LED1高电平1 K7 @# m/ L. U, z9 p3 h+ M
: F% `, R" C& A. S8 p' r- 9 q6 S' [ }# q- V' r$ e
- u8 RX_dat=0;//接收变量2 h" ?$ C# S2 w3 Z. i6 z% M
- u8 TX[]="Hello";3 Q9 Q @9 W" h# a0 Q# z+ D
% _7 G% M# I( v k" b3 R) M0 Y- //回调函数& Z% V3 {! x4 E: _' |. n) E( Z
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)% Y/ Y7 C0 P, \2 R# P) |0 N
- {# C9 p' l0 p% h3 O
- if(huart->Instance == USART3)
% _- n/ {$ w2 `( \& F0 s& M - {
0 \) A6 m0 y. I - if(RX_dat==0xa1)
3 v6 r, a. s( P( E - {
V2 M- q, y8 ^ - LED1_SET();
* L) o0 u0 r& A n0 q - HAL_UART_Receive_IT(&huart3,&RX_dat,1);//启动接收函数% j7 [4 A4 [9 N5 a. H4 C% u
- } I% s, N% |. d1 c* I
- else if(RX_dat==0xa2)
1 Z& a4 L. h ~& g. E5 I - {
/ G8 o6 o% ^. M8 b' Q8 n& i2 X2 O - LED1_RESET();
2 K2 W% ]6 b: k. K$ Y/ O i/ g - HAL_UART_Receive_IT(&huart3,&RX_dat,1);//启动接收函数
- t" u( U, T) E# f1 B" V Q! W - }
% b, h" }" ^0 m+ ?9 P/ T - }
( p, j- f8 Y; U# ~ - }: n% d! f9 W) K z {0 Y, r6 x
- " P6 K: h. O: X1 t5 @# A9 H& P; J
- HAL_UART_Transmit(&huart3,TX,sizeof(TX),10000);//开机发送Hello
* }0 A) W* U# g6 \9 c: x: v2 s/ i2 |, ~ - ) M4 \0 P* l* r8 e' q% X; v3 {3 A
- o: _6 i& \4 S3 d7 [& z- while(1). k, K$ I) o3 n8 R; |
- {
P: |) y6 }! r) a* G - HAL_UART_Receive_IT(&huart3,&RX_dat,1);4 x4 l; q: x0 ^# i
- }7 s2 g) q7 g0 q9 S7 k4 P/ ]
复制代码
+ N9 Y( p( |; V# M总结
3 L2 I K7 Z8 F4 d% K蓝牙大家不用觉得可怕使用起来和串口是一样的。- c& S% d- s5 }- }. i- P
" v/ g) ^$ J; I n
8 L* h2 n4 c2 F! N |