RT-Thread STM32F407 Robomaster开发板C型BSP说明

498 篇文章 34 订阅
订阅专栏
394 篇文章 2 订阅
订阅专栏

RT-Thread STM32F407 Robomaster开发板C型BSP说明

简介

本文档为 STM32F407 Robomaster 开发板C型 的 BSP (板级支持包) 说明。

主要内容如下:

  • 开发板资源介绍
  • BSP 快速上手
  • 进阶使用方法

通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。

开发板介绍

Robomaster 开发板C型 是大疆创新科技有限公司推出的一款基于 ARM Cortex-M4 内核的开发板。开发板主控芯片为 STM32F407IGH6TR,最高主频为 168Mhz,拥有丰富的扩展接口和通信接口。板载IMU传感器,可配合RoboMaster出品的M3508、 M2006直流无刷减速电机、UWB模块以及妙算等产品使用,亦可配合DJI飞控SDK使用。

开发板外观如下图所示:

开发板 C 型具有如下外设:

该开发板常用 板载资源 如下:

  • MCU:STM32F407IGH6TR, 主频 168MHz, 1024KB FLASH, 192KB RAM(含64KB CCM RAM)
  • 常用外设
    • 三色 LED:LED_R(PH12), LED_G(PH11), LED_B(PH11),
    • 按键:KEY(PA0)
    • 电压检测:ADC_BAT(PF10)
  • 常用接口:UART 接口、CAN 总线接口、PWM 接口
  • 调试接口:SWD

开发板的用户手册: RoboMaster 开发板 C 型用户手册.pdf

开发板更多详细信息请参考 RoboMaster官网: RoboMaster开发板 C 型

外设支持

本 BSP 目前对外设的支持情况如下:

板载外设支持情况备注
BMI088暂不支持六轴惯性测量单元(有软件包)
IST8310暂不支持三轴磁力计
片上外设支持情况备注
GPIO支持PA0, PA1… PH1 —> PIN: 0, 1…144
UART支持UART1(FinSH), UART3(DBUS), UART6
CAN支持CAN1, CAN2
PWM支持TIM1(CH1/2/3/4), TIM4(CH3), TIM5(CH1/2/3), TIM8(CH1/2/3)
SPI支持SPI2
IIC支持模拟IIC(SDA–>PF0, SCL–>PF1)

使用说明

使用说明分为如下两个章节:

  • 快速上手

    本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。

  • 进阶使用

    本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。

快速上手

本 BSP 为开发者提供 MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。

硬件连接

将准备好的 ST-Link/JLink/DapLink 与开发板连接,开发板上的调试接口为 MX1.25 4Pin。C板上没有电源指示灯,供电可以选用:调试接口的 3.3V 输入,micro USB 接口供电,XT30 电源输入。

编译下载

双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。

工程默认配置使用 ST-LINK 下载程序,点击下载按钮即可下载程序到开发板。

运行结果

下载程序成功之后,系统会自动运行,观察开发板上 LED 的运行效果,LED 会以蓝光进行周期性闪烁。

此 BSP 的 FinSH 默认使用串口 1 ( C 板外壳上标有 UART2 的 4Pin 接口),在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息:

 \ | /
- RT -     Thread Operating System
 / | \     4.1.1 build Jul 29 2022 23:31:38
 2006 - 2022 Copyright by RT-Thread team
msh >

终端工具推荐使用 MobaXterm 或 Xshell,均有免费的个人版本

进阶使用

此 BSP 默认只开启了 GPIO 和 UART1(丝印为 UART2 4pin 接口) 的功能,更多高级功能需要利用 ENV 工具对 BSP 进行配置,步骤如下:

  1. 在 BSP 下打开 env 工具。

  2. 输入 menuconfig 命令配置工程,配置好之后保存退出。

  3. 输入 pkgs --update 命令更新软件包。

  4. 输入 scons --target=mdk4/mdk5/iar 命令重新生成工程。

本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](…/docs/STM32 系列 BSP 外设驱动使用教程. md)。

注意事项

  • 部分外设需通过 XT30 或 USB 接口供电才能正常使用,包括 CAN、舵机5V供电、IMU恒温电路等
  • 目前 scons 支持生成 cmake 配置文件,可以使用 CLion 进行 C板 的程序开发,推荐同学们尝试。详细步骤可参见: 在 Clion 中调试 rt-thread 工程,C板的 openOCD 配置文件推荐选用 stm32f4discovery.cfg ,并将该配置文件的最后一行改为 reset_config none

示例代码

…\components\drivers\ipc\dataqueue.c

/*
 * Copyright (c) 2006-2023, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2012-09-30     Bernard      first version.
 * 2016-10-31     armink       fix some resume push and pop thread bugs
 * 2023-09-15     xqyjlj       perf rt_hw_interrupt_disable/enable
 */

