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

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

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

一、回顾整体方案

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

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

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

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

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

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

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

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

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

二、环境及元器件准备

2.1 软件开发环境

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

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

3. Keil 5

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

2.2 元器件

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

三、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创建新工程

选择 STM32F103 ZET6

3.3 系统配置

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

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

3.4 USART串口配置

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

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

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

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

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

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

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

3.5 PORT口配置

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

3.6 时钟树配置

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

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

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

3.7 工程导出设置

如下图所示,设置工程:

代码生成设置

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

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

四、工程编译

打开Keil 5,设置编译器:

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

编译OK。

五、总结

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

六、往期文章

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

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

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

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

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

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

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

相关推荐
神一样的老师18 分钟前
战场物联网:通信挑战与最新解决方案综述
物联网
end_SJ2 小时前
初学stm32 --- RS485
stm32·单片机·嵌入式硬件
电气_空空2 小时前
基于单片机的无线智能窗帘控制器的设计
单片机·嵌入式硬件·毕业设计·毕设
昵称难产中2 小时前
浅谈云计算14 | 云存储技术
服务器·安全·云原生·架构·云计算
小猪写代码2 小时前
STM32 FreeRTOS中断管理
stm32·单片机·嵌入式硬件
绝无仅有3 小时前
在 Go语言中一个字段可以包含多种类型的值的设计与接种解决方案
面试·架构·go
早上真好4 小时前
【项目推荐】CakeMu-RV:一个开放的 RISC-V 处理器模拟器学习项目
嵌入式硬件·mcu·学习·计算机外设·risc-v
沐欣工作室_lvyiyi4 小时前
数字可调控开关电源设计(论文+源码)
stm32·单片机·嵌入式硬件·物联网·开关电源·数控电源
「QT(C++)开发工程师」5 小时前
x86_64搭建ARM交叉编译工具链
arm开发