当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]本项目利用FreeRTOS和STM32CubeIDE,在RT- thread RT- Spark开发板上实现了一个简单的实时操作系统(RTOS)应用。

1. 介绍

本项目利用FreeRTOS和STM32CubeIDE,在RT- thread RT- Spark开发板上实现了一个简单的实时操作系统(RTOS)应用。

单板上运行4个并发任务(线程):

•通过AHT21传感器在LCD上显示温度

•使用电位器调整RGB LED亮度

•在LCD上显示递增计数器

•闪烁状态指示灯

LCD是在任务之间共享的,因此使用互斥锁来保护独占访问。所有任务都在无限循环中运行,并在每次更新后延迟自己,以便其他任务可以运行。

2. 硬件和软件要求

2.1硬件

•RT- thread RT- Spark开发板(基于stm32)

•板载1.3" 240×240 LCD (ST7789, FSMC/8080接口)

•1板载AHT2温湿度传感器(I²C)

•外置RGB LED

•外部电位计(连接到ADC引脚)

•板载用户LED

•Micro USB电缆,用于电源和编程

2.2软件

•STM32CubeIDE(用于ioc和C代码)

•FreeRTOS(通过STM32CubeMX / CubeIDE集成)

3. 项目概述和任务设计

该应用程序使用四个FreeRTOS任务:

1.温度显示任务

•通过I²C从AHT21传感器读取温度

•将值转换为人类可读的格式

•使用LCD互斥锁安全地将温度写入LCD

2.RGB亮度控制任务

•使用ADC读取电位器

•将ADC值映射到PWM占空比

•更新一个或多个通道的RGB LED改变亮度

3.计数器显示任务

•维护一个递增的整数计数器

•定期锁定LCD互斥锁,更新LCD上的计数器,并解锁互斥锁

4.LED闪烁任务

•以固定的间隔切换一个简单的状态LED

•用作显示RTOS正在运行的视觉心跳

主要功能:

•初始化硬件和外设

•清除LCD

•创建所有四个任务

•启动调度程序。

•可选配置低功耗/休眠模式

4. 一步- -步骤指南

4.1创建STM32CubeIDE项目

1.在STM32CubeIDE中创建一个新的STM32项目。

•文件→新建→STM32项目

•选择RT - Spark板使用的MCU(如果在板数据库中出现,则选择RT - Spark板本身)。

•给它起一个名字,比如FreeRTOS_RT_Spark_Project。

2.生成启用HAL驱动程序的基本项目。

•最初接受默认的时钟设置。

•完成向导以打开。ioc配置。

4.2.Ioc引脚和外设配置

4.2.1配置AHT20传感器I²C

1.打开.ioc文件中的Pinout & Configuration选项卡。

2. 启用I2C外设(例如,I2C1或I2C2,取决于RT - Spark原理图和文档)。

3. 设置引脚以匹配RTSpark AHT21连接:

•SCL引脚:GPIO AHT SCL(来自原理图1.3)

•SDA引脚:GPIO AHT SDA

4. 在I2C设置中:

•选择“I2C”模式

•配置速度(例如,标准模式100 kHz,除非你改变它)

添加:I²C配置和所用引脚的屏幕截图。

4.2.2配置LCD接口(FSMC/8080)

1. 使能通过8080并行接口驱动ST7789 LCD的FSMC/FMC (Flexible Static Memory Controller)。

2. 根据RT - Spark原理图(图1.1)配置数据线db0 - db7、控制线CS、DC、WR、RD和背光引脚(LCD_BL)。

3. 根据您使用的现有LCD库的要求设置相应的引脚(这应该与repo代码匹配)。

4. 确保GPIO的速度和输出类型符合LCD驱动代码的要求。

4.2.3配置RGB LED和电位器

1.RGB led (pwm):

•选择一个TIMx定时器,并在连接到RGB LED引脚(由RTSpark板定义)的通道上启用PWM模式。

•将每个颜色通道配置为PWM输出,具有合适的频率(例如,1-10 kHz)。

•将引脚映射到RGB LED焊盘。

2.电位计(ADC):

•使能ADC外设(如ADC1)。

•选择连接到电位器的通道(请参阅文档/电路板手册)。

•根据代码的读取方式设置连续或单一转换模式。

4.2.4配置状态指示灯和其他gpio

1. 识别用于闪烁的LED引脚(板载用户LED)。

2. 在Pinout中设置为GPIO Output。

3. 配置代码所需的任何其他gpio(例如,重置引脚,背光启用等)。

4.3在STM32CubeMX中启用FreeRTOS

1. 在。iocMiddleware部分,启用FreeRTOS。

2. 选择一个与您的项目设置匹配的基本堆方案(例如,heap_4)。

3. 配置:

•每个任务的最小堆栈大小

•总堆大小(足够4个任务+其他分配)

4.4生成代码和集成库

1. 点击项目→生成代码(或按齿轮图标),让STM32CubeIDE基于ioc生成源文件。

2. 在项目中添加/导入LCD驱动程序和AHT21传感器驱动程序:

•复制LCD驱动程序。c和。h文件到Core/Src和Core/Inc(或适当的文件夹)。

•也复制AHT21驱动程序的。c和。h文件。

•确保项目属性→C/ c++通用→路径和符号中的包含路径是正确的。

3. 将这些驱动程序包含在应用程序代码中(例如,main.c或专用的app.c):

4.5实现互斥锁和任务

现在我们用FreeRTOS把所有的东西捆绑在一起。

4.5.1创建LCD互斥锁

在你的应用程序代码中(例如,main.c的顶部附近):

在main()中启动调度器之前:

任何时候你访问LCD在一个任务:

4.5.2温度显示任务

伪结构(适应你现有的代码):

4.5.3 RGB亮度任务(锅控)

4.5.4计数器显示任务

4.5.5 LED闪烁任务

4.6创建任务并启动调度程序

在硬件初始化之后和vTaskStartScheduler()之前的main()中:

4.7构建、flash和测试

1.在STM32CubeIDE中构建项目。

•修复任何缺失的包含或类型错误,使用您的repo作为参考。

2.通过USB连接RT - Spark板。

3. 选择正确的调试配置并刷新固件。

4. 复位单板,观察:

•液晶显示温度和计数器(在不同的区域或风格)。

•RGB LED亮度随着电位器的转动而变化。

•状态指示灯以正常速率闪烁。

5. 它是如何工作的(摘要)

•FreeRTOS管理四个任务,每个任务都有一个无限循环和自己的职责。

•任务通过调用vTaskDelay()来进行协作,这将产生CPU,以便其他任务可以运行。

•LCD互斥锁确保一次只有一个任务使用LCD,防止重复写入。

•AHT21传感器提供超过I²C的实时温度数据。

•电位器输入通过ADC读取并映射到PWM占空比以控制RGB亮度。

•LED闪烁任务为RTOS调度器提供了一个简单的视觉心跳。

6. 可能的改进

•你可以把这个实验扩展成一个更高级的RTOS项目:

•从AHT21添加湿度显示,并在LCD上显示温度/湿度。

•使用队列在任务之间发送数据(例如,传感器任务→显示任务)。

•添加按钮输入以更改显示模式或RGB模式。

•更积极地实现低功耗模式,并在定时器或中断时唤醒。

7. 结果和输出

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