嵌入式系統第三週ARM開發環境入門
STM32底座實驗指導書第3章的LED閃爍
文章目錄
1、實驗目的
安裝mdk5軟體和stm32包,熟悉mdk開發環境,完成一個stm32的簡單程式的編譯。
2、 軟體安裝
在win10下安裝mdk5和stm32pack麻煩請參考Win10下MDK5及stm32pack的安裝教程
3、mdk5的程式編譯
- 新建工程
- 選擇開發板
- 新建main.c檔案
- 進行編譯,編譯無錯
- 進行除錯,除錯成功
- 程式碼如下
//巨集定義,用於存放stm32暫存器對映
#define PERIPH_BASE ((unsigned int)0x40000000)
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
//該地址為GPIOA的基地址
#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)
#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000)
#define GPIOD_BASE (APB2PERIPH_BASE + 0x1400)
#define GPIOE_BASE (APB2PERIPH_BASE + 0x1800)
#define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00)
#define GPIOG_BASE (APB2PERIPH_BASE + 0x2000)
#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
#define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C
#define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C
#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C
#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C
#define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define LED0 MEM_ADDR(BITBAND(GPIOA_ODR_Addr,8))
//定義typedef的型別別名
typedef struct
{
volatile unsigned int CR;
volatile unsigned int CFGR;
volatile unsigned int CIR;
volatile unsigned int APB2RSTR;
volatile unsigned int APB1RSTR;
volatile unsigned int AHBENR;
volatile unsigned int APB2ENR;
volatile unsigned int APB1ENR;
volatile unsigned int BDCR;
volatile unsigned int CSR;
} RCC_TypeDef;
#define RCC ((RCC_TypeDef *)0x40021000)
typedef struct
{
volatile unsigned int CRL;
volatile unsigned int CRH;
volatile unsigned int IDR;
volatile unsigned int ODR;
volatile unsigned int BSRR;
volatile unsigned int BRR;
volatile unsigned int LCKR;
} GPIO_TypeDef;
#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)
void LEDInit(void)
{
RCC->APB2ENR|=1<<2; //GPIOA
GPIOA->CRH&=0XFFFFFFF0;
GPIOA->CRH|=0X00000003;
}
void Delay_ms(volatile unsigned int t)
{
unsigned int i,n;
for(n=0;n<t;n++)
for(i=0;i<800;i++);
}
int main(void)
{
LEDInit();
while(1)
{
LED0=0;
Delay_ms(500);
LED0=1;
Delay_ms(500);
}
}
Proteus 電路51程式設計和模擬
1、實驗目的
安裝並熟悉Proteus 電路模擬軟體,完成一個51程式設計和模擬
2、安裝C51支援包
程式設計和模擬
1.新建工程和C51LED.c檔案
該過程與上面mdk類似,這是我最後建立的結果
這是程式碼,借鑑了網上的資源
#include"reg51.h"
#include"intrins.h" //左右移函式標頭檔案
void delay1ms(unsigned char c) //c=1時,大約為1ms
{
unsigned char a,b;
for(c ;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void main()
{
unsigned char led,i; //設定兩個變數
led=0xfe;
delay1ms(100); //大約延時100ms
while(1)
{
for(i=0;i<7;i++)
{
P2=led;
delay1ms(100);
led=_crol_(led,1); //左移函式,將led左移一位 _crol_(“變數”,“位數”)
}
for(i=0;i<7;i++) //同上for的作用
{
P2=led;
delay1ms(100);
led=_cror_(led,1); //右移函式,將led右移一位
}
}
}
2. 編譯完成得到.hex檔案
3.在proteus繪圖中插入.hex檔案
4.執行得到結果
總結
這次實驗對於我們來說很有挑戰性,主要是這些一點沒學過,純粹從零開始。在這過程中有很多問題,還好網上無論是答疑還是教程都很多,所以勉勉強強還是完成了。當然,我做的很一般,有很多都是借鑑的網上的,有些地方不夠完善,甚至有些地方是錯誤的,還請不吝賜教。
相關文章
- ARM開發環境入門(嵌入式作業二)開發環境
- ARM開發環境入門開發環境
- 嵌入式開發 ARM入門經典
- Flutter開發入門之開發環境搭建(VSCode搭建Flutter開發環境)Flutter開發環境VSCode
- java入門:安裝開發環境Java開發環境
- Qemu搭建ARM vexpress開發環境(三)----NFS網路根檔案系統Express開發環境NFS
- 安卓開發入門(一)開發環境搭建安卓開發環境
- Mac 後端入門開發環境搭建Mac後端開發環境
- Flutter入門教程(二)開發環境搭建Flutter開發環境
- 麒麟作業系統 (kylinos) 從入門到精通 - 研發環境 - 第四十四篇 python開發環境搭建作業系統Python開發環境
- 從零搭建嵌入式開發環境開發環境
- 麒麟作業系統 (kylinos) 從入門到精通 - 研發環境 - 第十篇 Java開發及環境準備作業系統Java
- 《Golang 從入門到跑路》之開發環境搭建Golang開發環境
- C++入門(3):C++開發環境搭建C++開發環境
- Windows系統中搭建python開發環境WindowsPython開發環境
- ARM嵌入式系統該如何學習
- Python GUI開發- PyQt5 開發小工具環境入門PythonGUIQT
- 麒麟作業系統 (kylinos) 從入門到精通 - 研發環境 - 第二十一篇 C++/C語言開發環境搭建作業系統C++C語言開發環境
- ubuntu系統中java開發環境的搭建UbuntuJava開發環境
- window系統中配置Vue的開發環境Vue開發環境
- 寫作業系統之搭建開發環境作業系統開發環境
- Mac系統Python開發環境的安裝MacPython開發環境
- Mac系統Go開發環境的安裝MacGo開發環境
- Linux開發環境搭建——deepin系統的使用Linux開發環境
- Linux嵌入式系統開發,嵌入式Linux開發教程Linux
- ARM嵌入式系統啟動架構研究架構
- golang 快速入門 [2.1]-go 語言開發環境配置-windowsGolang開發環境Windows
- Laravel 入門篇之開發環境 Homestead 的安裝配置Laravel開發環境
- rust學習一、入門之搭建簡單開發環境Rust開發環境
- FFmpeg開發筆記(一)搭建Linux系統的開發環境筆記Linux開發環境
- 【URLOS開發入門】docker官方系統映象——Alpine入門教程Docker
- Linux環境下的Mysql資料庫入門-基於Centos系統LinuxMySql資料庫CentOS
- webpack4.0 入門篇 - 構建前端開發的基本環境Web前端
- W801微控制器入門開發環境設定開發環境
- 麒麟系統開發筆記(六):安裝QtCreator開發IDE中的中文輸入環境Fcitx輸入法筆記QTIDE
- 直播系統開發中關於開發環境你瞭解多少?開發環境
- 實現ARM+ROS(機器人作業系統)之環境搭建!ROS機器人作業系統
- SpringMVC入門與環境搭建SpringMVC