3. 开发环境搭建:Keil MDK安装、STM32CubeMX配置、串口调试工具

好,咱们正式开始动手了。做嵌入式开发,第一件事就是把家伙事儿备齐。我见过太多新手,一上来就急着写代码,结果环境没配好,折腾半天连个灯都点不亮。咱们别走那个弯路,一步一个脚印来。

3.1 Keil MDK安装——别小看这一步

Keil MDK,说白了就是ARM芯片的IDE。咱们用的STM32,基本都靠它吃饭。我个人习惯用MDK 5.38版本,太新的版本有时候兼容性反而麻烦。

⚠️ 注意:安装路径千万别带中文!我当年刚入行时,图省事直接装在了“D:\软件\Keil”下面,结果编译死活报错,查了两天才发现是中文路径惹的祸。血的教训啊。

安装步骤其实很简单:

  1. 去ARM官网下载MDK-ARM安装包
  2. 双击运行,一路Next
  3. 记得勾选“Add to PATH”
  4. 安装完成后,用管理员权限打开一次

嗯,这里有个小坑。安装完成后,你得手动装一下器件包(Device Pack)。打开Pack Installer,搜索STM32F1系列,点Install。为什么?因为Keil默认不带STM32的支持包,你不装的话,新建工程时根本找不到芯片型号。

3.2 STM32CubeMX配置——图形化真香

以前做STM32开发,都是对着数据手册一个个寄存器去配。现在好了,有了CubeMX,点几下鼠标就能生成初始化代码。说实话,我刚用CubeMX时还有点抵触,觉得这玩意儿太傻瓜了。后来真香了——它生成的代码确实规范,比自己手写的靠谱。

咱们pH传感器驱动,用STM32F103C8T6就够。配置流程如下:

步骤 操作 说明
1 新建工程,选芯片型号 STM32F103C8T6
2 配置时钟源 HSE 8MHz外部晶振
3 配置ADC ADC1,通道0,采样时间239.5周期
4 配置USART USART1,波特率115200
5 生成代码 选MDK-ARM V5版本

这里我重点说一下ADC配置。pH传感器输出的是模拟电压信号,咱们得用ADC把它转成数字量。采样时间我习惯设长一点,239.5个周期。为什么?因为pH传感器的输出阻抗比较高,采样时间太短的话,电容充不满,测出来的值会偏小。我在项目中遇到过这个问题,当时测出来的pH值总是偏低0.3左右,后来把采样时间拉长就解决了。

💡 小技巧:CubeMX里有个“Pinout View”视图,你可以直接拖拽引脚来分配功能。我个人习惯先把ADC和USART的引脚定好,再配其他外设,这样不容易冲突。

3.3 串口调试工具——你的第二双眼睛

做嵌入式开发,串口就是你的眼睛。没有串口打印,你根本不知道程序跑到哪了、数据对不对。我常用的串口工具有两个:SSCOM和Putty。SSCOM更轻量,Putty功能更全。

配置串口其实就三步:

  • 波特率:115200(和CubeMX里配的一致)
  • 数据位:8位
  • 停止位:1位,无校验

你想想看,如果波特率对不上,打印出来的全是乱码。我刚开始学的时候,就因为这个折腾了一下午。后来学乖了,每次连串口前先检查一下配置。

咱们pH传感器驱动里,串口主要用来打印ADC的原始值和换算后的pH值。代码大概长这样:

// 初始化串口
HAL_UART_Init(&huart1);

// 读取ADC值
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 100);
uint16_t adc_val = HAL_ADC_GetValue(&hadc1);

// 打印到串口
char buf[64];
sprintf(buf, "ADC: %d, pH: %.2f\r\n", adc_val, adc_val * 3.3 / 4096 * 5.0);
HAL_UART_Transmit(&huart1, (uint8_t*)buf, strlen(buf), 100);

这里有个细节要注意:sprintf在Keil里默认不支持浮点数。你得在工程设置里勾上“Use MicroLIB”,或者在编译器选项里加上--float参数。不然打印出来的pH值永远是0.00。嗯,这个坑我踩过。

3.4 环境验证——跑个点灯程序

环境搭好了,别急着写驱动。先跑个点灯程序,验证一下整个链路通不通。我一般会写个简单的LED闪烁程序:

HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
HAL_Delay(500);

如果LED能正常闪烁,说明Keil、CubeMX、下载器、串口都没问题。这时候再开始写pH传感器驱动,心里就有底了。

✅ 环境搭建检查清单:
  • Keil MDK能正常编译
  • ST-Link能识别到芯片
  • 串口能收到数据
  • LED能正常闪烁

好了,环境搭完了。下一章咱们就开始真正写pH传感器的驱动代码。到时候我会手把手教你如何读取传感器数据、如何做校准、如何处理噪声。别急,先把今天的内容消化掉。

公众号:蓝海资料掘金营,微信deep3321