【FreeRTOS】Arduino开发STM32

2023-11-19

0.开发环境(工具)

Vscode 、platformio、arduino、STM32F103C8T6、USB-TTL

引脚连接:STM32直接设置为烧录模式即可,烧录完成后会自动运行程序。

   

1.点灯加串口输出调试

注意事项:每次上传程序前,需要按一下复位键。

#include <Arduino.h>
#define ledPin PC13

HardwareSerial Serial1(PA10, PA9); // 将串口1的管脚指定到PA10(RX),PA9(TX)引脚上
int i = 0;
void setup()
{
  Serial1.begin(115200);
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  digitalWrite(ledPin, HIGH);
  delay(500);
  digitalWrite(ledPin, LOW);
  delay(500);
  Serial1.println(i++);
}

platformio.ini文件配置

[env:genericSTM32F103C8]
platform = ststm32
board = genericSTM32F103C8
framework = arduino
upload_port = COM17
monitor_port = COM17
monitor_speed = 115200
upload_protocol = serial

2.FreeRTOS开发STM32

添加相关库函数

测试程序:板载LED闪烁,同时进行串口输出

#include <Arduino.h>
#include <STM32FreeRTOS.h>
#define ledPin PC13

HardwareSerial Serial1(PA10, PA9); // 将串口1的管脚指定到PA10(RX),PA9(TX)引脚上
int i = 0;

void test1(void *pt)
{
  pinMode(ledPin, OUTPUT);
  while (1)
  {
    digitalWrite(ledPin, HIGH);
    vTaskDelay(100);
    digitalWrite(ledPin, LOW);
    vTaskDelay(100);
    Serial1.println(i++);
  }
}

void setup()
{
  Serial1.begin(115200);

  xTaskCreate(test1, "", 1024, NULL, 1, NULL);
  vTaskStartScheduler(); // 开启任务调度,这条语句必须加,否则程序无法正常执行
  vTaskDelete(NULL);
}

void loop()
{
}

 vTaskStartScheduler()的作用

vTaskStartScheduler()是FreeRTOS实时操作系统中的一个函数,它的作用是启动任务调度器在FreeRTOS中,任务调度器负责按照任务的优先级和调度策略来调度任务的执行

具体而言,vTaskStartScheduler()函数会初始化FreeRTOS的内部数据结构,并开始任务调度器的运行。一旦调用了该函数,任务调度器会按照任务的优先级和调度策略开始调度任务的执行。它会根据每个任务的优先级,以抢占或协作的方式分配处理器时间片给不同的任务,从而实现任务的并发执行。

vTaskStartScheduler()函数通常是在系统初始化过程的最后被调用,它标志着系统进入多任务运行状态。在调用该函数之前,需要先创建并初始化好各个任务,并设置好任务的优先级。

需要注意的是,vTaskStartScheduler()函数是一个永不返回的函数,一旦任务调度器开始运行,它将控制整个系统的执行,直到发生严重错误或调用了特殊的函数来停止任务调度器的运行。

