基于RoboMasterC型开发板的RT-Thread使用分享(一)

描述

假期期间打算开一个坑,和大家分享下基于RoboMaster开发板C型上RT-Thread使用,本系列文章计划是给刚接触STM32和RT-Thread的同学看的,讲的会稍微基础一点。

硬件与开发环境介绍


开发板:

本次选用的开发板是大疆创新的RoboMaster开发板C型,其上面采用高性能的STM32F407IG芯片。开发板C型具有如下外设:

用户自定义LED、5V接口、BOOT配置接口、micro USB接口、SWD接口、按键、可配置I/O接口、UART接口、CAN总线接口、PWM接口、DBUS接口、数字摄像头FPC接口、蜂鸣器、电压检测ADC、六轴惯性测量单元和磁力计。

这个也是我可以找到体积最小的板载陀螺仪的开发板,常用的接口也都有,很适合用在控制上。

RT-Thread

软件环境:

IDE:RT-Thread Studio

RT-Thread:V4.1.0

STM32CubeMx:V6.7.0

STM32CubeProgrammer:V2.11.0

STM32CubeMonitor:V1.4.0

我平时开发常用的IDE实际上是Jetbrains家的Clion但是为了教程的通用性就选择了免费的RT-Thread Studio。

教程第一步:点灯

RT-Thread

本次我们选择UART1作为我们的控制台串口,根据原理图我们得知发送脚为PA9,接收脚为PB7。

因此我们创建项目的选择如下

RT-Thread

之后我们需要在CubeMX Setting中进行时钟树和引脚的配置。

在 System Core 下选择 RCC 选项,在 RCC mode and Configuration 中的 High Speed

Clock(HSE)下选择 Crystal/Ceramic Resonator

RT-Thread

之后进行时钟树的配置,我们需要修改红框内的数据如下图

RT-Thread

配置的根据如下:

Input frequency这个是根据板载的外部高速晶振来设置的,具体板子具体设置。

PLL的信号来源我们这里选择HSE(外部高速时钟),不选择HSI(内部高速时钟)是由于HSI时钟信号是由RC振荡电路产生的精度相对较差,而HSE时钟信号是由石英晶体产生精度相对而言更高,所以选择HSE。

后面灰色框内的M、N、P是PLL(锁相环)的分频倍频参数,将我们输入的HSE或者HSI时钟信号进行分频、倍频得到更高的时钟频率。这里我们配置的原因是因为我们希望SYSCLK(系统时钟)的频率达到STM32F407可到最高的168MHz。

系统时钟可以由三种时钟源来驱动

  • HSI振荡器时钟

  • HSE振荡器时钟

  • Main PLL时钟

 

而HSI和HSE在此处都不能到达168MHz因此我们这里我们这里选择通过PLL倍频后驱动SYSCLK。

因此PLL的三个参数也是通过凑出倍频后得到168MHz计算得到的。

最后我们修改的两处为配置AHB频率的预分频器,这里我们需要根据STM32F4xx中文参考手册来配置。根据下图我们可知APB1的最大频率为42MHz,APB2的最大频率为84MHz,因此我们的分频值分别设置为4和2来匹配最大频率。

RT-Thread

后面我们点击顶部的 Pinout & Configuartion,选择 SYS,在 Debug 下拉框中选择 Serial Wire。

RT-Thread

随后配置命令行串口所需的UART1引脚,配置哪一个引脚需要根据开发板原理图来设置,用于STM32许多引脚都有复用功能的,所以哪个引脚有什么功能是需要根据硬件来看的。原来创建工程的时候我们就看了原理图发送脚为PA9,接收脚为PB7,所以这里我们就直接设置。

RT-Thread

由于我们这里要进行点灯所以我们来设置一下GPIO。根据原理图我们知道LED_B、LED_G、LED_R引脚分别为PH10、PH11、PH12,我们在CubeMX中进行配置。

RT-Thread

把这三个引脚设置为GPIO_Output。

RT-Thread

随后点击GENERATE CODE生成代码

根据原理图我们可以发现三个引脚不处于高电平的输出状态,那么三极管的控制端将会被下拉电阻拉为低电平,当 LED_B、LED_G 和 LED_R 处于高电平的输出状态,通过原理图中 1kΩ与 10kΩ的分压后,三极管的基极控制端将变成高电平,故而三级管的控制端电压将变成高电平。因此引脚为高电平时,LED灯亮。

RT-Thread

在main函数中编写如下代码进行点灯。

 1/*
 2 * Copyright (c) 2006-2022, RT-Thread Development Team
 3 *
 4 * SPDX-License-Identifier: Apache-2.0
 5 *
 6 * Change Logs:
 7 * Date           Author       Notes
 8 * 2022-12-29     RT-Thread    first version
 9 */
10#include 
11#include 
12#include 
13/*  定义LED引脚     */
14#ifndef LED_B_PIN
15    #define LED_B_PIN   GET_PIN(H, 10)
16#endif
17#ifndef LED_G_PIN
18    #define LED_G_PIN   GET_PIN(H, 11)
19#endif
20#ifndef LED_R_PIN
21    #define LED_R_PIN   GET_PIN(H, 12)
22#endif
23int main(void)
24{
25    /* 设置LED引脚为输出模式   */
26    rt_pin_mode(LED_B_PIN,PIN_MODE_OUTPUT);
27    rt_pin_mode(LED_G_PIN,PIN_MODE_OUTPUT);
28    rt_pin_mode(LED_R_PIN,PIN_MODE_OUTPUT);
29    int count=1;
30    while(count++)
31    {
32        rt_pin_write(LED_B_PIN, PIN_HIGH);
33        rt_thread_mdelay(500);
34        rt_pin_write(LED_B_PIN, PIN_LOW);
35        rt_pin_write(LED_G_PIN, PIN_HIGH);
36        rt_thread_mdelay(500);
37        rt_pin_write(LED_G_PIN, PIN_LOW);
38        rt_pin_write(LED_R_PIN, PIN_HIGH);
39        rt_thread_mdelay(500);
40        rt_pin_write(LED_R_PIN, PIN_LOW);
41    }
42    return RT_EOK;
43}

最终效果为红、绿、蓝三个灯依次亮灭。

RT-Thread

本次分享就到此为止,感谢大家的观看,我也会尽力更新这个系列的!

————————————————

版权声明:

本文为RT-Thread论坛用户「goldengrandpa」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

https://club.rt-thread.org/ask/article/09dffc578f32d85d.html


你可以添加微信:rtthread2020 为好友,注明:公司+姓名,拉进RT-Thread官方微信交流群!

RT-Thread

点击阅读原文回看开发者大会


原文标题:基于RoboMasterC型开发板的RT-Thread使用分享(一)

文章出处:【微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分