【STM32】两轮自平衡小车学习笔记1
文章目錄
- 前言
- 一、安裝環境
- 二、使用步驟
- 1.STM32CubeMX新建工程
- 2.根據需求改STM32CubeMX配置
- 3.按鍵消抖代碼編寫
- 4.燒錄代碼
- 三、遇到的問題
- 四、編程環境配置
- 代碼自動補全
- 代碼格式化
- 軟件及資料
- 總結
前言
開始學習基于STM32CubeMX和Keil-MDK的兩輪自平衡小車,之前做物理科技創新競賽中有用到STM32系列,所以還是比較熟悉,但是之前做項目都是直接對用相關的硬件例程進行修改,沒有系統的教學過,也沒有用到STM32CubeMX這個軟件,所以還是有好多東西得學習
提示:以下是本篇文章正文內容,下面案例可供參考
一、安裝環境
首先的工作是配置編程環境,注意的是安裝路徑不要有中文,安裝STM32CubeMX需要電腦先有JAVA環境。
二、使用步驟
1.STM32CubeMX新建工程
首先打開STM32CubeMX,點擊
ACCESS TO MCU SELECTOR
稍等片刻進入設置界面
先在左上角①處輸入芯片型號,我們這里用的是STM32F103C8Tx(輸入F103C8也能找到)
然后右側就會出現我們所要的芯片,雙擊②所選范圍進入下一階段
先選擇 Pinout & Configuration→System Core
其中的SYS和RCC如圖配置
然后選擇時鐘配置Clock Configuration
②中輸入72或者64(我們這里輸入64),回車,跳出的界面選OK
進入Project Manager的Project,注意要將③中的Toolchain/IDE換成MDK-ARM(這個很重要,一開始沒有注意到這點,導致創建的文件夾里都沒有需要的工程文件)
最后選擇Code Generator,把Genearted files的第一個選擇項選上,然后點擊右上角的GENERATE CODE 就新建好工程了
點擊出現的Open Folder打開目標文件、Open Project則打開工程文件(已安裝keil)
2.根據需求改STM32CubeMX配置
根據項目的需求在 Pinout & Configuration這里點擊PA8選擇GPIO_Input,右鍵選擇Enter User Label改名字為Button
然后左邊點擊GPIO將下面的狀態改成如圖,點擊右上角的GENERATE CODE 就配置完成,然后進入工程文件
3.按鍵消抖代碼編寫
STM32CubeMX 已經默認設置 Systick 為 1ms 中斷,那么我們可以直接利用起來。打開 MDK-ARM 工程,按下組合鍵 Ctrl+N(按住 Ctrl 鍵再按 N 鍵),新建一個文件,再按下組合鍵 Ctrl+S,文件名改為 button.c,保存到 MiaowLabs-DEMO 的 Src 文件夾里。來到這里,我們雖然新建了button.c 源文件,但是還沒有把該文件加入到 MDK-ARM 工程里。我們
在 MDK-ARM 工程界面左側 Project 欄目雙擊 Application/User 文件夾,把 button.c 加進來。
雙擊 button.c 文件,把下面代碼敲進去。
#include "button.h" #include "main.h" #include "stm32f1xx_it.h" #include "stm32f1xx_hal_gpio.h" int iButtonCount;//i代表int型變量,ButtonCount表示按鍵計數變量 int iButtonFlag;//i代表int型變量,ButtonFlag表示重按鍵標志,1代表重新按鍵,0為沒有重新按鍵 int g_iButtonState;//g是globle代表全局變量,會在其他地方引用;i代表int型變量,ButtonState表示按鍵標志,1代表按下,0代表松開void ButtonScan(void) {if( HAL_GPIO_ReadPin(Button_GPIO_Port,Button_Pin) == GPIO_PIN_RESET )//如果引腳檢測到低電平{iButtonCount++; //按鍵按下,計數iButtonCount加1if(iButtonCount>=30) //1ms中斷服務函數里運行一次,iButtonCount大于等于30,即按鍵已穩定按下30ms{if(iButtonFlag==0) //判斷有沒有重按鍵,1為有,0為沒有{g_iButtonState=1; //設置按鍵標志iButtonCount=0;iButtonFlag=1; //設置重按鍵標志}else //如果重按鍵,則重新計數iButtonCount=0;}else //如果沒有穩定按下30ms,則代表沒有按下按鍵g_iButtonState=0;}else //如果一直無檢測到低電平,即一直無按鍵按下{ iButtonCount=0; //清零iButtonCountg_iButtonState=0; //清除按鍵標志iButtonFlag=0; //清除重按鍵標志}if(g_iButtonState == 1) {HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);//翻轉LED引腳(PB12)的電平} }其中這段代碼的意思就是:如果按鍵狀態標志為 1 ,則代表按鍵被按下了,這時候進行 LED 電平翻轉
if(g_iButtonState == 1) {HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);//翻轉LED引腳(PB12)的電平}
再新建一個文件 button.h 頭文件,把文件保存到 Inc 文件夾。然后,把下面代碼敲進去。
打開 stm32fxx_it.c 文件,在 /* USER CODE BEGIN Includes / 與 / USER CODE END Includes */ 之間加入 #include “button.h”。
在 stm32fxx_it.c 文件里面 SysTick_Handler() 函數里加入按鍵掃描函數 ButtonScan()。
代碼已經編寫好了。這時候,點擊編譯按鈕,會提示沒有錯誤和警告。把代碼燒錄進 MiaowLabs-STM32F1-Micro 核心板,然后按下用戶按鍵,可以發現按一下 LED 會亮,再按一下 LED 就會滅掉。就這樣,我們實現了通過按鍵控制 LED 亮滅的功能。
4.燒錄代碼
之前做物創的時候燒錄用的是ST-Link,但是今天教我們用的是mcuisp燒錄,個人感覺還是ST-Link比較方便。
其中mcuisp也有幾個要注意的點在圖中標注出來了
三、遇到的問題
一開始我把PA8命名為Botton_Pin,但是在函數HAL_GPIO_ReadPin()里面調用的時候用了botton_Pin,大小寫不同導致找不到這個變量,剛開始還以為是沒有調用定義的頭函數,但是還是報錯。
然后我就去gpio.c文件里面查命名,果然
看樣子之后還是要多多注意大小寫,細節還是得注意
四、編程環境配置
代碼自動補全
Edit->Configuration
代碼格式化
使用AStyle進行代碼格式化
添加Astyle菜單的方法:
1:uVision4中單擊Tools菜單—Customize Tools Menu
2:添加Astyle All Files 和Astyle Current File菜單(自定義菜單名,可以使用中文)
我在這里添加了兩個菜單,分別是格式化當前文件和格式化project中的所有文件。
3:添加Command命令:單擊…按鈕,選擇Astyle.exe。
4:Arguments:
Astyle Current File菜單填寫 !E
Astyle All Files菜單填寫 “E?.c""E*.c" "E?.c""E*.h”
注:!E 表示的是當前獲得焦點且正在編輯的文件。
E?.c和E*.c和E?.c和E*.h代表當前獲得焦點且正在編輯文件所在目錄下所有.c和.h文件(參考keil uVision的幫助文檔)
使用的是Astyle默認格式來格式化文件,另外也可以自定義格式,自定義格式參考Astyle的幫助文檔。默認格式化后,會備份原文件為源文件名.orig。如果不想讓Astyle備份文件,可以使用-n參數。 如:-n !E (表示格式化當前文件,不備份)
在keil中的使用效果:生成的菜單出現在Tools的下拉菜單中,Astyle的運行結構出現在keil的Build Output窗口中。
格式化前
格式化后
軟件及資料
兩輪自平衡小車開發指南鏈接:https://pan.baidu.com/s/1GjvfL4zJHQ64QzSt_wK7HA 提取碼:fjfr 開發工具安裝包鏈接:https://pan.baidu.com/s/1KXs3KADFWl12llTiz_Q4cw 提取碼:5pw3 代碼格式化插件下載地址:http://download.csdn.net/download/xinxinsky/10231382總結
以上就是今天學的內容總結了,STM32CubeMX真的算是很好用,之前不知道有這個軟件,寫東西就只能改例程,然后每一次新建工程文件都十分的復雜,阿巴阿巴阿巴……
下次把ST-Link帶過去,燒錄說不定會簡單多
總結
以上是生活随笔為你收集整理的【STM32】两轮自平衡小车学习笔记1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 考研英语近义词与反义词·十一
- 下一篇: 油豆腐