STM32 物联网智能家居 (二)-开发环境及工程搭建(STM32CubeMX)

STM32 物联网智能家居 (二)-开发环境及工程搭建(STM32CubeMX)

前面第一篇文章我们讲述了物联网智能家居项目的方案设计,从系统设计、硬件设计,再到软件设计。这篇文章我们具体会讲到整个项目需要哪些硬件模块、软件环境、搭建最小工程时用到STM32CubeMX的详细配置指导,以及最后用Keil 5工具进行编译工程的教学,这些都是这篇文章可以学到的。下面我们再来回顾一下整个方案,放到前面开宗明义。

一、回顾整体方案

首先是系统设计,整个系统的操作逻辑如下:

  • 中控屏启动后,自动连接家里的路由器,在中控屏上显示出路由器的IP地址;
  • 用户用手机上启动微信小程序,输入中控屏显示的IP,连接到家里的中控屏上;
  • 用户在微信小程序里,点击图标控制家中的灯、风扇、空调、窗帘、除湿器等,并读取屋内温湿度;
  • 并且中控屏每隔60s向微信小程序传输一次家中温度和湿度值进行更新;
  • image-20250112093518200

    下面是硬件设计的框图,以及具体要用到的外设:

    我们用I2c通信控制OLED屏幕显示字符,其中包括时间,温度,湿度,路由器Ip地址,控制信息等;用Usart控制Wifi模块ESP8266和路由器、微信小程序进行信息交互;通过GPIO控制/读取温湿度传感器、风扇、LED等外设。除此之外,我们通过ST-LINK 或USB串口解决代码开发过程中遇到的问题等等。

    image-20250111163512488

    在本项目中,软件设计可以分为6个子系统:

  • 设备子系统:比如实现LED控制、风扇控制
  • 显示子系统:在OLED上显示信息
  • 输入子系统:可以接收按键数据、网络数据
  • 网络子系统:负责网络连接、数据收发
  • 字体子系统:获得字符的字库
  • 业务子系统:起综合作用,根据输入值(网络数据),控制设备
  • image-20250112100047593

    为了使软件能够兼容更多的芯片、更多的操作系统,进行软硬件解耦,我们将软件进行了分层设计。

    整个软件分为下面几层内容,Microcontroller、HAL、CAL、KAL和APPL层。

    APPL层是最上层的应用层,与硬件和操作系统无关,专注于应用层的逻辑。KAL层是内核抽象层(Kernel Abstraction Layer),这一层可以将整个软件分为不同的操作系统平台,通过简单的切换,可以让系统跑在裸机、FreeRTOS或者RT-Thread上面。CAL层是芯片抽象层(Chip Abstraction Layer)这一层来区分不同的芯片,来解决移植到不同的问题。HAL层(Hardware Abstraction Layer)是硬件抽象层,是决定是调用Hal库、寄存器还是库函数来操作底层硬件。以上就是为本项目设计的分层架构的逻辑,借由此软件框架做到容易扩展、容易维护的目的。

    image-20250112111213095

    二、环境及元器件准备

    2.1 软件开发环境

    1. 韦东山STM32F103-PRO全套开发板 (STM32F103ZET6)

    image-20250113073851432

    2. STM32CubeMX

    官网下载链接:STM32Cube初始化代码生成器

    3. Keil 5

    官网下载链接:Keil官网下载地址

    image-20250113074410612

    4. ST-Link V2

    image-20250113074457652

    2.2 元器件

    名称 型号 样式
    Wifi模块 ESP8266-01s image-20250113073531178
    温湿度传感器 DHT11 image-20250113073426508
    OLED显示屏 0.96寸,白色显示,I2c通信 image-20250113073358797
    电机 L9110电机驱动风扇模块 image-20250113073305583

    三、STM32CubeMX工程搭建

    3.1 硬件概览

    名称 端口 GPIO输出 引脚模式 特性 备注
    INB PC6 High Output Pushpull Pull-up 电机控制
    INA PE6 High Output Pushpull Pull-up 电机控制
    K1 PE14 n/a Input mode n/a 按键K1
    K2 PE15 n/a Input mode n/a 按键K2
    WHITE PF7 High Output Pushpull Pull-up LED白灯
    BLUE PF8 High Output Pushpull Pull-up LED蓝灯
    GREEN PF9 High Output Pushpull Pull-up LED绿灯
    SCL PF10 High Output Pushpull Pull-up I2c时钟线
    SDA PF11 High Output Pushpull Pull-up I2c数据线
    USART1_TX PA9 n/a Alternate Function Pushpull n/a USART1_TX
    USART1_RX PA10 n/a Input mode Pull-up USART1_RX
    USART3_TX PD8 n/a Alternate Function Pushpull n/a USART3_TX
    USART3_RX PD9 n/a Input mode Pull-up USART3_RX

    3.2 创建工程

    打开STM32CubdeMX,点击New Project创建新工程

    image-20240519214220349

    选择 STM32F103 ZET6

    image-20250113080012108

    3.3 系统配置

    点击左侧System Core,选择RCC,将HSE和LSE都设置为Crystal/Ceramic Resonator(晶体/陶瓷振荡器)

    image-20240604074221880

    点击SYS,选择Debug功能为JTAG(5 pins),跟板子调试口对应

    image-20240604075633710

    3.4 USART串口配置

    根据原理图,我们将USART1和USART3进行配置

    选择左侧的Connecttivity选项,点击USART1,如下图所示,点击Mode开始配置

    image-20240604080347571

    STM32对USART模块提供了下面的这些模式,根据需求选择相应模式,本项目选择的是异步模式Asynchronous。

    image-20240604080404318

    下面我们来对USART进行配置,首先开发板上的串口对应的USART1串口,Mode配置为异步模式Asynchronous,STMCubeMX会自动分配引脚,目前分配的USART1_RX对于PA10,USART1_TX对于PA9,和我们开发板的引脚正好对应,如果不对应的话,可以根据芯片的data Sheet改成相应的引脚。

    下面的参数配置Parameter Settings按照默认配置来,波特率为 115200 bit/s,这里确保主从机是一致的,才能通信成功,数据位 8,无校验位,停止位1,数据方向:Receive and Transmit,采样:16.

    image-20240604080436567

    点击下方的GPIO Settings,可以看到为USART1自动分配的默认引脚

    image-20240604080454808

    按照上面的配置过程,我们将USART1和USART3一起配置了。下面是配置完后GPIO选项下面的USART的配置:

    image-20250113211921067

    3.5 PORT口配置

    按照3.1的硬件概览进行PORT口配置:

    image-20250113212308568

    3.6 时钟树配置

    点击上方的Clock Configuration,开始配置时钟:

    image-20240611074559483

    下面我们来看一下时钟树的结构,如下图所示

    image-20240604081134525

    现在开始配置开发板相关的时钟频率,首先选择做左边的Input frequency,选择外部8M的晶振,选择HSE,选择PLLCLK,在HCLK处将时钟敲定为72MHz,即STM32F103可支持的最大时钟频率:

    image-20250113212625664

    3.7 工程导出设置

    如下图所示,设置工程:

    image-20250113213309510

    代码生成设置

    image-20240604214023852

    点击右上角,生成代码GENERATE CODE:

    image-20250113213412489

    下面代码就生成完毕了,用Keil 5软件打开工程,进行编译:

    image-20250113213512877

    四、工程编译

    打开Keil 5,设置编译器:

    image-20250113213711649

    下面进行编译,默认大家的Keil 5环境都是可以用的:

    image-20250113213812701

    编译OK。

    image-20250113213851544

    五、总结

    至此,第二节STM32 物联网智能家居 (二)-开发环境及工程搭建(STM32CubeMX)就完成了,这里我们完成了软件环境的搭建,以及最小工程的设置,以及基本的外设硬件配置。后面就能够开始我们软件各子系统程序的编写了。

    六、往期文章

    STM32 物联网智能家居 (一) 方案设计STM32+ESP8266+TCP/UDP/MQTT

    STM32 BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建

    STM32 BootLoader 刷新项目 (二) 方案介绍

    STM32 BootLoader 刷新项目 (三) 程序框架搭建及刷新演示

    STM32 BootLoader 刷新项目 (四) 通信协议

    STM32 BootLoader 刷新项目 (十三) Python上位机介绍

    STM32 BootLoader 刷新项目 (十四) 所有源代码获取

    作者:艾格北峰

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32 物联网智能家居 (二)-开发环境及工程搭建(STM32CubeMX)

    发表回复