单片机交流
直播中

yqdedli

8年用户 897经验值
擅长:控制/MCU
私信 关注
[问答]

MDK5环境下如何对stm32程序进行编译?

MDK5环境下如何对STM32程序进行编译?

回帖(1)

乔占宽

2021-11-11 10:37:49
一、MDK5环境下的简单stm32程序编译

1.工程的建立
由于此过程比较繁杂,在此给出前辈的资料链接,这里就不再赘述。

  https://blog.csdn.net/cheapter/article/details/80198168
2.创建项目




点击Project中的New μVision Project。
3.选择芯片





选好后点OK,之后的界面相应位置打钩。





4.项目已建立,双击Source Group1





5.右键单击Source Group 1,选择Add New





6.在弹出的界面选择C File,并命名为main,单击Add





7.单击项目里的main.c,输入代码





具体代码如下:
来源于

  https://blog.csdn.net/ssj925319/article/details/108919862
#define PERIPH_BASE           ((unsigned int)0x40000000)#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)#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  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->CRH&=0XFFFFFFF0;     GPIOA->CRH|=0X00000003; }void  Delay_ms( volatile  unsigned  int  t){     unsigned  int  i,n;     for (n=0;n9.选择右上角的Rebuild进行编译





10.程序编译成功





二、Proteus下的51单片机程序设计及仿真

1.使keil5兼容51单片机
keil5一般来说不支持51单片机程序编程,所以在此给出前辈的解决方法。

  https://blog.csdn.net/qq_33160790/article/details/76652839
2.如前面的一样建立一个工程,选芯片注意选择AT89C51。





3.如前面一样创建一个c文件,命名为main2





4.点击工具栏中的Options for Target





5.将频率改为12,并在Output中的Create HEX File前面打钩,最后单击OK










6.输入代码并编译,无报错且成功生成了hex文件





7.打开proteus,选择元器件并连线





8.双击51单片机,点击Program File后面的文件夹图标,找到刚刚生成的hex文件





9.开启仿真(图片为部分仿真截图)















仿真分析:这是个十字路***通信号灯的控制系统。单片机的P1.5、P1.6、P1.7接口控制南北方向的交通灯,P1.1、P1.2、P1.3接口控制东西方向的交通灯。P2.0、P2.1控制南北方向数码管,P2.2、P2.3控制东西方向数码管。
开启仿真,东西南北四组信号灯均亮红灯,数码管倒计时5秒。5秒后,南北方向的灯均亮绿灯,东西方向均亮红灯,数码管倒计时10秒。当数码管倒计时剩余3秒时,南北方向均闪烁黄灯,3秒后,南北方向均亮红灯,东西方向均亮绿灯。数码管再次倒计时10秒,剩余3秒时,东西方向均闪烁黄灯,3秒后东西方向均亮红灯,南北方向均亮绿灯,之后重复上述过程。
总结

由于是第一次使用MDK5进行程序编译,很多步骤都还不熟悉,在查阅了很多资料后才得以解决。Proteus的单片机仿真相对容易一些。
举报

更多回帖

×
20
完善资料,
赚取积分