完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、MDK5环境下的简单stm32程序编译
1.工程的建立 由于此过程比较繁杂,在此给出前辈的资料链接,这里就不再赘述。 https://blog.csdn.net/cheapter/article/details/801981682.创建项目 点击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;n 10.程序编译成功 二、Proteus下的51单片机程序设计及仿真 1.使keil5兼容51单片机 keil5一般来说不支持51单片机程序编程,所以在此给出前辈的解决方法。 https://blog.csdn.net/qq_33160790/article/details/766528392.如前面的一样建立一个工程,选芯片注意选择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的单片机仿真相对容易一些。 |
|
|
|
只有小组成员才能发言,加入小组>>
2545 浏览 0 评论
1142浏览 2评论
741浏览 1评论
495浏览 0评论
256浏览 0评论
417浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 09:55 , Processed in 2.024267 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号