1. 课程导学与开发环境搭建
各位同学好,我是你们这门课的老周。做嵌入式开发十几年了,从51单片机一路做到现在的Cortex-M4,踩过的坑比走过的路还多。今天咱们开始第一讲,先把地基打牢。
蓝牙这个东西,说白了就是短距离无线通信。我刚开始做蓝牙项目时,总觉得它很神秘,后来发现核心就两件事:配对和传数据。咱们这门课用的STM32F407,配上HC-05或HC-06模块,就是最常见的组合。
1.1 蓝牙技术概述
蓝牙工作在2.4GHz频段,这个频段也是Wi-Fi和微波炉用的。嗯,这里要注意——如果你把蓝牙模块放在微波炉旁边,信号会受干扰,我亲测过。
咱们主要关注经典蓝牙(BR/EDR)和低功耗蓝牙(BLE)的区别:
| 特性 | 经典蓝牙 (BR/EDR) | 低功耗蓝牙 (BLE) |
|---|---|---|
| 传输速率 | 1-3 Mbps | 125 Kbps - 2 Mbps |
| 功耗 | 较高(约1W) | 极低(约0.01W) |
| 应用场景 | 音频传输、文件传输 | 传感器数据、智能家居 |
| 模块举例 | HC-05 | HC-06(简化版) |
HC-05和HC-06其实都是经典蓝牙,只是HC-06砍掉了主机模式。我个人习惯用HC-05,因为它既能当主机也能当从机,调试起来更灵活。
1.2 STM32F407平台介绍
STM32F407是意法半导体的明星产品,Cortex-M4内核,带FPU(浮点运算单元)。为什么选它?因为它的串口资源丰富——有8个USART/UART接口,足够你同时挂蓝牙、GPS、传感器。
我记得第一次用F407时,被它的时钟树绕晕了。其实核心就几个点:
- 主频:168 MHz,跑蓝牙协议栈绰绰有余
- Flash:512 KB到1 MB,代码空间管够
- SRAM:192 KB,其中64 KB是CCM(核心耦合内存),注意这个不能给DMA用
- 串口:USART1-6 + UART7-8,支持同步和异步模式
1.3 HC-05 / HC-06 蓝牙模块选型
这两个模块长得几乎一样,都是6个引脚。但内部逻辑差别很大:
| 引脚 | HC-05 | HC-06 |
|---|---|---|
| VCC | 3.6V - 6V | 3.3V - 6V |
| GND | 地 | 地 |
| TXD | 发送数据 | 发送数据 |
| RXD | 接收数据 | 接收数据 |
| STATE | 状态指示(配对后高电平) | 无此功能 |
| EN | 使能/AT指令模式 | 无此功能 |
选型建议:如果你只需要从机模式(手机连模块),HC-06够用,还便宜。如果你需要模块主动连接其他设备(比如两个模块互连),必须用HC-05。
1.4 开发板与模块接线
接线其实很简单,但很多人栽在电平匹配上。咱们用STM32F407的USART2为例:
| STM32F407引脚 | 功能 | HC-05/06引脚 |
|---|---|---|
| PA2 | USART2_TX | RXD |
| PA3 | USART2_RX | TXD |
| GND | 地 | GND |
| 5V | 电源 | VCC |
| PC0 | GPIO(控制EN) | EN(仅HC-05) |
注意:STM32的TXD(PA2)输出3.3V,HC-05的RXD能接受3.3V,但有些模块需要5V逻辑。我建议用示波器量一下模块RXD引脚的电压阈值,没有示波器就串个1kΩ电阻,安全第一。
1.5 Keil MDK 工程创建与配置
Keil MDK是咱们的主力IDE。我习惯用V5版本,因为V5的编译器对F407支持更稳定。创建工程分几步:
- 新建工程:选择STM32F407VGTx芯片
- 添加启动文件:startup_stm32f40_41xxx.s
- 配置时钟:使用HSE外部晶振,PLL倍频到168MHz
- 添加串口驱动:usart.c和usart.h
- 配置中断:使能USART2全局中断
这里有个坑——很多人忘记配置GPIO的复用功能。USART2的TX和RX必须设置为AF7(复用功能7),否则串口不工作。我曾经调试了一下午,最后发现是GPIO模式没改。
下面是一个最小化的串口初始化代码:
void USART2_Init(void)
{
// 1. 使能时钟
RCC->APB1ENR |= RCC_APB1ENR_USART2EN;
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
// 2. 配置GPIO:PA2=TX, PA3=RX
GPIOA->MODER &= ~(0x3 << 4); // 清除PA2
GPIOA->MODER |= (0x2 << 4); // 复用功能
GPIOA->AFR[0] |= (0x7 << 8); // AF7 for PA2
GPIOA->MODER &= ~(0x3 << 6); // 清除PA3
GPIOA->MODER |= (0x2 << 6); // 复用功能
GPIOA->AFR[0] |= (0x7 << 12);// AF7 for PA3
// 3. 配置USART2:115200, 8N1
USART2->BRR = 84000000 / 115200; // 假设APB1=84MHz
USART2->CR1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_UE;
USART2->CR2 = 0;
USART2->CR3 = 0;
}
1.6 本章知识体系
下面这张图把咱们第一讲的核心内容串起来了:
这张图把咱们第一讲的内容分成了四个模块。你看,蓝牙技术是理论基础,STM32F407是硬件平台,HC-05/HC-06是具体器件,Keil MDK是开发工具。四个模块缺一不可。