假期期間打算開一個坑,和大家分享下基于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-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}
最終效果為紅、綠、藍三個燈依次亮滅。
本次分享就到此為止,感謝大家的觀看,我也會盡力更新這個系列的!
————————————————
版權聲明:
本文為RT-Thread論壇用戶「goldengrandpa」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:
https://club.rt-thread.org/ask/article/09dffc578f32d85d.html
你可以添加微信:rtthread2020 為好友,注明:公司+姓名,拉進RT-Thread官方微信交流群!
點擊閱讀原文回看開發者大會
-
RT-Thread
+關注
關注
31文章
1305瀏覽量
40383
原文標題:基于RoboMasterC型開發板的RT-Thread使用分享(一)
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論