日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【STM32】两轮自平衡小车学习笔记1

發布時間:2024/3/7 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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 文件夾。然后,把下面代碼敲進去。

#ifndef __BUTTON_H #define __BUTTON_H extern int g_iButtonState;//聲明外部變量,方便其他地方引用 void ButtonScan(void);//聲明按鍵掃描函數 #endif


打開 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文件里面查命名,果然

/*Configure GPIO pin : PtPin */GPIO_InitStruct.Pin = Button_Pin;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_PULLUP;HAL_GPIO_Init(Button_GPIO_Port, &GPIO_InitStruct);

看樣子之后還是要多多注意大小寫,細節還是得注意

四、編程環境配置

代碼自動補全

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?.cE*.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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。