总结起来,vTaskStartScheduler()函数的作用是启动FreeRTOS任务调度器,让各个任务按照优先级和调度策略并发执行

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【FreeRTOS】Arduino开发STM32 的相关文章

  • c项目makefile多重定义错误

    这个问题是一个对应于创建的repexthis问题 在我的嵌入式 C 项目中 我有两个独立的板 我想为每个板创建两个 c 文件 master c 和 Slave c 其中包含自己的特定main 功能 我使用 stm32cumbemx 生成带有
  • 在没有 IDE 的情况下如何使用 CMSIS?

    我正在使用 STM32F103C8T6 并想使用 CMSIS 这本质上只是寄存器定义 没有代码 让我的生活更轻松 同时仍保持在较低水平 问题是我不知道如何安装该库以便在命令行上使用 Makefile 使用 所有文档似乎都与特定于供应商的 I
  • rt-thread studio中新建5.02版本报错

    先吐槽一下 rt thread studio出现BUG真多 好多时间都是在找BUG 但里面用好多控件还是挺好用的 真是又爱又恨 所以一般使用功能不多的话还是用keil多一点 创建5 02版本工程之后直接进行编译 直接会报下面这个错误 资源
  • Push_back() 导致程序在进入 main() 之前停止

    我正在为我的 STM32F3 Discovery 板使用 C 进行开发 并使用 std deque 作为队列 在尝试调试我的代码 直接在带有 ST link 的设备上或在模拟器中 后 代码最终在 main 中输入我的代码之前在断点处停止 然
  • STM32F103

    提示 来源正点原子 参考STM32F103 战舰开发指南V1 3PDF资料 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 开发环境硬件普中科技 接线图在g
  • HAL库学习

    CMSIS简介 CMSIS Cortex Microcontroller Software Interface Standard 微控制器软件接口标准 由ARM和其合作的芯片厂商 ST NXP 软件工具厂商 KEIL IAR 共同制定的标准
  • 硬件基础-电容

    电容 本质 电容两端电压不能激变 所以可以起到稳定电压作用 充放电 电容量的大小 想使电容容量大 使用介电常数高的介质 增大极板间的面积 减小极板间的距离 品牌 国外 村田 muRata 松下 PANASONIC 三星 SAMSUNG 太诱
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 最终启动顺序错误 - STM32L476 的 Eclipse System Workbench 调试

    我正在尝试调试和运行 STM32L476 的简单汇编代码 我已经设置了 Eclipse Oxygen 在 Eclipse 中安装了最新版本的 System Workbench 插件并安装了 ST Link 驱动程序 IDE 成功构建了程序
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • STM32F4XX的12位ADC采集数值超过4096&右对齐模式设置失败

    文章目录 一 前言 二 问题1 数值超过4096 三 问题1的排错过程 四 问题2 右对齐模式设置失败 五 问题2的解决方法 5 1 将ADC ExternalTrigConv设置为0 5 2 使用ADC StructInit 函数 一 前
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧 说起来很简单 就是几行代码的事 但楞是折腾了我大半天时间才搞定 原因后面说 先看代码吧 读操作 读操作很简单 以32位方式读取的时候是这样的 data IO uint32 t 0x0800F000 需要注意的是 当以32位方式读
  • STM32H5 Nucleo-144 board开箱

    文章目录 开发板资料下载 目标 点亮LD1 绿 LD2 黄 和LD3 红 三个LED灯 开箱过程 博主使用的是STM32CubeMX配置生成代码 具体操作如下 打开STM32CubeMX File gt New project 选择开发板型
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • STM32 上的位置无关代码 - 指针

    我已成功在 STM32 上构建并运行位置无关的代码 向量表和 GOT 已修补 一切正常 但我对这样的代码有问题 double myAdd double x return x 0 1 double ptrmyAdd double myAdd
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015

