当前位置: 首页 > news >正文

STM32基于HAL库RT-Thread Demo测试

STM32基于HAL库RT-Thread Demo测试


  • 🎈源码地址:https://github.com/RT-Thread/rt-thread/tree/master
  • 📌基于STM32CUBEMX中间件安装《基于 CubeMX 移植 RT-Thread Nano》
  • 📍环境搭建《使用 Env 创建 RT-Thread 项目工程》
  • 🔖《Env 用户手册》
  • ✨在STM32上使用推荐使用RT-Thread Nano版本。
  • 🌿如果仅仅是想使用此系统框架,那么就不需要按照官方介绍的复杂配置,只需拷贝一个工程模板来使用即可。

  • 📍ARM.Keil官网提供的rt-thread开发框架例程资源:https://www.keil.arm.com/boards/?q=&vendor=stmicroelectronics&core=Cortex-M3&sort_by=

  • 或者是Keil中直接下载:
    在这里插入图片描述

  • 🌿按照官方的学习路线:先利用现成的工程案例模拟运行。可参考官方的教程《Keil 模拟器 STM32F103 上手指南》

  • 🔖当然你如果手上有对应的STM32开发板,也是可以直接烧录和运行来的。测试方法和仿真模拟是一样的。
  • 🔰Keil模拟器提供的例程资源可以直接编译、仿真或烧录测试的,(https://gitee.com/rtthread/docs-online/raw/master/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-simulator/rtthread_simulator_v0.1.0.7z)在github下载的源码资源中的bsp中的例程需要用过Env工具,对需要使用的工程,要提前配置一下才能通过编译的。
  • 🔖bsp源码例程如果没有经过配置,会报缺少RT_CPUS_NR宏定义,如果仅是拷贝模板,可以自己定义一下也可以解决报错问题。

🛠Env配置

  • 🌿按照官方提供的ENv安装教程安装完成并设置好后,在项目文件夹内右键通过ConEmu Here打开,输入menuconfig
    在这里插入图片描述
  • 🌿bsp例程配置CPU核心数
    在这里插入图片描述

在这里插入图片描述

  • 🌿其他外设功能开启设置,按个人需求配置,不同型号的项目例程外设有差异,目前官方所提供的芯片例程,外设配置内容并不是很完善。当然可以按照官方给出的教程创建《STM32 系列 BSP 制作教程》
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 🌿配置好待测试的外设功能后,记得保存配置选项。
    在这里插入图片描述

  • 🌿已完成项目的配置工作,可以通过Keil直接打开工程进行编译,也可以使用ENv自带的编译工具链,运行 scons 命令即可使用默认的 ARM_GCC 工具链编译 bsp例程。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 🔖Keil中编译和下载代码就不介绍了。
  • 📝测试例程:(rt-thread\bsp\stm32\stm32f103-blue-pill
/** Copyright (c) 2006-2021, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date           Author       Notes* 2019-03-08     obito0       first version*/#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>/* defined the LED0 pin: PC13 */
#define LED0_PIN    GET_PIN(E, 5)
#define LED1_PIN    GET_PIN(B, 5)
#define PWM_DEV_NAME        "pwm2"  /* PWM设备名称 */
#define PWM_DEV_CHANNEL1     1       /* PWM通道 */
#define PWM_DEV_CHANNEL2     1       /* PWM通道 */
struct rt_device_pwm* pwm_dev;      /* PWM设备句柄 */
rt_uint32_t period, pulse;//TIM_HandleTypeDef htim2;
int main(void)
{period = 5000;    /* 周期为5ms,单位为纳秒ns */pulse = 2000;          /* PWM脉冲宽度值,单位为纳秒ns *//* 查找设备 */pwm_dev = (struct rt_device_pwm*)rt_device_find(PWM_DEV_NAME);/* 设置PWM周期和脉冲宽度 *///如果想通过串口命令来开启,就不需要启用下面的注释代码
//    rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL1, period, pulse);
//    rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL2, period, pulse);/* 使能设备 */
//    rt_pwm_enable(pwm_dev, 1); //开启PWM输出通道:PA15
//    rt_pwm_enable(pwm_dev, 2);//开启PWM输出通道:PB3/* 关闭设备通道 */
//    rt_pwm_disable(pwm_dev, PWM_DEV_CHANNEL);/* set LED0 pin mode to output */rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
//    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); //开启PWM输出通道:PA15
//    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); //开启PWM输出通道:PB3while(1){rt_pin_write(LED0_PIN, PIN_LOW);rt_pin_write(LED1_PIN, PIN_HIGH);rt_thread_mdelay(500);rt_pin_write(LED0_PIN, PIN_HIGH);rt_pin_write(LED1_PIN, PIN_LOW);rt_thread_mdelay(500);}
}

在这里插入图片描述

  • 🌿通过串口命令配置对应PWM通道输出:

[21:36:06.342] O-9[32m[I/I2C] I2C bus [i2c1] regi
[21:36:06.400] stered[0m
[21:36:06.400] 
[21:36:06.400]  \ | /
[21:36:06.400] - RT -     Thread Operating System
[21:36:06.400]  / | \     5.1.0 build Oct 20 2023 20:37:06
[21:36:06.400]  2006 - 2022 Copyright by RT-Thread team
[21:36:06.400] msh >
[21:36:08.932] pwm probe pwm2[21:36:08.943] pwm probe pwm2
[21:36:08.943] probe pwm2 success
[21:36:08.943] msh >
[21:36:08.943] msh >
[21:36:31.093] pwm enable 2[21:36:31.104] pwm enable 2
[21:36:31.104] pwm2 channel 2 is enabled success 
[21:36:31.104] msh >
[21:36:31.104] msh >
[21:36:38.840] pwm enable 1[21:36:38.851] pwm enable 1
[21:36:38.851] pwm2 channel 1 is enabled success 
[21:36:38.851] msh >
[21:36:38.851] msh >
[21:37:26.475] pwm set 1 5000 2000[21:37:26.487] pwm set 1 5000 2000
[21:37:26.487] pwm info set on pwm2 at channel 1
[21:37:26.487] msh >
[21:37:26.487] msh >
[21:37:32.232] pwm set 2 5000 2000[21:37:32.243] pwm set 2 5000 2000
[21:37:32.243] pwm info set on pwm2 at channel 2
[21:37:32.243] msh >
[21:37:32.243] msh >
[21:37:52.630] pwm get 1[21:37:52.640] pwm get 1
[21:37:52.640] Info of device [pwm2] channel [1]:
[21:37:52.640] period      : 5000
[21:37:52.647] pulse       : 2000
[21:37:52.647] Duty cycle  : 40%
[21:37:52.647] msh >
[21:37:52.647] msh >
[21:37:58.043] pwm get 2[21:37:58.053] pwm get 2
[21:37:58.053] Info of device [pwm2] channel [2]:
[21:37:58.053] period      : 5000
[21:37:58.060] pulse       : 2000
[21:37:58.060] Duty cycle  : 40%
[21:37:58.060] msh >
[21:37:58.060] msh >

在这里插入图片描述

  • 📚测试工程
链接:https://pan.baidu.com/s/1ujR9pf4UA7lqIidIk_BV9w 
提取码:x014

相关文章:

STM32基于HAL库RT-Thread Demo测试

STM32基于HAL库RT-Thread Demo测试 &#x1f388;源码地址&#xff1a;https://github.com/RT-Thread/rt-thread/tree/master&#x1f4cc;基于STM32CUBEMX中间件安装《基于 CubeMX 移植 RT-Thread Nano》&#x1f4cd;环境搭建《使用 Env 创建 RT-Thread 项目工程》&#x1f5…...

萌新小白必做题(2)找素数

一.思路分析 先来看看素数的性质&#xff1a; 素数又称质数&#xff0c;是指除了1和本身外没有其它因数的自然数。素数有许多有趣的性质和应用&#xff0c;例如可以用于加密算法和数学证明等。比如2、3、5、7等都是素数&#xff0c;而4、6、8、9等则不是素数。素数的研究是数…...

《基于 Vue 组件库 的 Webpack5 配置》8.在生成打包文件之前清空 output(dist) 目录(两种方式)

方式一 ​ 如果 webpack 是 v5.20.0&#xff0c;直接使用属性 output.clean&#xff0c;配置如下&#xff1a; module.exports {//...output: {clean: true}, };方式二 如果使用较低版本&#xff0c;可以使用插件 clean-webpack-plugin&#xff1a; 先安装&#xff1a;npm…...

3、Kafka Broker

4.1 Kafka Broker 工作流程 4.1.1 Zookeeper 存储的 Kafka 信息 &#xff08;1&#xff09;启动 Zookeeper 客户端。 [hadoop102 zookeeper-3.5.7]$ bin/zkCli.sh&#xff08;2&#xff09;通过 ls 命令可以查看 kafka 相关信息。 [zk: localhost:2181(CONNECTED) 2] ls /kaf…...

数字孪生智慧建筑可视化系统,提高施工效率和建造质量

随着科技的不断进步和数字化的快速发展&#xff0c;数字孪生成为了建筑行业的一个重要的概念&#xff0c;被广泛应用于智能化建筑的开发与管理中。数字孪生是将现实世界的实体与数字世界的虚拟模型进行连接和同步&#xff0c;从而实现实时的数据交互和模拟仿真。数字孪生在建筑…...

SpringCloud: feign整合sentinel实现降级

一、加依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…...

List<LinkedHashMap<String, String>>类型的数据转换为Map<String, List<String>>类型数据

import java.util.*;public class Main {public static void main(String[] args) {// 示例数据&#xff1a;List<LinkedHashMap>List<LinkedHashMap<String, String>> keyParamList new ArrayList<>();LinkedHashMap<String, String> map1 ne…...

react 学习 —— 16、使用 ref 操作 DOM

什么时候使用 ref 操作 DOM&#xff1f; 有时你可能需要访问由 React 管理的 DOM 元素 —— 例如&#xff0c;让一个节点获得焦点、滚动到它或测量它的尺寸和位置。在 React 中没有内置的方法来做这些事情&#xff0c;所以你需要一个指向 DOM 节点的 ref 来实现。 怎么使用 r…...

Qt planeGame day10

Qt planeGame day10 Game基本框架 qt中没有现成的游戏框架可以用&#xff0c;我们需要自己搭框架首先创建一个QGame类作为框架&#xff0c;这个基本框架里面应该有如下功能&#xff1a;游戏初始化 void init(const QSize& siez,const QString& title);游戏反初始化(…...

贪吃蛇项目实践

游戏背景&#xff1a; 贪吃蛇是久负盛名的游戏&#xff0c;它也和俄罗斯⽅块&#xff0c;扫雷等游戏位列经典游戏的⾏列。 实现基本的功能&#xff1a; 贪吃蛇地图绘制 蛇吃⻝物的功能 &#xff08;上、下、左、右⽅向键控制蛇的动作&#xff09; 蛇撞墙死亡 蛇撞⾃⾝死亡 计…...

【C++】哈希应用——海量数据面试题

哈希应用——海量数据面试题 一、位图应用1、给定100亿个整数&#xff0c;设计算法找到只出现一次的整数&#xff1f;2、给两个文件&#xff0c;分别有100亿个整数&#xff0c;我们只有1G内存&#xff0c;如何找到两个文件交集&#xff1f;&#xff08;1&#xff09;用一个位图…...

​CUDA学习笔记(五)GPU架构

本篇博文转载于https://www.cnblogs.com/1024incn/tag/CUDA/&#xff0c;仅用于学习。 GPU架构 SM&#xff08;Streaming Multiprocessors&#xff09;是GPU架构中非常重要的部分&#xff0c;GPU硬件的并行性就是由SM决定的。 以Fermi架构为例&#xff0c;其包含以下主要组成…...

逻辑漏洞详解

原理&#xff1a; 没有固定的概念&#xff0c;一般都是不符合常识的情况。比如任意用户注册&#xff0c;短信炸弹&#xff0c;占用资源&#xff0c;交易支付、密码修改、密码找回、越权修改、越权查询、突破限制。 根据实际业务逻辑进行比对&#xff0c;购物的可以根据数量&a…...

MySQL——八、MySQL索引视图

MySQL 一、视图1、什么是视图2、为什么需要视图3、视图的作用和优点4、创建视图5、视图使用规则6、修改视图7、删除视图 二、索引1、什么是索引2、索引优缺点3、索引分类4、索引的设计原则5、创建索引5.1 创建表是创建索引5.2 create index5.3 ALTER TABLE 6、删除索引7、MySQL…...

力扣100097. 合法分组的最少组数(哈希+贪心)

题目描述&#xff1a; 给你一个长度为 n 下标从 0 开始的整数数组 nums 。 我们想将下标进行分组&#xff0c;使得 [0, n - 1] 内所有下标 i 都 恰好 被分到其中一组。 如果以下条件成立&#xff0c;我们说这个分组方案是合法的&#xff1a; 对于每个组 g &#xff0c;同一…...

uniapp map地图实现marker聚合点,并点击marker触发事件

1.uniapp官方文档说明 2.关键代码片段 // 仅调用初始化&#xff0c;才会触发 on.("markerClusterCreate", (e) > {})this._mapContext.initMarkerCluster({enableDefaultStyle: false, // 是否使用默认样式zoomOnClick: true, // 点击聚合的点&#xff0c;是否…...

【Mysql】Mysql中的B+树索引(六)

概述 从上一章节我们了解到InnoDB 的数据页都是由7个部分组成&#xff0c;然后各个数据页之间可以组成一个双向链表 &#xff0c;而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表 &#xff0c;每个数据页都会为存储在它里边儿的记录生成一个页目录 &#xff…...

【Dockerfile镜像实战】构建LNMP环境并运行Wordpress网站平台

这里写目录标题 一、项目背景和要求二、项目环境三、部署过程1&#xff09;创建自定义网络2&#xff09;部署NginxStep1 创建工作目录并上传相关软件包Step2 编写Dockerfile文件Step3 编写配置文件nginx.confStep4 创建nginx镜像Step5 运行容器 3&#xff09;部署MysqlStep1 创…...

【工具】利用ffmpeg将网页中的.m3u8视频文件转化为.mp4格式

目录 0.环境 1.背景 2.前提 3.详细描述 1&#xff09;在网站上找到你想下载的视频的.m3u8链接 2&#xff09;打开命令行&#xff0c;用ffmpeg命令进行转化 3&#xff09;过程&结果截图 0.环境 windows64 ffmpeg 1.背景 网页上有个.m3u8格式的视频文件&#xff0c;…...

Git简洁安装方式和使用方式【附安装包资源,Git基础操作,如拉取项目、上传代码、拉取代码】

文章目录 软件安装包安装步骤常用使用方式注意拉取项目上传代码或文件选择文件添加到本地Git存储库的缓存区将缓存区的更改提交到本地Git存储库&#xff0c;并设置提交信息将本地Git存储库的更新推送到远程Git仓库中上传示例拉取别人所上传的代码 常见问题上传代码失败&#xf…...

科研党省钱攻略:如何不花20元,自己搞定哨兵一号SLC数据下载(附ASF平台使用技巧)

科研数据获取新思路&#xff1a;零成本解锁哨兵一号SLC数据的完整方案 在科研工作中&#xff0c;数据获取往往是项目推进的第一道门槛。对于遥感领域的研究者来说&#xff0c;哨兵一号SLC数据因其高分辨率和丰富的应用场景而备受青睐&#xff0c;但获取这些数据的过程却常常令人…...

Windows系统HEIC图片预览终极指南:5分钟搞定iPhone照片查看

Windows系统HEIC图片预览终极指南&#xff1a;5分钟搞定iPhone照片查看 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails Windows系…...

IT运维新思路:自制UltraVNC SC单文件版,打造无痕、免安装的轻量级远程管理工具

IT运维轻量化革命&#xff1a;UltraVNC SC单文件版实战指南 在快节奏的企业IT运维场景中&#xff0c;传统远程管理工具往往面临安装繁琐、系统残留、权限受限等痛点。想象一下这样的场景&#xff1a;财务部门的电脑突然无法打印&#xff0c;而用户对技术操作一无所知&#xff1…...

终极免费方案:一键重置Navicat Premium试用期完整指南

终极免费方案&#xff1a;一键重置Navicat Premium试用期完整指南 【免费下载链接】navicat-premium-reset-trial Reset macOS Navicat Premium 15/16/17 app remaining trial days 项目地址: https://gitcode.com/gh_mirrors/na/navicat-premium-reset-trial 你是否曾经…...

软件过程的改进模型与实施步骤

软件过程的改进模型与实施步骤 在快速发展的信息技术领域&#xff0c;软件过程改进是提升开发效率、保证产品质量的关键手段。无论是传统的瀑布模型还是敏捷开发方法&#xff0c;都需要通过科学的改进模型来优化流程。常见的改进框架如CMMI&#xff08;能力成熟度模型集成&…...

从《Allergy》到《Queencard》:解码K-POP背后的女性成长叙事

1. 从《Allergy》到《Queencard》&#xff1a;一场关于女性自我认同的视觉叙事 第一次听到《Queencard》那魔性的副歌时&#xff0c;我和大多数人一样&#xff0c;以为这不过是又一首典型的K-POP洗脑神曲。直到偶然点开弹幕里提到的"连续剧式MV"&#xff0c;才意识到…...

解密WMM2025地磁模型:GeographicLib如何用12阶球谐函数重塑地球磁场计算

解密WMM2025地磁模型&#xff1a;GeographicLib如何用12阶球谐函数重塑地球磁场计算 【免费下载链接】geographiclib Main repository for GeographicLib 项目地址: https://gitcode.com/gh_mirrors/ge/geographiclib 你是否曾经好奇&#xff0c;为什么智能手机的指南针…...

反激电源设计避坑指南:从原理到实践的5个关键点

反激电源设计避坑指南&#xff1a;从原理到实践的5个关键点 在电源设计领域&#xff0c;反激式拓扑因其结构简单、成本低廉而广受欢迎&#xff0c;但看似简单的电路背后却暗藏诸多设计陷阱。许多工程师在首次接触反激电源时&#xff0c;往往会被其"低门槛"所迷惑&…...

Claude Skills到底解决了什么,没解决什么?从代码审查看AI技能模块化的真实代价

先说结论Skills通过文件级封装让AI在特定领域表现更稳定&#xff0c;但编写和维护成本不低&#xff0c;需要评估驱动开发避免文档膨胀代码审查这类任务适合用Skills标准化&#xff0c;但指令的自由度设定很关键&#xff0c;过细会僵化&#xff0c;过粗会失效Skills脚本需要自行…...

“怪奇物语物流假设”:当交通被转移到另一个世界

在《怪奇物语》中&#xff0c;颠倒世界作为现实世界的镜像维度&#xff0c;始终以一种危险而不可控的形式存在&#xff1a;它与现实重叠&#xff0c;却又充满腐败与入侵性。然而&#xff0c;如果暂时搁置这种叙事中的恐怖属性&#xff0c;我们可以提出一个反直觉的问题——如果…...