stm32性能強大,但其開發難度又顯著高于Arduino等單片機,本文將通過流水燈程式,介紹stm32開發的一些基本操作,
基本介紹
常見stm的編程方式有三種:暫存器式、標準庫式、HAL庫式,其中HAL庫上手較為簡單,本文將以HAL庫式為基礎介紹,
軟體
- Keil 5(單片機集成開發環境)
- STM32CubeMX(自動配置stm32編程的相關檔案)
- FLYMCU(stm32串口下載軟體,也可用ST-LINK代替)
- XCOM(串口監視器)
準備

打開圖中的“File”,新建一個stm32專案(“New Project"),

在輸入框中搜索自己的stm32芯片,雙擊創建新專案,

選擇左邊選單欄中“System Core”的SYS、GPIO和RCC,

在SYS中選擇Debug方式為“Serial Wire”,

在RCC中選擇“Crystal/Ceramic Resonator”

點擊右邊芯片的引腳,可以看到每一個引腳的用法,此處我們選擇引腳的“GPIO_Output”(通用型輸出)模式,

依次選擇每個引腳的模式,在該實驗中,我們共需要10個模式為“GPIO_Output”的引腳,設定好后引腳會有綠色標記,

打開“GPIO”,設定引腳的輸出模式為“Output Push Pull”(推挽輸出模式),

打開“Project Manager”,編輯檔案名稱,保存路徑,注意設定IDE為MDK-ARM,版本為V5,點擊“GENERATE CODE",

打開keil,找到“main.c"檔案,我們可以找到核心代碼區:
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
//int tmp=0;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
在while回圈之前,我們通常填入需要初始化的變數、條件;在while回圈中,我們填入需要回圈執行的代碼,特別需要注意的是,代碼需要寫在/* *** BEGIN*/和/* *** END*/之間,否則在代碼重繪或重置后,不在此范圍內的新編代碼會丟失,
代碼
在核心代碼取輸入以下代碼:
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);/*置PB12管腳為高電平,以下同*/
HAL_Delay(100);/*延時函式,單位為ms*/
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);/*置PB12管腳為低電平,以下同*/
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_8,GPIO_PIN_SET);/*注意此處的管腳為D區的,應為GPIOD*/
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_8,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_9,GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_9,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_10,GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_10,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_11,GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_11,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,GPIO_PIN_RESET);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
按照程式中的定義方式進行接線,同時點擊左上角的“Build”,編譯程式,

若程式編譯正確,使用FLYMCU打開程式的hex檔案(在MDK-ARM中),點擊“開始編程”,將程式上傳于開發板,

上傳成功后,點擊開發板上的“RESET”按鈕,即可觀察到流水燈作業,
實驗效果
STM32-流水燈
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/255606.html
標籤:其他
