STM32利用FreeRTOS实现4个led灯同时以不同的频率闪烁
在没有接触到FreeRTOS时,也没有想过同时叫两个或两个以上的led灯闪烁的想法,接触后,发现如果想叫两个灯同时以不同的频率闪烁,不能说是不可能,就算是做到了也要非常的麻烦。但是学习了FreeRTOS后,发现要想同时执行几个函数还是很简单的一件事,虽然CPU是单核心的,这就好比是电脑编程中的多线程,这个函数执行1毫秒,那个函数执行1毫秒,就这样不停地切换,由于切换的速度相当的快,给人的感觉就是这几个函数在同时执行。我们编程中难免会遇到这种需要同时运行的函数,所以学习一下FreeRTOS还是很有必要的。
好了,说了这么多,把我今天的结果展示一下吧:

图片中的A0到A3端口的led灯在以不同的频率闪烁。
下面把代码贴出来看看吧:
main.c文件:
#include "stm32f10x.h" // Device header
#include "led.h"
#include "freertos.h"
#include "task.h"void Mytask0( void * arg) //任务0函数
{while(1) //所干的事就是死循环{FANZHUAN0; //翻转A0端口电平vTaskDelay(40); //延时40毫秒 } //整个函数就是控制A0端口的led灯以40毫秒的间隔不停的闪烁
}void Mytask1( void * arg) //任务1函数
{while(1){FANZHUAN1;vTaskDelay(140);} // 整个函数就是控制A1端口的led灯以140毫秒的间隔不停的闪烁
}void Mytask2( void * arg) //任务2函数
{while(1){FANZHUAN2;vTaskDelay(400);} // 整个函数就是控制A2端口的led灯以400毫秒的间隔不停的闪烁
}void Mytask3( void * arg) //任务3函数
{while(1){FANZHUAN3;vTaskDelay(800);} // 整个函数就是控制A3端口的led灯以800毫秒的间隔不停的闪烁
}TaskHandle_t TaskHandle_t0; //创建任务0所需要的任务句柄变量
TaskHandle_t TaskHandle_t1; //创建任务1所需要的任务句柄变量
TaskHandle_t TaskHandle_t2; //创建任务2所需要的任务句柄变量
TaskHandle_t TaskHandle_t3; //创建任务3所需要的任务句柄变量int main(void)
{LED_Init(); //初始化led配置xTaskCreate(Mytask0, "Mytask0", 120, NULL, 1, &TaskHandle_t0); //创建任务0(任务0函数名, 任务字符串, 堆栈大小随便,任务参数, 优先级, 任务句柄地址)xTaskCreate(Mytask1, "Mytask1", 120, NULL, 2, &TaskHandle_t1); //创建任务1(任务0函数名, 任务字符串, 堆栈大小随便,任务参数, 优先级, 任务句柄地址)xTaskCreate(Mytask2, "Mytask2", 120, NULL, 3, &TaskHandle_t2); //创建任务2(任务0函数名, 任务字符串, 堆栈大小随便,任务参数, 优先级, 任务句柄地址)xTaskCreate(Mytask3, "Mytask3", 120, NULL, 4, &TaskHandle_t3); //创建任务3(任务0函数名, 任务字符串, 堆栈大小随便,任务参数, 优先级, 任务句柄地址)vTaskStartScheduler(); //开启调度器}
led.h文件:
#ifndef __LED_H
#define __LED_H#include "stm32f10x.h" // Device header#define GPIOx GPIOA
#define GPIO_PIN GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3
#define GPIO_CLK RCC_APB2Periph_GPIOA#define ON 1
#define OFF 0#define LED(x) if(x)\GPIO_ResetBits(GPIOx, GPIO_PIN);\else \GPIO_SetBits(GPIOx, GPIO_PIN);#define FANZHUAN0 {GPIOx->ODR ^= GPIO_Pin_0;}
#define FANZHUAN1 {GPIOx->ODR ^= GPIO_Pin_1;}
#define FANZHUAN2 {GPIOx->ODR ^= GPIO_Pin_2;}
#define FANZHUAN3 {GPIOx->ODR ^= GPIO_Pin_3;}void LED_Init(void);#endif
led.c文件:
#include "led.h" // Device headervoid LED_Init(void)
{RCC_APB2PeriphClockCmd(GPIO_CLK, ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin = GPIO_PIN;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOx, &GPIO_InitStruct);}
FreeRTOS的代码,太多了,我就不都贴出来了,前面我写过一篇这样的文章,不懂的可以往前自己找找。这个工程创建好了,就不用每次都创建了,每次赋值粘贴重命名就好了,还是很省事的啊!
相关文章:
STM32利用FreeRTOS实现4个led灯同时以不同的频率闪烁
在没有接触到FreeRTOS时,也没有想过同时叫两个或两个以上的led灯闪烁的想法,接触后,发现如果想叫两个灯同时以不同的频率闪烁,不能说是不可能,就算是做到了也要非常的麻烦。但是学习了FreeRTOS后,发现要想同…...
深入Laravel事件系统:创建与使用事件的指南
Laravel的事件系统是一种强大的机制,它允许你将应用程序的行为封装成事件,然后在适当的时候触发这些事件。这不仅有助于代码的解耦,还提高了应用程序的可维护性和可扩展性。本文将详细介绍如何在Laravel中创建和使用事件,包括事件…...
element-ui操作表格行内容如何获取当前行索引?
需求: 根据每个用户的提交次数、撤回次数,动态计算出实际次数,并且提交次数不能小于撤回次数 <template><div><el-table:data"tableData"style"width: 80%"border><el-table-columnprop"date&…...
代发考生战报:南京考场华为售前HCSP H19-411考试通过
代发考生战报:南京考场华为售前HCSP H19-411考试通过,客服给的题库非常稳定,考试遇到2个新题,剩下全是题库里的原题,想考的放心考吧,考场服务挺好,管理员带着做签名和一些考试说明介绍清楚&…...
【Spring Boot】Spring原理:Bean的作用域和生命周期
目录 Spring原理一. 知识回顾1.1 回顾Spring IOC1.2 回顾Spring DI1.3 回顾如何获取对象 二. Bean的作用域三. Bean的生命周期 Spring原理 一. 知识回顾 在之前IOC/DI的学习中我们也用到了Bean对象,现在先来回顾一下IOC/DI的知识吧! 首先Spring IOC&am…...
MinIO:开源对象存储解决方案的领先者
MinIO:开源对象存储解决方案的领先者 MinIO 是一款开源的对象存储系统,致力于提供高性能、可伸缩、安全的数据存储解决方案。 官方解释:MinIO 是一个基于Apache License v2。0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适…...
15、电科院FTU检测标准学习笔记-基本性能
作者简介: 本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验 在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验 ———————————————————…...
古建筑倾斜在线监测系统:科技守护历史的创新实践
在文化遗产保护的广阔领域中,古建筑的健康监测占据着举足轻重的地位。然而,传统的监测方法往往受限于布线复杂、安装难度大以及对古建筑本体可能造成的伤害等问题。近年来,一种新型的古建筑倾斜在线监测系统应运而生,它…...
DP(2) | Java | LeetCode 62, 63, 343, 96 做题总结(96 未完)
62.不同路径 我的代码(报错) 写的过程中感到很迷惑的点:①二维数组和这道题目的对应弄不清除,m n的初始化 是 dp[m][n] 还是 dp[n][m] ② class Solution {public int uniquePaths(int m, int n) {int[][]dp new int[m1][n1];d…...
Ubuntu实战续篇:Apache httpd轻松搭建高效代理服务器
Ubuntu实战续篇:Apache httpd轻松搭建高效代理服务器 一、前言二、Ubuntu下的Apache配置文件概览三、配置并启用 Apache 代理服务 作者:高玉涵 时间:2024.7.11 21:06 博客:blog.csdn.net/cg_i 环境:Ubuntu 22.04.4 LTS…...
Linux 程序卡死的特殊处理
一、前言 Linux环境。 我们在日常编写的程序中,可能会出现一些细节问题,导致程序卡死,即程序没法正常运行,界面卡住,也不会闪退... 当这种问题出现在客户现场,那就是大问题了。。。 当我们暂时还无法排…...
(C++字符串02) 反转字符串中的单词
151、反转字符串中的单词 先将字符串的里的多余空格去掉,时间复杂度:O(n),再将字符串整体反转,时间复杂度:O(n),最后反转每一个单词,时间复杂度:O(n); class Solution { public:string reverseWords(stri…...
一致性Hash问题及解决方案
Hash算法的应用场景 请求的负载均衡 Nginx的ip_hash策略可以在客户端ip不发生变化的情况下,将其发出的请求始终路由到同一个目标服务器上,实现会话粘滞,避免处理session共享问题。 如果没有ip_hash策略,可以通过维护一张映射表的…...
【接口设计】如何设计统一 RESTful 风格的数据接口
如何设计统一 RESTful 风格的数据接口 1.版本控制1.1 通过 URL1.2 通过自定义请求头1.3 通过 Accept 标头 2.过滤信息3.确定 HTTP 的方法4.确定 HTTP 的返回状态5.定义统一返回的格式 近年来,随着移动互联网的发展,各种类型的客户端层出不穷。如果不统一…...
【备战秋招】——算法题目训练和总结day3
【备战秋招】——算法题目训练和总结day3😎 前言🙌BC149简写单词题解思路分析代码分享: dd爱框框题解思路分析代码分享: 除2!题解思路分析代码分享: 总结撒花💞 😎博客昵称ÿ…...
Git 操作总结
1. 安装、Git 环境配置 1.1 安装 Git 官方版本可以在 Git 官方网站下载:打开 https://git-scm.com/download/win,选择相应版本即可。 Git 安装完成后,可以在开始菜单中看到 Git 的三个启动图标(Git Bash、Git CMD、Git GUI&…...
若依 ruoyi-vue SpringBoot highlight-textarea 输入框敏感词关键词高亮标红(二)
参考文章,非常感谢大佬的分享 实现可高亮的输入框 — HighlightTextarea GitHub:highlight-textarea 可看作者上一篇文章 若依 ruoyi-vue SpringBoot聊天敏感词过滤sensitive-word(一) 效果图 审核时,输入框高亮敏感词ÿ…...
33 IRF配置思路
IRF配置思路网络括谱图 主 Ten-GigabitEthernet 1/0/49 Ten-GigabitEthernet 1/0/50 Ten-GigabitEthernet 1/0/51 备 Ten-GigabitEthernet 2/0/49 Ten-GigabitEthernet 2/0/50 Ten-GigabitEthernet 2/0/51 思路 主 1 利用console线进入设备的命令行页面去更改…...
Dify中的RAG和知识库
一.RAG 基本架构 当用户提问 “美国总统是谁?” 时,系统并不是将问题直接交给大模型来回答,而是先将用户问题在知识库中进行向量搜索,通过语义相似度匹配的方式查询到相关的内容(拜登是美国现任第46届总统…࿰…...
vue3 + i18n 中英文切换
第一步:安装vue-i18n npm install vue-i18n 第二步:配置语言包及js文件 目录如下: 英文语言包 en.js // lang/en.js - 英文语言包 export default {menu: { 库房管理: Warehouse Management,入库检测: Incoming Inspection, 设…...
基于Circuit Playground Express与NeoPixel的智能光控花环制作全攻略
1. 项目概述:打造一个会“呼吸”的智能光之花环你是否想过,让一串普通的装饰灯带拥有感知环境、自动调节的“生命”?这听起来像是科幻电影里的场景,但实际上,利用今天唾手可得的开源硬件和图形化编程工具,任…...
AI为编程赋能增效:从“古法编程”到氛围编程的范式革命
在人工智能技术飞速发展的今天,编程领域正经历着一场前所未有的范式革命。曾经,我们习惯于在编辑器中逐行敲击代码,为复杂的语法纠错而焦头烂额,那个需要死记硬背各种操作符与数据结构的“古法编程时代”正在悄然落幕。取而代之的…...
量子退火优化CPS测试用例生成的技术解析
1. 量子退火在CPS测试用例生成中的应用概述在安全关键系统(如自动驾驶、工业控制系统)的开发过程中,测试用例的质量直接关系到系统的可靠性。传统测试方法面临两大核心挑战:一是如何在庞大的输入空间中找到最具检测效力的测试用例…...
ElevenLabs语音克隆效果翻倍秘技(实测SSML+声纹嵌入+噪声抑制三重优化)
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs语音克隆效果翻倍秘技(实测SSML声纹嵌入噪声抑制三重优化) ElevenLabs 的语音克隆能力虽强,但原始 API 调用常因语调扁平、背景干扰与韵律失真导致真实感不…...
ARM指令集架构与安全指令解析:APAS、ASR与AUT
1. ARM指令集架构概述在处理器设计领域,指令集架构(Instruction Set Architecture, ISA)定义了处理器与软件之间的契约。作为RISC(精简指令集计算机)架构的代表,ARM指令集以其高效能和低功耗特性࿰…...
MLX90614红外测温传感器:从原理到Arduino实战应用指南
1. 项目概述:从接触式到非接触式的测温革新在嵌入式开发和物联网项目中,温度测量是一个永恒的主题。从传统的热敏电阻、DS18B20,到热电偶,我们习惯了将探头紧贴甚至刺入被测物体来获取读数。但你是否遇到过这样的困境:…...
Cursor Pro终极破解教程:三步免费解锁AI编程助手完整指南
Cursor Pro终极破解教程:三步免费解锁AI编程助手完整指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your …...
Keyviz完全指南:为什么你的屏幕需要这个免费键盘可视化神器
Keyviz完全指南:为什么你的屏幕需要这个免费键盘可视化神器 【免费下载链接】keyviz Keyviz is a free and open-source tool to visualize your keystrokes ⌨️ and 🖱️ mouse actions in real-time. 项目地址: https://gitcode.com/gh_mirrors/ke/…...
NotebookLM如何让AI替你精准定位审稿人潜台词?——基于572份Accepted回复文本的NLP语义聚类分析
更多请点击: https://intelliparadigm.com 第一章:NotebookLM如何让AI替你精准定位审稿人潜台词?——基于572份Accepted回复文本的NLP语义聚类分析 从“Minor Revision”到“Strong Accept”的语义解码 NotebookLM 的文档锚定(D…...
AI智能体编排框架Agent-Octo:章鱼架构解析与实战应用
1. 项目概述:当AI智能体遇上“章鱼”架构最近在开源社区里,一个名为purton-tech/agent-octo的项目引起了我的注意。乍一看这个标题,你可能会想,这又是一个AI智能体(Agent)框架。没错,它的核心确…...
