Proteus仿真运行stm32流水灯实验
MDK创建一个工程文件
新建一个工程文件,配置并引入固件库
在 USER 文件夹下新建一个 bsp_led.c 文件
// bsp: board support package 板级支持包
#include "bsp_led.h"
//微秒级的延时
void delay_us(uint32_t delay_us)
{
volatile unsigned int num;
volatile unsigned int t;
for (num = 0; num < delay_us; num++)
{
t = 11;
while (t != 0)
{
t--;
}
}
}
//毫秒级的延时
void delay_ms(uint16_t delay_ms)
{
volatile unsigned int num;
for (num = 0; num < delay_ms; num++)
{
delay_us(1000);
}
}
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct; //定义GPIO_InitTypeDef结构体
//开启时钟
//RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//配置成员,变为输出模式
/*绿灯*/
GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN; //配置位(I/O口)
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //配置输出速度
//GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) 参数一:端口,参数二:GPIO_InitTypeDef结构体指针
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct); //初始化GPIO
/*红灯*/
GPIO_InitStruct.GPIO_Pin = LED_R_GPIO_PIN;
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
/*蓝灯*/
GPIO_InitStruct.GPIO_Pin = LED_B_GPIO_PIN;
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
while(1){
//点亮绿LED
GPIO_ResetBits(LED_GPIO_PORT, LED_G_GPIO_PIN);
delay_ms(10);
//熄灭绿LED
GPIO_SetBits(LED_GPIO_PORT, LED_G_GPIO_PIN);
delay_ms(10);
GPIO_ResetBits(LED_GPIO_PORT, LED_R_GPIO_PIN);
delay_ms(10);
GPIO_SetBits(LED_GPIO_PORT, LED_R_GPIO_PIN);
delay_ms(10);
GPIO_ResetBits(LED_GPIO_PORT, LED_B_GPIO_PIN);
delay_ms(10);
GPIO_SetBits(LED_GPIO_PORT, LED_B_GPIO_PIN);
delay_ms(10);
}
}
同样在 USER 文件夹中新建一个 main.c 文件
#include "stm32f10x.h"
#include "bsp_led.h"
int main(void)
{
// 程序来到 main 函数之前,启动文件:statup_stm32f10x_hd.s 已经调用
// SystemInit()函数把系统时钟初始化成 72MHZ
// SystemInit()在 system_stm32f10x.c 中定义
// 如果用户想修改系统时钟,可自行编写程序修改
LED_GPIO_Config();
}
点击 Output,勾选 Create HEX File,然后点击 OK
用Proteus新建一个工程文件
引入如下器件