sunsili 发表于 2023-1-3 22:24:33

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

基于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 StudioRT-Thread:V4.1.0STM32CubeMx:V6.7.0STM32CubeProgrammer:V2.11.0STM32CubeMonitor:V1.4.0我平时开发常用的IDE实际上是Jetbrains家的Clion但是为了教程的通用性就选择了免费的RT-Thread Studio。教程第一步:点灯本次我们选择UART1作为我们的控制台串口,根据原理图我们得知发送脚为PA9,接收脚为PB7。因此我们创建项目的选择如下之后我们需要在CubeMX Setting中进行时钟树和引脚的配置。在 System Core 下选择 RCC 选项,在 RCC mode and Configuration 中的 High SpeedClock(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

页: [1]
查看完整版本: 基于RoboMasterC型开发板的RT-Thread使用分享(一)