ARM开发环境入门—STM32实例1

    科技2024-11-11  6

    文章目录

    一、一个STM32简单程序编译(LED闪烁)1.准备工作2.工程文件3.编译程序4.仿真调试5.结束 二、一个51程序设计和仿真(流水灯)1.准备工作2.工程文件3.编译程序4.仿真调试5.结束 总结


    一、一个STM32简单程序编译(LED闪烁)

    1.准备工作

    安装相关MDK软件: MDK相关软件官网下载地址:http://www.keil.com/download/product 安装STM32 pake STM32 pake下载地址:https://www.keil.com/dd2/pack/

    2.工程文件

    (1)、运行keil5进入,新建工程,如下图: (2)、为工程名有效命名后自动弹出对于芯片的选择,此时选择芯片STM32F103RB,之后点击“OK",具体如下:

    (3)、选择芯片完成自动弹出如下页面,我们再进行选择,对相应选项进行勾选,之后点击“OK",操作步骤如下:

    (4)、工程创建完毕,开始创建源文件:

    (5)、创建完成后自动弹出Text文本框,将下列代码复制过去:

    //宏定义,用于存放stm32寄存器映射 #define PERIPH_BASE ((unsigned int)0x40000000)//AHB #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) //GPIOA_BASE=0x40000000+0x10000+0x0800=0x40010800,该地址为GPIOA的基地址 #define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00) //GPIOB_BASE=0x40000000+0x10000+0x0C00=0x40010C00,该地址为GPIOB的基地址 #define GPIOC_BASE (APB2PERIPH_BASE + 0x1000) //GPIOC_BASE=0x40000000+0x10000+0x1000=0x40011000,该地址为GPIOC的基地址 #define GPIOD_BASE (APB2PERIPH_BASE + 0x1400) //GPIOD_BASE=0x40000000+0x10000+0x1400=0x40011400,该地址为GPIOD的基地址 #define GPIOE_BASE (APB2PERIPH_BASE + 0x1800) //GPIOE_BASE=0x40000000+0x10000+0x0800=0x40011800,该地址为GPIOE的基地址 #define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00) //GPIOF_BASE=0x40000000+0x10000+0x0800=0x40011C00,该地址为GPIOF的基地址 #define GPIOG_BASE (APB2PERIPH_BASE + 0x2000) //GPIOG_BASE=0x40000000+0x10000+0x0800=0x40012000,该地址为GPIOG的基地址 #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)) //#define LED0 *((volatile unsigned long *)(0x422101a0)) //PA8 //定义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类型别名 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; //GPIOA指向地址GPIOA_BASE,GPIOA_BASE地址存放的数据类型为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;//LED熄灭 Delay_ms(500);//延时时间 LED0=1;//LED亮 Delay_ms(500);//延时时间 } }

    (6)、随后点击保存文件,注意文件名后缀必须为.c(程序编译语言是c语言),具体操作如下: (7)、右键点击左侧project窗口的source Group1,选择相应的选项把.c文件添加到工程里,具体操作如下: (8)、选择相应.c文件后点击”Add",随后直接关闭窗口,此时点击展开左侧project窗口,可以发现.c文件已经被添加,具体操作如下:

    3.编译程序

    (1)、点击编译图标对其程序进行编译,具体操作如下:

    4.仿真调试

    (1)、根据如下步骤点击选择选项,随后点击“OK",具体操作如下: (2)、在之后弹出的窗口里,确定选项,步骤2中可以选择”Autodetect“或”SYSRESEETREQ“,随后点击”OK“返回上一个窗口: (3)、点击序号1所指向的红色放大镜图标进入仿真,序号2箭头指向的是调试工具:

    5.结束

    由于没有硬件支撑,只能在MDK中做程序的编译与仿真测试,所以该仿真至此结束。

    二、一个51程序设计和仿真(流水灯)

    1.准备工作

    安装相关keil软件: keil相关软件官网下载地址:http://www.keil.com/download/product 安装电路仿真软件: protues相关软件官网下载地址:https://www.labcenter.com/

    2.工程文件

    (1)、运行keil4进入,新建工程文件皆与上文中对于STM32步骤相同,选择芯片时,需要选择“AT89C51",具体操作如下: (2)、添加.c源文件代码如下:

    #include"reg51.h" //51单片机的头文件,定义了特殊功能寄存器 #include"intrins.h" //该头文件包含左移右移函数 void delay(unsigned char x) //定义延时函数 { unsigned char a,b; for(x;x>0;x--) for(b=250;b>0;b--) for(a=1;a>0;a--); } void main() { unsigned char led,i; led=0xfe; //采用共阳极接法,输出0点亮LED,0xfe=1111 1110 delay(100); //延时 while(1) { for(i=0;i<7;i++) //依次右移0,共需7次 { P0=led; //8个引脚输出为0xfe delay(100); led=_crol_(led,1); //左移函数,将led左移一位 } } }

    3.编译程序

    程序没有错误,如下:

    4.仿真调试

    (1)、在keil4里导出hex文件,该hex文件需要烧写到51单片机中,被单片机执行的一种文件形式,具体操作如下:

    (2)、打开protues软件,新建工程文件,具体操作如下: (2)、进入工程电路操作页面,添加所需元器件,具体操作如下: (2)、该仿真电路图所需元器件以及电路连线图如下: (3)、写入程序,双击仿真电路图中的AT89C51放入hex文件,具体操作如下:

    (4)、进入仿真,具体操作如下: (5)、仿真结果录屏导出为GIF演示如下:

    5.结束

    通过keil4与protues相关软件成功仿真出51单片机流水灯实例。

    总结

    以上就是今天所学内容,本文仅仅简单介绍了mdk开发环境,完成一个stm32的简单程序的编译以及对于protues软件的简单使用,完成了一个51程序设计和仿真。

    本文代码参考来源1:https://blog.csdn.net/farsight1/article/details/80984834

    Processed: 0.019, SQL: 8