stm32基础(keil创建、Proteus仿真、点亮LED灯,7段数码管)

一、keil的创建

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
随后点击新建(Ctrl+n),接着保存到所自己项目工程文件。.c .h都是这样操作
在这里插入图片描述

二、Proteus的简单使用

在这里插入图片描述
左上角框框内可以拖动

三、点亮LED灯代码

led.c
#include "stm32f10x.h"                  // Device header

void led_init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    //GPIO_InitTypeDef GPIO_InitStructure2;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIOA时钟使能
   // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//GPIOB时钟使能
    
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//初始化的引脚
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//输出速度
    
    //GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_0;//初始化的引脚
    //GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
   // GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;//输出速度
    
    GPIO_Init(GPIOA,&GPIO_InitStructure);//pA5初始化
   // GPIO_Init(GPIOB,&GPIO_InitStructure2);//pB0初始化
}

void led_on(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_5);//PA输出0
   // GPIO_ResetBits(GPIOB,GPIO_Pin_0);//PB输出0
}

void led_off(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_5);//PA输出1
   // GPIO_SetBits(GPIOB,GPIO_Pin_0);//PB输出1
}



led.h
#ifndef LED_H
#define LED_H

void led_init(void);
void led_on(void);
void led_off(void);
void mydelay(int x);
    
#endif

main.c
#include "led.h"
#include "stm32f10x.h"    // Device header
#include "7seg.h"

void mydelay(int x)
{
    int i=0;
    while(x--)
        for(i=500;i>=0;i--);
}

int main()
{
    led_init();
    seg7_init();
    
    seg7_desplay(0xC0);
    while(1)
    {
        
       led_on();
        mydelay(500);
        
        led_off();
        mydelay(500);
      /*   
        seg7_desplay(0xC0);
        mydelay(1000);
        seg7_desplay(0xF9);
        mydelay(1000);
        seg7_desplay(0xA4);
        mydelay(1000);
        seg7_desplay(0xB0);
        mydelay(1000);
        seg7_desplay(0x99);
        mydelay(1000);
        seg7_desplay(0x92);
        mydelay(1000);
        seg7_desplay(0x82);
        mydelay(1000);
        seg7_desplay(0xF8);
        mydelay(1000);
        seg7_desplay(0x80);
        mydelay(1000);
        seg7_desplay(0x90);
        mydelay(1000);
        */
    }
    //return 0;
}

这里需要注意main.c里面的延时函数需要加到led.h里面;编译器的版本需要改成5。否则在二进制程序进行方针时,LED灯可能不能够有效闪烁。

7seg.c
在这里插入图片描述
在这里插入图片描述

### STM32Proteus中实现LED亮起 #### 创建Keil MDK项目并编写代码 为了使用STM32微控制器在Proteus中模拟点亮LED的过程,首先需要创建一个基于MDK的工程。确保已经安装好MDK5软件和相应的STM32包。 ```c #include "stm32f1xx.h" void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); // 配置系统时钟 MX_GPIO_Init(); // 初始化GPIO while (1){ HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0); // 切换PB0引脚状态 HAL_Delay(500); // 延迟500ms } } // 系统时钟配置函数 void SystemClock_Config(void){ RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; __HAL_RCC_PWR_CLK_ENABLE(); /* Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){ Error_Handler(); } /* Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){ Error_Handler(); } } // GPIO初始化函数 static void MX_GPIO_Init(void){ GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOB_CLK_ENABLE(); // 启用GPIO端口的时钟[^3] /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); /* Configure PB0 as output push-pull mode */ GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } ``` 这代码实现了对STM32F1系列MCU上特定GPIO引脚的操作,即通过不断改变其逻辑电平来达到控制外部连接LED的目的。这里选择了PB0作为输出引脚,并将其设置为推挽输出模式。 #### 设置Proteus仿真环境 接着,在Proteus ISIS环境中建立新的原理图设计文件,并按照以下步骤操作: - 添加组件:放置`STM32F103RCT6`芯片模型以及若干电阻元件(用于限流),还有发光二极管(LED)[^4]。 - 连接线路:将上述提到的元器件按实际需求相连;特别要注意的是,需把LED的一端接到指定的I/O引脚(PB0),另一端接地(GND)。同时也要记得给整个电路提供电源支持。 - 编译下载:回到Keil IDE内编译生成`.hex`文件后,再返回至Proteus界面加载此固件映像到虚拟单片机里去执行它。 当一切准备就绪之后启动仿真实验,应该能够观察到所连结的小泡随着程序设定周期性的闪烁效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值