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

发布者:Serendipitous33最新更新时间:2024-06-20 来源: elecfans关键字:RT-Thread  STM32 手机看文章 扫描二维码
随时随地手机看文章

硬件与开发环境介绍


开发板:

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

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

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

450571c4-8cae-11ed-bfe3-dac502259ad0.png

软件环境:

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。

教程第一步:点灯

45870d2e-8cae-11ed-bfe3-dac502259ad0.png

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

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

45ce0652-8cae-11ed-bfe3-dac502259ad0.png

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

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

Clock(HSE)下选择 Crystal/Ceramic Resonator

45dd968a-8cae-11ed-bfe3-dac502259ad0.png

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

45eac83c-8cae-11ed-bfe3-dac502259ad0.png

配置的根据如下:

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来匹配最大频率。

45fa0ea0-8cae-11ed-bfe3-dac502259ad0.png

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

46094302-8cae-11ed-bfe3-dac502259ad0.png

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

4619801e-8cae-11ed-bfe3-dac502259ad0.png

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

46305d16-8cae-11ed-bfe3-dac502259ad0.png

把这三个引脚设置为GPIO_Output。

4641bf02-8cae-11ed-bfe3-dac502259ad0.png

随后点击GENERATE CODE生成代码

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

465a9d24-8cae-11ed-bfe3-dac502259ad0.png

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

 1/*

 2*Copyright(c)2006-2022,RT-ThreadDevelopmentTeam

 3*

 4*SPDX-License-Identifier:Apache-2.0

 5*

 6*ChangeLogs:

 7*DateAuthorNotes

 8*2022-12-29RT-Threadfirstversion

 9*/

10#include

11#include

12#include

13/*定义LED引脚*/

14#ifndefLED_B_PIN

15#defineLED_B_PINGET_PIN(H,10)

16#endif

17#ifndefLED_G_PIN

18#defineLED_G_PINGET_PIN(H,11)

19#endif

20#ifndefLED_R_PIN

21#defineLED_R_PINGET_PIN(H,12)

22#endif

23intmain(void)

24{

25/*设置LED引脚为输出模式*/

26rt_pin_mode(LED_B_PIN,PIN_MODE_OUTPUT);

27rt_pin_mode(LED_G_PIN,PIN_MODE_OUTPUT);

28rt_pin_mode(LED_R_PIN,PIN_MODE_OUTPUT);

29intcount=1;

30while(count++)

31{

32rt_pin_write(LED_B_PIN,PIN_HIGH);

33rt_thread_mdelay(500);

34rt_pin_write(LED_B_PIN,PIN_LOW);

35rt_pin_write(LED_G_PIN,PIN_HIGH);

36rt_thread_mdelay(500);

37rt_pin_write(LED_G_PIN,PIN_LOW);

38rt_pin_write(LED_R_PIN,PIN_HIGH);

39rt_thread_mdelay(500);

40rt_pin_write(LED_R_PIN,PIN_LOW);

41}

42returnRT_EOK;

43}


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

46806d42-8cae-11ed-bfe3-dac502259ad0.png


关键字:RT-Thread  STM32 引用地址:基于RoboMasterC型开发板的RT-Thread使用分享(一)

上一篇:智能汽车监控系统电路设计
下一篇:基于FPGA的嵌入式运动控制器设计方案

推荐阅读最新更新时间:2024-11-06 20:58

