假期期间打算开一个坑,和大家分享下基于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
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论坛用户「goldengrandpa」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://club.rt-thread.org/ask/article/09dffc578f32d85d.html
你可以添加微信:rtthread2020 为好友,注明:公司+姓名,拉进RT-Thread官方微信交流群!
点击阅读原文回看开发者大会
原文标题:基于RoboMasterC型开发板的RT-Thread使用分享(一)
文章出处:【微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !