文章目录
STM32底座实验指导书第3章的LED闪烁1、实验目的2、 软件安装3、mdk5的程序编译
Proteus 电路51程序设计和仿真1、实验目的2、安装C51支持包程序设计和仿真1.新建工程和C51LED.c文件2. 编译完成得到.hex文件3.在proteus绘图中插入.hex文件4.运行得到结果
总结
STM32底座实验指导书第3章的LED闪烁
1、实验目的
安装mdk5软件和stm32包,熟悉mdk开发环境,完成一个stm32的简单程序的编译。
2、 软件安装
在win10下安装mdk5和stm32pack麻烦请参考Win10下MDK5及stm32pack的安装教程
3、mdk5的程序编译
新建工程 选择开发板 新建main.c文件 进行编译,编译无错 进行调试,调试成功 代码如下
#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)
#define GPIOB_ODR_Addr (GPIOB_BASE+12)
#define GPIOC_ODR_Addr (GPIOC_BASE+12)
#define GPIOD_ODR_Addr (GPIOD_BASE+12)
#define GPIOE_ODR_Addr (GPIOE_BASE+12)
#define GPIOF_ODR_Addr (GPIOF_BASE+12)
#define GPIOG_ODR_Addr (GPIOG_BASE+12)
#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
<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
)
{
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);
while(1)
{
for(i
=0;i
<7;i
++)
{
P2
=led
;
delay1ms(100);
led
=_crol_(led
,1);
}
for(i
=0;i
<7;i
++)
{
P2
=led
;
delay1ms(100);
led
=_cror_(led
,1);
}
}
}
2. 编译完成得到.hex文件
3.在proteus绘图中插入.hex文件
4.运行得到结果
总结
这次实验对于我们来说很有挑战性,主要是这些一点没学过,纯粹从零开始。在这过程中有很多问题,还好网上无论是答疑还是教程都很多,所以勉勉强强还是完成了。当然,我做的很一般,有很多都是借鉴的网上的,有些地方不够完善,甚至有些地方是错误的,还请不吝赐教。