随机推荐

  • Jenkins安装及基础环境配置

    原文地址 Jenkins安装及基础环境配置 BIGTREE Jenkins服务安装 方式1 下载jenkins war包 直接tomcat或者java jar jenkins war运行 方式2 直接jenkins msi安装 Window
  • mybatis逆向工程之动态web项目

    有了逆向工程 单表的增删改查以及相关的实体类 还有属性注释都不用自己写了 都可以自动化生成 只需如下三步即可 逆向工程的优点是 自动化生成实体类和对应的增删改查 效率相对于之前个人开发时一个个写增删改查要高的多 逆向工程的缺点是 xml中的
  • 《硬件接入》3288板刷机及屏幕参数配置探索

    最近在工控机上做了项目 涉及到地磅接入 打印机接入 海康威视摄像头接入等功能 摸索下来其实硬件接入都是比较简单的事 一般1 2天就可以完成一个单独模块开发了 不过也遇到一些比较麻烦的事 比如买的3288板工控机 刷的固件是6 0 1 这个固
  • C++ 获取文件版本号的代码

    Test cpp 定义控制台应用程序的入口点 include stdafx h include
  • HTML连载85-添加选择圆点

    一 添加选择圆点 先上个半成品 div class top div class top in div class top left div div div
  • 云计算——ACA学习 云计算核心技术

    作者简介 一名云计算网络运维人员 每天分享网络与运维的技术与干货 座右铭 低头赶路 敬事如仪 个人主页 网络豆的主页 写在前面 本系列将会持续更新云计算阿里云ACA的学习 了解云计算及网络安全相关从业的基础知识 以及阿里云产品的使用部署 提
  • 2023智慧城区统一运营白皮书

    本白皮书讨论的 智慧城区 概念 是围绕多种服务业态 特定区域的智慧统一运营管理服务 我们从管理属性 服务业态 管理面积 智慧化程度4个方面对智慧城区分析 把以企业为主导 政府相关部门 社会组织 城区居民等多方协同治理 通过跨业态 跨空间的智
  • matlab中产生随机点,如何在matlab中制作圆形并在里面生成随机点

    这里的另一种选择 Set parameters R 0 5 radius C 3 4 center x y N 50 number of points inside circle generate circle boundary t lin
  • MATLAB2012a下载、安装及破解方法

    下载地址如下 http yunpan cn cyjGMugpDGsse 提取码 32e8 安装步骤如下 1 解压压缩包 打开文件夹内的setup exe 2 选择 不使用Internet安装 3 接受许可协议条款 点击 是 4 选择 我已有
  • Python,燃气火焰检测主要步骤!

    问题描述 在现有的基础上 燃气火焰的检测主要是基于火焰颜色特征 由于燃气火焰不同于普通火焰 其中蓝色分量较多 一般的检测方法准确度不够 故采取其他方法来检测火焰 下面主要介绍4个步骤的思路和主要的 python 代码 解决方案 1 背景差分
  • Python和Matplotlib电磁一维二维三维模拟

    自由空间中传播的脉冲一维模拟 自由空间的时间相关麦克斯韦旋度方程为 E
  • vue3中的readonly

    接受一个对象 不论是响应式还是普通的 或是一个 ref 返回一个原值的只读代理 只读代理是深层的 对任何嵌套属性的访问都将是只读的 它的 ref 解包行为与 reactive 相同 但解包得到的值是只读的 类型 function reado
  • VS2019版本下载详细介绍~

    一 下载地址 第一种方法 VS官网 Visual Studio 2022 IDE 适用于软件开发人员的编程工具 因为官网现在主推2022版本的VS 所以需要选择老旧版本下载 点击下载按钮 向下滑动 该方法需要登录微软账户 才能选择老旧版本的
  • sort的用法

    sort的用法 详细见cplusplus 1 默认的sort函数是按升序排 对应于1 sort a a n 两个参数分别为待排序数组的首地址和尾地址 2 可以自己写一个cmp函数 按特定意图进行排序 对应于2 例如 sort algorit
  • SOIL在VS2015搭建

    这是SOIL库的主页 http www lonesock net soil html 下载好解压 进project vc9 用Vs打开项目 编译记得用release 如果用的OPengl是64位的就用64位编译 不然生成的lib不能用 运行
  • 积分图像(Integral Image)和积分直方图

    积分图像文章推荐 http blog sina com cn s blog 4cb0b54301017wwo html https blog csdn net u010807846 article details 50354000 参考文献
  • vue-router的routes中name属性作用详解

    我们常用vue js和vue router来创建单页应用 vue router能很方便的管理所有的单页组件 我们在定义每个路由的时候会有一个name的属性 如下面代码 通常我们不定义这个属性发现也没有任何问题 那么这个name到底有什么用呢
  • R语言绘图:实现数据点的线性拟合,进行显著性分析(R-squared、p-value)、添加公式到图像

    最近在做关于数据点线性拟合相关的研究 感觉R语言在这方面很方便 而且生成的图片很漂亮 所以在这里和大家分享一下代码 这是别人所绘制的拟合图像 很漂亮 自己也用iris鸢尾花数据集进行一个线性拟合看看 拟合线性模型最基本的函数就是lm 格式为
  • 进阶java大师之路,泛型在hashmap上的灵活运用

    由于 公司的试用的框架上 存在大量的hashmap的创建 产生大量的I O 以及内存的消耗 所以 抽了点时间 看书 effective java 这本书 同时 也从项目的作者 framework 上学习 吸取 最终写出了 符合生产的方案 存
  • 【FreeRTOS】Arduino开发STM32

    0 开发环境 工具 Vscode platformio arduino STM32F103C8T6 USB TTL 引脚连接 STM32直接设置为烧录模式即可 烧录完成后会自动运行程序 1 点灯加串口输出调试 注意事项 每次上传程序前 需要