第1章:课程导论与开发环境搭建
各位同学,欢迎来到《单片机传感器驱动与电机控制中断系统联合开发实战》的第一课。
做嵌入式开发这么多年,我见过太多人一上来就急着写代码,结果连芯片选型都搞错了方向。这一章,咱们先把地基打牢。说白了,选对工具、搭好环境,后面才能跑得快。
1.1 为什么选这些器件?
先聊聊选型思路。我个人的习惯是:先定主控,再配外设。主控决定了你能跑多复杂的算法,外设决定了你能感知和控制什么。
主控芯片:STM32F103C8T6
这颗芯片,圈内俗称「F103」或「蓝 pill」。为什么选它?
- 性价比极高:72MHz主频、64KB Flash、20KB SRAM,淘宝几块钱一片。
- 生态成熟:Keil、STM32CubeMX、HAL库、标准库,资料多到看不完。
- 外设够用:TIM、ADC、USART、I2C、SPI,覆盖传感器和电机控制所需。
我在项目中遇到过用F103做四轴飞行器飞控的案例,虽然有点极限,但足以证明它的性能不弱。
温湿度传感器:DHT11
DHT11是入门级温湿度传感器。精度一般(湿度±5%RH,温度±2℃),但胜在便宜、单总线通信、代码简单。
你可能会问:「为什么不用DHT22?」嗯,DHT22精度更高,但价格也贵几倍。咱们课程重点是传感器驱动框架,不是传感器本身。学会了DHT11的驱动写法,换DHT22只是改个时序参数的事。
超声波测距模块:HC-SR04
HC-SR04是经典的超声波测距模块,测距范围2cm~400cm,精度3mm左右。它用两个GPIO引脚(Trig和Echo)配合定时器就能完成测距。
我记得第一次用HC-SR04时,被回波信号的毛刺坑了一整天。后来发现是电源纹波太大,加了个100μF电容就稳了。这些坑,后面我会一一带你们避开。
电机与驱动:直流减速电机 + TB6612
直流减速电机自带减速箱,输出扭矩大,适合做小车底盘。TB6612是东芝产的电机驱动芯片,单路最大驱动1.2A,支持正反转和PWM调速。
为什么不选L298N?TB6612体积更小、内阻更低、发热更小。我做过对比测试:同样驱动两个电机,TB6612的温升比L298N低了将近15℃。
1.2 开发环境搭建
环境搭建这块,我建议按这个顺序来:先装Keil,再装CubeMX,最后配置工程模板。别跳步,跳步容易出幺蛾子。
Step 1:安装Keil MDK
- 去Keil官网下载MDK-Arm版本(建议5.38或更新版)。
- 安装时一路默认路径,但注意不要有中文路径。
- 安装完成后,用注册机生成License(懂的都懂)。
- 打开Keil,在 Pack Installer 中安装 STM32F1xx_DFP 设备包。
Step 2:安装STM32CubeMX
- 从ST官网下载STM32CubeMX(需要注册账号,免费)。
- 安装后,在 Help → Manage embedded software packages 中安装 STM32F1 的固件包(建议选最新版)。
- 配置Java环境(CubeMX基于Java,如果电脑没装JRE,它会自动提示安装)。
Step 3:创建工程模板
我个人习惯用CubeMX生成初始化代码,然后在Keil里写业务逻辑。这样既快又不容易漏配置。
具体步骤:
- 打开CubeMX,新建工程,选择 STM32F103C8Tx。
- 在 Pinout & Configuration 页面,配置以下外设:
| 外设 | 配置项 | 说明 |
|---|---|---|
| RCC | HSE → Crystal/Ceramic Resonator | 使用外部8MHz晶振 |
| Clock Configuration | HCLK = 72MHz | 配置系统时钟 |
| SYS | Debug → Serial Wire | 保留SWD调试接口 |
| USART1 | PA9(TX), PA10(RX), 115200-8-N-1 | 串口打印调试信息 |
| TIM2 | Channel1 → PWM Generation CH1 | 电机PWM控制(PA0) |
| TIM3 | Internal Clock, Prescaler 71, Period 65535 | 超声波回波计时 |
| GPIO | PB0(DHT11), PB1(Trig), PB2(Echo), PB3~PB4(电机方向) | 传感器与电机IO |
- 在 Project Manager 页面,设置工程名、路径(不要中文!),Toolchain/IDE 选 MDK-ARM V5。
- 点击 GENERATE CODE,生成工程。
- 用Keil打开生成的 .uvprojx 文件,编译一次,确认0错误0警告。
1.3 本章知识体系
下面这张图,是我画的本课程知识体系框架。你可以把它当作整个课程的地图。
1.4 工程模板验证
环境搭好、模板生成后,我建议你做一次快速验证:
- 在 main.c 的 while(1) 里加一句
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); HAL_Delay(500);(板载LED闪烁)。 - 编译下载,看LED是否以1秒周期闪烁。
- 用串口助手连接USART1,在初始化后加一句
printf("Hello from F103!\r\n");,看是否能收到。
如果这两步都通了,恭喜你,开发环境搭建成功。后面的事,就是往这个模板里填代码了。