STM32启动文件的选择及宏定义 及芯片型号更改 IAP总结
startup_stm32f10x_cl.s 互联型的器件,STM32F105xx,STM32F107xx startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_hd_vl.s 大容量的STM32F100xx startup_stm32f10x_ld.s 小容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_ld_vl.s 小容量的STM32F100xx startup_stm32f10x_md.s 中容量的STM32F101xx,STM32F102xx,STM3
[单片机]
制作一个STM32下载器的过程
本文介绍制作一个STM32下载器的过程。 原理图 STLINK-V2下载器电路原理图如下。 上图中,H5接口是固件下载口。H4接口是STLINK-V2下载口(实现下载功能的接口 T_JTCK就是SWCLK, T_JTMS就是 SWDIO)。其他都是测试接口。 制作过程 首先我们焊接完的板子是不能用的,需要往里面下载固件。前提是你手头有一块好的ST-LinkV2下载器,不然就白搞了。 使用好的STLINK-V2下载器给我们自己制作的STLINK-V2板子下载固件,将STLINK-V2下载器连接角与板子上的H5固件下载接口对应连接,再将STLINK-V2连接到电脑, 安装ST的ST-LINK Utility软件,使用STM
[单片机]
制作一个<font color='red'>STM32</font>下载器的过程
STM32学习笔记-ADC采集-串口2发送至上位机
串口2的配置(一根杜邦线不行纠结了半天) void USART2_Initialise( u32 bound ) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); /* Enable the USART2 Pins Software Remapping */ RCC_APB2
[单片机]
<font color='red'>STM32</font>学习笔记-ADC采集-串口2发送至上位机
STM32-定时器系统原理
STM32的定时器概述 STM32F1有TIME1和TIME8 等高级定时器,也有TIME2~TIME5等通用定时器,还有TIME6和TIME7等基本定时器。 关于高级定时器、通用定时器、基本定时器的区别: 基本定时器:具有最基本的计时功能,与通用和高级定时器的16位自动重装载计数器不同,他的计数器是一个累加计数器!基本定时器独有一个其他定时器没有的DAC的同步电路! 通用定时器:能满足大部分使用需求的定时器。 高级定时器:高级的骚操作比较多的定时器,但是一般不常用到,用到的时候可以再根据参考手册深入研究。 我们一般常用到的就是通用定时器。 通用定时器 通用定时器简介 主要功能 16位向上、向下、向上/向下
[单片机]
STM32-定时器系统原理
STM32 软件触发 DAC
/* DAC.c 用于DAC的初始化和配置 */ #include includes.h void DAC_Config(void); void DAC_Task(void* prg); void DAC_Task(void* prg) { DAC_SetChannel1Data(DAC_Align_12b_R,1028); //设置数据右对齐,转换值设置为1028 DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE); //软件触发通道1 开始转换 DAC_SetChannel2Data(DAC_Align_12b_R,2047)
[单片机]
STM32学习笔记9——stm32L072 SD卡程序移植记录
项目使用stm32L072,需要将采样的数据保存到SD卡中。SD卡程序参考ST公司的官方STM32L073Z_EVAL开发板的例程。需要修改的地方如下: 1、 修改stm32L073z_eval.h中SPI的管脚配置、AF配置; 2、 官方开发板使用了一片STM32L152CCT6扩展了STM32L073的IO口,并通过I2C接口连接。在SD卡例程中,扩展IO口用于检测SD卡是否连接好。我们的板子中没有设计SD卡硬件检测的功能,所以在stm32L073z_eval_sd.c的BSP_SD_Init函数中将有关SD卡detect的代码屏蔽,只保留调用SD_IO_Init函数和return。 3、 在stm320L0xx_
[单片机]
基于主控STM32控制系统的硬件设计喷绘系统设计
0 引言 由于喷绘机喷绘过程中采用的是压电喷头工作原理,为保证喷绘出图像清晰细腻,喷绘机需要在同一温度下提供稳定的驱动电压对压电晶体进行控制。如何在精准的条件下根据室内温度实时、快速、方便地更改驱动电压和配置数据值得研究。 1 系统设计理念 喷头的驱动电压VDD2(t)取决于喷头容积电压Vrank、基于不同厂家不同颜色的油墨粘滞度而提供每色油墨与标准油墨的修正值Voffset电压、不同颜色的油墨在不同温度下需要的驱动电压补偿值Vdiff(t),即VDD2(t)=Vrank+Voffset+Vdiff(t)。不同颜色的油墨在不同的温度下驱动电压的补偿值Vdiff(t),称之为T-V数据。 不同厂家油墨温压数据不同,厂家会根据
[单片机]
基于主控<font color='red'>STM32</font>控制系统的硬件设计喷绘系统设计
STM32的I2S接口只支持单工模式,使用时要小心
刚开始设计硬件的时候没仔细看手册,想当然,把I2S_SD连接到PCM CODEC输入,MISO连接到CODEC输出,结果做软件的时候遇到麻烦才回头看手册,傻眼了,STM32的I2S数据线只有一根I2S_SD,要么输入,要么输出,跟全双工CODEC没法通讯,这一点跟NXP LPC和比是个很大的败笔。 解决方法(PCM接口模式):将STM32工作在SPI SLAVE方式,MOSI接CODEC输出,MISO接CODEC输入,SCK接BCLK,任意一个PIO作为中断输入与FRAME SYNC连接。 如果想使用DMA,需要将帧频率(采样频率)设置为BCLK的字长倍,比如16bit字长,采样频率8K,则Fsync设置为8K*16=12
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved