简要
教程:使用STM32开发板和STONE 串口屏屏幕开发带触摸屏的美容设备
图1
由于我与ST有大量合作,此类MCU通常可通过IIC、SPI或串口连接屏幕,例如0.96英寸显示屏、 1602 串口屏 屏幕以及各种 TFT 串口屏 屏幕,我决定使用 STONE 串口屏 屏幕来完成这个项目。 说到 STM32 开发板。
项目要求
这里我们想做一个关于医疗设备和仪器使用的项目。该项目主要通过我们的STVC101WT-01串口屏幕,采用触摸屏模式。按下按键后,串口屏幕通过串口命令将指令发送至STM32L053R8。当MCU接收到特定指令后,开始解析指令,该解析协议具有特定规范,将在后续详细讨论。随后,MCU将分析并识别特定的风扇控制指令和LED控制指令,从而实现对风扇和LED的控制。
该系统具有四项功能
- 串口屏幕实现触摸键功能
- 发送触摸指令
- MCU分析指令
- 控制风扇和LED
确定功能后,需选择各模块型号:
- 触摸屏类型
- 选用何种MCU模块
- 选用何种外围模块
计划选用 STVC101WT-01 串口触摸屏,毕竟使用方便,市场占有率也较高,最重要的是易于使用; 屏幕问题解决后,需选择MCU。为何选用STM32L053R8作为MCU?因ST MCU在2015年全球市场份额超过11%;
风扇采用5V 4W直流电源供电,可通过IO端口直接控制;LED为普通型号。
各硬件模块的介绍及工作原理
风扇
一般来说,风扇由风扇叶片组成,是一种通过电力驱动产生气流的设备。风扇中的风扇叶片通电后,将空气转化为自然风,从而实现冷却效果。
结构
转子:由磁铁、风扇叶片和轴组成;定子:由硅钢片、线圈和轴承组成;控制电路:由IC感应磁铁的N极和S极通过电路控制线圈导通,产生内部激励使转子旋转。类型:轴流风扇,直流风扇。尺寸:40mm × 40mm × 15mm。
图2
工作原理
电风扇的主要部件是直流电机。其工作原理是:通电线圈在磁场作用下旋转。能量转换形式为:电能主要转化为机械能,由于线圈存在电阻,部分电能不可避免地转化为热能。
图3
LED
LED。它由含镓(Ga)、砷(As)、磷(P)、氮(N)的化合物制成,当电子与空穴结合时可发出可见光,因此可用于制造发光二极管。在电路和仪器中作为指示灯,或组成文字或数字显示。
LED的特点
它采用固态半导体芯片作为发光材料。与传统灯具相比,LED灯具有节能、环保、显色性好、响应速度快等优点。其主要特点如下:
① 节能是LED灯最突出的特点。在能耗方面,LED灯的能耗仅为白炽灯的十分之一,节能灯的四分之一。这是LED灯最大的特点之一。如今人们倡导节能环保,正是由于这一节能特性,LED灯的应用非常广泛,使其非常受欢迎。
② 能够在高速开关状态下工作。当我们在路上行走时,会发现每个LED屏幕或图片都变化莫测。这表明LED灯能够在高速状态下工作。然而,对于我们日常使用的白炽灯,无法实现这种工作状态。在正常生活中,如果开关次数过多,会直接导致灯丝断裂。这也是LED灯广受欢迎的重要原因。
LED的工作原理
LED具有单向导电性。当在LED上施加正电压时,从P区注入的空穴和从N区注入的电子在PN结附近几微米范围内分别与N区中的电子和P区中的空穴结合,产生自发辐射荧光。电子和空穴在不同半导体材料中的能态不同。当电子和空穴复合时,释放的能量不同。释放的能量越多,光的波长越短。
图4
STVC101WT-01的描述
- 1英寸1024×600工业级TFT面板和4线电阻式触摸屏;
- 亮度为300 cd/m²,LED背光;
- RGB颜色为65K;
- 视场面积为7mm × 125.3mm;
- 视角为70°/70°/50°/60°;
- 工作寿命为20000小时。32位Cortex-M4 200Hz CPU;
- CPLD EPM240 TFT-串口屏控制器;
- 128MB(或1GB)闪存;
- USB接口(U盘)下载;
- 图形用户界面设计工具箱软件,简单强大的十六进制指令。
基本功能
- 触摸屏控制/显示图像/显示文本/显示曲线/读写数据/播放视频和音频。适用于各种行业。
- UART 接口为 RS232 / RS485 / TTL;
- 电压范围为 6V-35V;
- 功耗为0W;
- 工作温度范围为 -20℃ / +70℃;
- 空气湿度为60%~90%。
STVC101WT-01模块通过串口与MCU通信,本项目中需使用该模块。只需通过上层计算机的菜单栏选项将设计的UI图片添加至按钮、文本框、背景图片及页面逻辑,生成配置文件后,最终下载至显示屏运行。
除数据手册外,还提供用户手册、通用开发工具箱、驱动程序、部分简单例程演示、视频教程及测试项目文件。
STM32L0538
超低功耗 STM32L053x6 / 8 微控制器将通用串行总线(USB 2.0,无需晶振)的连接能力与高性能 ARM® Cortex®-M0+ 32 位 RISC 核心(运行频率 32 MHz)相结合。
STM32L053x6/8 设备具备丰富的模拟功能,包括一个 12 位 ADC、一个 DAC、两个超低功耗比较器、多个定时器、一个低功耗定时器(LPTIM)、三个通用 16 位定时器、一个基本定时器、一个实时时钟(RTC),以及一个可作为时间基准的引脚。此外,它们还配备两个看门狗定时器,其中一个具有独立时钟和窗口功能,另一个基于总线时钟的窗口看门狗。
此外,STM32L053X6/8 设备还集成了标准和高级通信接口:最多两个 I2C、两个 SPI、一个 I2S、两个 USART、一个低功耗 UART(LPUART)和一个无晶振 USB。该设备提供多达 24 个电容感应通道,可轻松为任何应用添加触摸感应功能。
图 7
STONE 串口屏 开发步骤
一般来说,开发串口屏幕需要以下步骤:
- 使用 Tool 2019 软件进行设计;
- 实现 MCU 与屏幕之间的接口通信项目;
- 实现 MCU 对每个命令的分析并触发响应动作。
STONE TOOLBox 2019(免费图形化设计软件)
STONE TOOLBox 2019及相关USB串口驱动程序软件如下:
图8
STM32CubeMX
STM32CubeMX 是一款图形化工具,可通过逐步流程实现 STM32 微控制器和微处理器的便捷配置,以及生成对应的初始化 C 代码(适用于 Arm® Cortex®-M 核心)或部分 Linux® 设备树(适用于 Arm® Cortex®-A 核心)。第一步是选择与所需外设集匹配的 STMicroelectronics STM32 微控制器或微处理器。对于微处理器,第二步允许配置整个系统的 GPIO 和时钟设置,并交互式地将外设分配给 Arm® Cortex®-M 或 Cortex®-A 环境。特定实用工具,如DDR配置和调优,可帮助用户快速入门STM32微处理器。对于Cortex®-M内核,配置过程包含与微控制器描述完全相同的额外步骤。对于微控制器和Arm® Cortex®-M内核的微处理器,第二步通过引脚冲突解决器、时钟树设置助手 功耗计算器以及一个配置外设(如GPIO或USART)和中间件堆栈(如USB或TCP/IP)的工具。最终,用户启动与所选配置选项匹配的生成过程。此步骤提供用于Arm® Cortex®-M的初始化C代码,可直接在多个开发环境中使用,或为Arm® Cortex®-A生成部分Linux®设备树。
STM32数据手册:
https://www.st.com/resource/en/datasheet/stm32f205rb.pdf
下载链接:
安装完成后,界面将以如下方式打开:
图9
点击此处打开,只需选择 MCU 型号 STM32L053R8,然后生成项目。
如何将 TFT 串口屏 与 STM32 微控制器接口
硬件是所有电子设计的基础,也是代码的载体。要使代码运行,必须有硬件,要确保代码能正常运行,必须有正常的硬件连接。因此,连接图如下:
图10
TOOL 2019界面设计
使用已安装的TOOL 2019,点击左上角的“新建项目”,然后点击“确定”。
图11
随后将生成一个默认项目,默认背景为蓝色。选中该项目并右键点击,选择“删除”以移除背景。然后右键点击图片文件并点击“添加”以添加自定义图片背景,如下所示:
图12
然后添加所需的控件,主要包括按钮控件、数字加减控件和数据变量控件。
图13
配置加减按钮时可进行以下操作:
图14
具体如下:
- 配置按钮按下效果;
- 配置控件写入值的变量地址;
- 配置加减运算类型;
- 配置数值范围。
配置数字文本框时:
图15
随后:
- 设置控件的变量地址;
- 设置位数;
- 设置数字大小;
- 设置数字对齐方式。
- 最后,我们点击生成配置工具
图16
现在配置已完成
该界面主要用于调整速度、剂量和射频,以实现面部和腰部的美容效果。
速度调节地址 0x0001
剂量调节地址 0x0002
射频调节地址 0x0003
注意:
触摸加减与数字显示框之间的关系通过变量地址关联,因此需保持一致性以实现正确控制。
STM32L053R8的开发
图17
选择对应的芯片型号后,点击“开始项目”进入配置界面。
图18
配置并选择项目名称和存储路径,然后点击“生成代码”生成代码。添加协议代码后,可测试演示程序。详细代码如下:
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
*
© Copyright (c) 2019 STMicroelectronics.
* All rights reserved.
*
* This software component is licensed by ST under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
uint8_t aTxStartMessage[] = "\r\n****UART-Hyperterminal communication based on IT ****\r\nEnter 10 characters using keyboard :\r\n";
uint8_t aRxBuffer[20];
uint8_t RxBuffer[9];
uint8_t IOSwitch = 0;
uint8_t PWM_DUTY = 20;// Adjust duty cycle, this value can only be 0-100
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
TIM_HandleTypeDef htim2;
UART_HandleTypeDef huart1;
/* USER CODE BEGIN PV */
#define VGUS_Variable_cmd 0x83
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_TIM2_Init(uint16_t param);
void FAN_ON();
void FAN_OFF();
/* USER CODE BEGIN PFP */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)// Analyze the received data
{
if(huart->Instance==USART1)//
{
HAL_UART_Transmit(&huart1, (uint8_t *)RxBuffer, 9, 0xFFFF);
switch(RxBuffer[3])//Analysis
{
case VGUS_Variable_cmd:
{
//
/********* Stop timer, reconfigure ******/
HAL_TIM_Base_Stop_IT(&htim2);//Stop timer
MX_TIM2_Init( (uint16_t)RxBuffer[8] );
// MX_TIM2_Init( 1);
PWM_DUTY = RxBuffer[8];
HAL_TIM_Base_Start_IT(&htim2);
break;
}
default:
break;
}
}
}
void FAN_ON()//Open LED
{
HAL_GPIO_WritePin(FAN_GPIO_Port, FAN_Pin, GPIO_PIN_SET);
}
void FAN_OFF()//Close LED
{
HAL_GPIO_WritePin(FAN_GPIO_Port, FAN_Pin, GPIO_PIN_RESET);
}
/* USER CODE END PFP */
uint8_t cout = 0;
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == htim2.Instance)
{
cout ++;
if(cout <= PWM_DUTY)// Adjust LED brightness
{
// HAL_GPIO_WritePin(FAN_GPIO_Port, FAN_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
}
else if((cout > PWM_DUTY)&& (cout < 100))
{
// HAL_GPIO_WritePin(FAN_GPIO_Port, FAN_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
}
else
{
cout = 0;
}
if(cout == 20)
{
HAL_TIM_Base_Stop_IT(&htim2);
}
}
}
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_TIM2_Init(1);
/* USER CODE BEGIN 2 */
HAL_UART_Transmit_IT(&huart1, (uint8_t *)aTxStartMessage, sizeof(aTxStartMessage));
HAL_TIM_Base_Start_IT(&htim2);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
然后您可以将代码下载到 STM32 开发板 + STONE 串口屏 开发板进行测试。