STM32基于HAL库RT-Thread Demo测试

STM32基于HAL库RT-Thread Demo测试


  • ✨在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开发板,也是可以直接烧录和运行来的。测试方法和仿真模拟是一样的。

🛠Env配置

  • 🌿按照官方提供的ENv安装教程安装完成并设置好后,在项目文件夹内右键通过ConEmu Here打开,输入menuconfig
  • 🌿bsp例程配置CPU核心数
  • 🌿其他外设功能开启设置,按个人需求配置,不同型号的项目例程外设有差异,目前官方所提供的芯片例程,外设配置内容并不是很完善。当然可以按照官方给出的教程创建《STM32 系列 BSP 制作教程


  • 🌿配置好待测试的外设功能后,记得保存配置选项。

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


  • 🔖Keil中编译和下载代码就不介绍了。
  • 📝测试例程:(rt-thread\bsp\stm32\stm32f103-blue-pill
c 复制代码
/*
 * 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输出通道:PB3
    while(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通道输出:
c 复制代码
[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 >
  • 📚测试工程
c 复制代码
链接:https://pan.baidu.com/s/1ujR9pf4UA7lqIidIk_BV9w 
提取码:x014
相关推荐
scan19 小时前
单片机串口接收状态机STM32
stm32·单片机·串口·51·串口接收
Mortal_hhh11 小时前
VScode的C/C++点击转到定义,不是跳转定义而是跳转声明怎么办?(内附详细做法)
ide·vscode·stm32·编辑器
Mr.谢尔比12 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理
LightningJie12 小时前
STM32中ARR(自动重装寄存器)为什么要减1
stm32·单片机·嵌入式硬件
鹿屿二向箔12 小时前
STM32外设之SPI的介绍
stm32
西瓜籽@13 小时前
STM32——毕设基于单片机的多功能节能窗控制系统
stm32·单片机·课程设计
极客小张16 小时前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩
m0_7393128719 小时前
【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)
stm32·单片机·嵌入式硬件
嵌入式小章19 小时前
基于STM32的实时时钟(RTC)教学
stm32·嵌入式硬件·实时音视频
徐嵌20 小时前
STM32项目---水质水位检测
stm32·单片机·嵌入式硬件