#include <rthw.h>
#include <rtdevice.h>

#define DATAQUEUE_MAGIC  0xbead0e0e

struct rt_data_item
{
    const void *data_ptr;
    rt_size_t data_size;
};

/**
 * @brief    This function will initialize the data queue. Calling this function will
 *           initialize the data queue control block and set the notification callback function.
 *
 * @param    queue is a pointer to the data queue object.
 *
 * @param    size is the maximum number of data in the data queue.
 *
 * @param    lwm is low water mark.
 *           When the number of data in the data queue is less than this value, this function will
 *           wake up the thread waiting for write data.
 *
 * @param    evt_notify is the notification callback function.
 *
 * @return   Return the operation status. When the return value is RT_EOK, the initialization is successful.
 *           When the return value is -RT_ENOMEM, it means insufficient memory allocation failed.
 */
rt_err_t
rt_data_queue_init(struct rt_data_queue *queue,
                   rt_uint16_t size,
                   rt_uint16_t lwm,
                   void (*evt_notify)(struct rt_data_queue *queue, rt_uint32_t event))
{
    RT_ASSERT(queue != RT_NULL);
    RT_ASSERT(size > 0);

    queue->evt_notify = evt_notify;

    queue->magic = DATAQUEUE_MAGIC;
    queue->size = size;
    queue->lwm = lwm;

    queue->get_index = 0;
    queue->put_index = 0;
    queue->is_empty = 1;
    queue->is_full = 0;

    rt_spin_lock_init(&(queue->spinlock));

    rt_list_init(&(queue->suspended_push_list));
    rt_list_init(&(queue->suspended_pop_list));

    queue->queue = (struct rt_data_item *)rt_malloc(sizeof(struct rt_data_item) * size);
    if (queue->queue == RT_NULL)
    {
        return -RT_ENOMEM;
    }

    return RT_EOK;
}
RTM_EXPORT(rt_data_queue_init);

/**
 * @brief    This function will write data to the data queue. If the data queue is full,
 *           the thread will suspend for the specified amount of time.
 *
 * @param    queue is a pointer to the data queue object.
 * .
 * @param    data_ptr is the buffer pointer of the data to be written.
 *
 * @param    size is the size in bytes of the data to be written.
 *
 * @param    timeout is the waiting time.
 *
 * @return   Return the operation status. When the return value is RT_EOK, the operation is successful.
 *           When the return value is -RT_ETIMEOUT, it means the specified time out.
 */
rt_err_t rt_data_queue_push(struct rt_data_queue *queue,
                            const void *data_ptr,
                            rt_size_t data_size,
                            rt_int32_t timeout)
{
    rt_base_t level;
    rt_thread_t thread;
    rt_err_t    result;

    RT_ASSERT(queue != RT_NULL);
    RT_ASSERT(queue->magic == DATAQUEUE_MAGIC);

    /* current context checking */
    RT_DEBUG_SCHEDULER_AVAILABLE(timeout != 0);

    result = RT_EOK;
    thread = rt_thread_self();

    level = rt_spin_lock_irqsave(&(queue->spinlock));
    while (queue->is_full)
    {
        /* queue is full */
        if (timeout == 0)
        {
            result = -RT_ETIMEOUT;

            goto __exit;
        }

        /* reset thread error number */
        thread->error = RT_EOK;

        /* suspend thread on the push list */
        rt_thread_suspend_with_flag(thread, RT_UNINTERRUPTIBLE);
        rt_list_insert_before(&(queue->suspended_push_list), &(thread->tlist));
        /* start timer */
        if (timeout > 0)
        {
            /* reset the timeout of thread timer and start it */
            rt_timer_control(&(thread->thread_timer),
                             RT_TIMER_CTRL_SET_TIME,
                             &timeout);
            rt_timer_start(&(thread->thread_timer));
        }

        /* enable interrupt */
        rt_spin_unlock_irqrestore(&(queue->spinlock), level);

        /* do schedule */
        rt_schedule();

        /* thread is waked up */
        result = thread->error;
        level = rt_spin_lock_irqsave(&(queue->spinlock));
        if (result != RT_EOK) goto __exit;
    }

    queue->queue[queue->put_index].data_ptr  = data_ptr;
    queue->queue[queue->put_index].data_size = data_size;
    queue->put_index += 1;
    if (queue->put_index == queue->size)
    {
        queue->put_index = 0;
    }
    queue->is_empty = 0;
    if (queue->put_index == queue->get_index)
    {
        queue->is_full = 1;
    }

    /* there is at least one thread in suspended list */
    if (!rt_list_isempty(&(queue->suspended_pop_list)))
    {
        /* get thread entry */
        thread = rt_list_entry(queue->suspended_pop_list.next,
                               struct rt_thread,
                               tlist);

        /* resume it */
        rt_thread_resume(thread);
        rt_spin_unlock_irqrestore(&(queue->spinlock), level);

        /* perform a schedule */
        rt_schedule();

        return result;
    }

__exit:
    rt_spin_unlock_irqrestore(&(queue->spinlock), level);
    if ((result == RT_EOK) && queue->evt_notify != RT_NULL)
    {
        queue->evt_notify(queue, RT_DATAQUEUE_EVENT_PUSH);
    }

    return result;
}
RTM_EXPORT(rt_data_queue_push);

