谷动谷力

 找回密码
 立即注册
查看: 1332|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
发表于 2023-1-3 22:24:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
基于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、六轴惯性测量单元和磁力计。
这个也是我可以找到体积最小的板载陀螺仪的开发板,常用的接口也都有,很适合用在控制上。
软件环境:
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。
教程第一步:点灯
本次我们选择UART1作为我们的控制台串口,根据原理图我们得知发送脚为PA9,接收脚为PB7。
因此我们创建项目的选择如下
之后我们需要在CubeMX Setting中进行时钟树和引脚的配置。
在 System Core 下选择 RCC 选项,在 RCC mode and Configuration 中的 High Speed
Clock(HSE)下选择 Crystal/Ceramic Resonator
之后进行时钟树的配置,我们需要修改红框内的数据如下图
配置的根据如下:
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来匹配最大频率。
后面我们点击顶部的 Pinout & Configuartion,选择 SYS,在 Debug 下拉框中选择 Serial Wire。
随后配置命令行串口所需的UART1引脚,配置哪一个引脚需要根据开发板原理图来设置,用于STM32许多引脚都有复用功能的,所以哪个引脚有什么功能是需要根据硬件来看的。原来创建工程的时候我们就看了原理图发送脚为PA9,接收脚为PB7,所以这里我们就直接设置。
由于我们这里要进行点灯所以我们来设置一下GPIO。根据原理图我们知道LED_B、LED_G、LED_R引脚分别为PH10、PH11、PH12,我们在CubeMX中进行配置。
把这三个引脚设置为GPIO_Output。
随后点击GENERATE CODE生成代码
根据原理图我们可以发现三个引脚不处于高电平的输出状态,那么三极管的控制端将会被下拉电阻拉为低电平,当 LED_B、LED_G 和 LED_R 处于高电平的输出状态,通过原理图中 1kΩ与 10kΩ的分压后,三极管的基极控制端将变成高电平,故而三级管的控制端电压将变成高电平。因此引脚为高电平时,LED灯亮。
在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 <rtthread.h>
11#include <rtdevice.h>
12#include <board.h>
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论坛用户「goldengrandpa」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://club.rt-thread.org/ask/article/09dffc578f32d85d.html


+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-5-17 14:04 , Processed in 0.085298 second(s), 44 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表