ARM開發環境下對stm32簡單程式編譯及使用protues完成對51程式的設計及模擬

2020-10-07 02:00:55

提示:本文為課程作業,存在很多不足。



一、本次作業目的

1. 安裝mdk5軟體和stm32包,熟悉mdk開發環境,完成一個stm32的簡單程式的編譯。安裝過程可參考 網上或者「STM32底座實驗指導書」第1章。範例程式可以參考網上程式碼,或者「STM32底座實驗指導書」第 3章的「LED閃爍」。(注意,沒有硬體之前,只能做程式的編譯和模擬測試,無法下載到硬體上執行)
2. 安裝並熟悉Proteus 電路模擬軟體,完成一個51程式設計和模擬,可參考:http://m.elecfans.com/article/581557.html


二、MDK5.0軟體和stm32包的安裝及個別問題

官網或者其他來源下載mdk5.0安裝包
Ps:官網下載較慢,建議使用其他來源進行下載

下載好安裝包後按照安裝步驟進行安裝即可

針對我在安裝時出現的問題以及解決方法
我在使用序號產生器時出現了以下情況
提示沒有使用管理員許可權登入
這裡是因為我沒有使用管理員許可權登入
我們這裡退出去,以管理員身份執行程式再進行註冊
在這裡插入圖片描述
下圖為註冊成功後介面顯示
在這裡插入圖片描述
由於這個只能用到2020年,所以可能會過期,建議使用2032版本的 序號產生器

之後我們再從官網或者其他來源下載安裝stm32
Ps:下載好後直接雙擊檔案進行安裝即可


三、MDK開發環境下對stm32簡單程式的編譯

如下範例:

3.1 建立專案

點選專案-->選擇新uVsion專案

在這裡插入圖片描述

選擇晶片

在這裡插入圖片描述

點選cancel

在這裡插入圖片描述

專案建立成功

在這裡插入圖片描述

3.2 原始檔的建立及編譯

  1. 新增啟動檔案startup_stm32f10x_hd.s

雙擊Source Group 1

在這裡插入圖片描述

找到startup_stm32f10x_hd.s檔案點選新增 (注意檔案型別,避免在目錄下找不到該檔案)

在這裡插入圖片描述
2. 建立原始檔main.c及程式碼輸入

右鍵單擊Source Group 1(如圖選擇Add New......)

在這裡插入圖片描述

建立main.c原始檔

在這裡插入圖片描述

輸入程式碼

在這裡插入圖片描述

程式碼如下:

#include<stdio.h>
void SystemInit(void)
{
	printf("Hello World\n");
}
int main(void)
{
	SystemInit();
	return 0;
}
  1. 編譯main.c檔案

點選如圖所示按鍵進行編譯

在這裡插入圖片描述

編譯成功(存在警告)

在這裡插入圖片描述
在這裡插入圖片描述

警告解決辦法(在第十行後面加一個回車按鍵)
在這裡插入圖片描述
在這裡插入圖片描述


四、安裝protues然後完成一個51程式的設計和模擬

由於之前的課程中已經安裝protues軟體以及keil c51,所以這裡不展示安裝過程
設計的51程式為流水燈程式

4.1 在keil上完成流水燈的程式設計

新建專案 -->search處直接搜尋AT89C51
在這裡插入圖片描述
同上新增.c檔案後編寫程式
在這裡插入圖片描述
程式碼如下:

#include "reg51.h"                       //參照標頭檔案reg51.h
#include <intrins.h>                     //參照intrins.h函數,用於_nop_()指令

void delay_ms(int a)                     //建立delay_ms,設定延遲時間 a
{
	int i,j;                             //定義變數i,j
	for(i=0;i<a;i++)                     
	{
		for(j=0;j<1000;j++) _nop_();     //_nop_等同於NOP指令,完成一個機器週期,清空儲存的內容

	}
}

void main(void)
{
	while(1)
	{
		P0=0xfe;                       //P0口8個引腳被賦值成11111110,此時P0.0為低電平
		delay_ms(100);                 //週期內迴圈,完成迴圈後_nop_清空內容
		P0=0xfd;                       //P0口8個引腳被賦值成11111101,此時P0.1為低電平
		delay_ms(100);
		P0=0xfb;                       //P0口8個引腳被賦值成11111011,此時P0.2為低電平
		delay_ms(100);
		P0=0xf7;                       //P0口8個引腳被賦值成11110111,此時P0.3為低電平
		delay_ms(100);
		P0=0xef;                       //P0口8個引腳被賦值成11101111,此時P0.4為低電平
		delay_ms(100);
		P0=0xdf;                       //P0口8個引腳被賦值成11011111,此時P0.5為低電平
		delay_ms(100);
		P0=0xbf;                       //P0口8個引腳被賦值成10111111,此時P0.6為低電平
		delay_ms(100);
		P0=0x7f;                       //P0口8個引腳被賦值成01111111,此時P0.7為低電平
		delay_ms(100);
	}
}

生成.hex檔案
點選如圖目標選項 --> 點選Output -->勾選Create HEX File -->然後再進行編譯 -->Hex檔案生成成功

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

4.2 在protues畫好流水燈原理圖

原理圖如下
在這裡插入圖片描述
新增Hex檔案
雙擊AT89C51 --> 點選Program File處資料夾 --> 找到之前生成的.hex檔案 --> 新增成功

在這裡插入圖片描述

4.3 模擬

(部分模擬截圖)

在這裡插入圖片描述
在這裡插入圖片描述


以上就是本次作業的全部內容

總結

這次的作業內容比上次作業較複雜,有之前學習過的51程式的設計及模擬,也有沒學過的在mdk5開發環境下對stm32簡單程式的編譯。總的來說,還是有很多的收穫。