源码下载

…\bsp\stm32\stm32f407-robomaster-c\project.uvproj

在这里插入图片描述


RT-Thread STM32F407 Robomaster开发板C型BSP说明 源码下载


维护人:

  • 华为奋斗者精神, 邮箱: 1992152446@qq.com
探索RoboMaster开发板C语言示例项目:打造您的智能机器人未来
gitblog_00052的博客
03-27 497
探索RoboMaster开发板C语言示例项目:打造您的智能机器人未来 Development-Board-C-Examples 项目地址: https://gitcode.com/gh_mirrors/de/Development-Board-C-Example...
STM32 RTT学习笔记(一)RT移植到STM32F407VET6
12-02
本文将详细介绍如何将RT-Thread操作系统移植到STM32F407VET6芯片上,以帮助初学者快速掌握RT-Thread的移植流程。 #### 二、移植准备 在开始移植工作之前,我们需要准备好必要的硬件和软件环境: - **硬件**:基于...
RoboMaster开发板C嵌入式软件教程文档.pdf
01-05
RoboMaster开发板C嵌入式软件教程文档.pdf
Robomaster大疆遥控器DT7&DR16介绍与C开发板通信教程
最新发布
2302_80641606的博客
08-30 1758
DR16接收机输出的信号为标准的DBUS协议数据,当遥控器与接收机建立连接 后,接收机每隔14ms通过DBUS发送一帧18字节数据。数据内容包括左右两个摇杆的数据,左右上角的两个开关拨杆,以及左侧上方的云台俯仰控制拨轮。
大疆RoboMaster 开发板 C 用户手册
05-04
RoboMaster 开发板 C 采用高性能的 STM32主控芯片,支持宽电压输入,集成专用的扩展接口、通 信接口以及高精度IMU传感器,可配合 RoboMaster 产品或者其他配件使用。开发板具备防反接、防 过压等保护功能;结构紧凑,集成度高,配套例程丰富,可广泛应用在机器人比赛、科研教育、自动 化设备等领域。
Robomaster C开发板例程源码
07-12
Robomaster C开发板例程源码
Robomaster电控组小白的学习经验分享(一)——用大疆C开发板控制GM6020电机转动到既定角度
热门推荐
weixin_73037889的博客
05-16 1万+
我们可以从Robomaster官网上下载C板的用户使用手册,在编写代码的时候用户开发手册往往非常重要。引脚配置、IO说明等信息都可以从用户手册上获得。
RT-ThreadSTM32F411开发板BSP开发指南
资源摘要信息:"rt-thread-code-stm32f411-atk-nano.rar,stm32f411-atk-nano开发板" 在嵌入式系统领域,RT-Thread 是一款流行的实时操作系统(RTOS),它提供了模块化和可剪裁的特性,适用于不同的硬件平台。当提到...
RT-ThreadSTM32F411开发板的资源使用与配置指南
资源摘要信息:"本资源是关于使用RT-Thread操作系统在STM32F411 WeAct BlackPill开发板上运行的教程开发资源包。STM32F411 BlackPill是一款基于ARM Cortex-M4内核的开发板,由WeAct公司推出,具有较高的主频和丰富...
stm32f407-my-bsp1.rar
04-11
在本项目中,"stm32f407-my-bsp1.rar"是一个包含了STM32F407移植RT Thread 4.0.3系统基础工程的压缩包文件,用户可以基于这个工程进行自己的开发工作。 1. **RT Thread系统移植**: RT Thread操作系统被移植到STM...
robomaster开发板使用手册
10-22
robomaster开发板使用手册,匹配A开发板,引脚配置和IO功能等注意事项
robomaster c开发板 标准库工程模板
10-10
虽然robomaster c板的芯片是STM32F407 但是由于外部晶振频率更高因此在移植工程时若时钟没有配置正确则会出现遥控器接收数据错误等奇怪的问题,本人在写遥控器程序时因为这个问题自闭了一个星期才找到问题 。。。。。
robomaster的c板教程
11-14
c板教程
RT-thread系统移植到stm32.zip
09-02
RT-thread提供了针对STM32的板级支持包(BSP),包含了针对特定STM32芯片的初始化代码和驱动程序。将这些代码导入到项目中,并根据STM32CubeMX的配置进行适当修改,以适应STM32L031K6T6。 在RT-thread源代码中,...
RoboMaster大疆开发板C入门学习(1)配置加流水灯(循环亮灯
m0_74231899的博客
10-29 4304
大疆RM开发c版入门,流水灯实验,点亮三色LED灯HAL_GPIO_WritePin,HAL_Delay函数的入门使用cubemx简单配置
基于RoboMasterC开发板RT-Thread使用分享(二)
rtthreadiotos的博客
01-04 712
这次继续填坑,本次我们将介绍PWM功能的使用,实现呼吸灯的功能。那么接下来就直接开始我们的实践部分。创建工程在上篇文章中我是使用基于芯片创建的,我原本想着不通过BSP文件在教程中教大家一步一步的通过Kconfig+CubeMX配置出可以驱动整个开发板所有外设的工程的。在社区前辈的提醒后才知道通过基于芯片创建工程是没有办法Kconfig配置的。因此我在之后的教程中我会基于RT-Thread提供的BS...
写文章

热门文章

  • Gowin FPGA 系列产品编程配置手册 8350
  • SFF-8485-串行GPIO(SGPIO)总线规范 8174
  • 全志F1C200S ARM926EJ-S内核处理器-开发板及用户使用说明 7912
  • 服务器的CPLD的上下电控制时序及源代码实现 7582
  • 电脑主板SuperIO IT8786E/IT8728F实现看门狗(Watch Dog)功能及操作EC的源码 6945

分类专栏

  • ARM MCU 490篇
  • Python 62篇
  • Linux 498篇
  • MCU C51 394篇
  • BIOS/BMC 12篇
  • QT5 25篇
  • 摄影 1篇

最新评论

  • D2000 PBF 固件编译打包手册 (V1.0.5)技术文档

    拔萝柏: 想问一下D2000 的PBF固件 打包文件 目录如何获取啊

  • RT-Thread 百问网STM32F103 Mini开发板BSP说明

    dongxingshiyige: 有没有制板文件呀

  • 嵌入式Linux应用开发-面向对象-分层-分离及总线驱动模型①驱动进化之路

    wys0910: 不得不说韦老师讲的非常通透了

  • 电脑主板SuperIO IT8786E/IT8728F实现看门狗(Watch Dog)功能及操作EC的源码

    Veason_Ren: 我也可以开发

  • RT-Thread STM32F103 硬石科技YS-F1Pro开发板BSP说明

    weixin_43877055 化了: 大神,有偿求硬石YS-H7Pro ,RT-Thread的bsp固件,做好上传到 RT-Thread Studio工具中.

大家在看

  • 【数据结构与算法】之有序链表去重(不保留重复元素) 746
  • WEBUPLOADER上传文件夹的三种解决方案 771
  • B站协议登录到实现各种功能完整代码(专栏总结) 1121
  • 深度解析The Open Group 2024年度大会:解码数字化转型与可持续发展的未来之路
  • WANGEDITOR从WORD复制粘贴公式 755

最新文章

  • RT-Thread 软件包-软件包分类-外设-MAX17048①
  • RT-Thread 软件包-软件包分类-外设-easyblink①
  • RT-Thread 软件包-软件包分类-外设-pcf8574①
2023年519篇
2022年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华为奋斗者精神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家商场导视美陈澳门玻璃钢抽象雕塑玻璃钢铜雕塑哪家好雕塑玻璃钢多少钱一斤玻璃钢雕塑保养说明书云南玻璃钢雕塑厂家直销沈阳步行街玻璃钢雕塑联系方式玻璃钢造型雕塑工厂商场森林美陈深圳江西玻璃钢人物雕塑厂家连云港玻璃钢景观雕塑设计通用玻璃钢雕塑摆件山西玻璃钢彩绘雕塑厂家彭州玻璃钢动物雕塑邵阳公园玻璃钢雕塑生产厂家徐汇区玻璃钢雕塑推荐厂家公园动画玻璃钢雕塑江苏商场创意商业美陈高淳元旦商场美陈大型玻璃钢雕塑哪家有名玻璃钢商场美陈批发价格商丘玻璃钢雕塑定制厂家合肥玻璃钢雕塑定做公司浙江玻璃钢雕塑上海室内商场美陈价格玻璃钢户多雕塑米泉玻璃钢雕塑平凉彩色玻璃钢雕塑订做上海镜面玻璃钢雕塑来电咨询合肥江门玻璃钢卡通雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化