YoungTalk-STM32入门100步-通过I/O口点亮LED灯(Proteus仿真电路分析)

目录

一、I/O端口的分析

① STM32F103xC8(来自杜洋电子补习班解说)

②灌电流和拉电流

③ STM32F103xC6(对照翻译+仿真实验验证io特性)

二、Proteus仿真电路的搭建和分析(使用单片机STM32F103xC6)

① Proteus仿真电路搭建

②Proteus仿真电路测试分析

三、程序讲解


一、I/O端口的分析

① STM32F103xC8(来自杜洋电子补习班解说)

数据手册下载地址:https://www.st.com/resource/en/datasheet/stm32f103c8.pdf

 

 

 ②灌电流和拉电流

推荐文章:https://www.docin.com/p-475975098.html

③ STM32F103xC6(对照翻译+仿真实验验证io特性)

数据手册下载地址:https://www.st.com/resource/en/datasheet/stm32f103c6.pdf

给单片机写了一些代码,其中最后的结果为:

PA1 PA2 PA3三个端口分别输出高电平、高电平、低电平

代码片段如下:

 

考虑驱动电压——仿真实验电路如下:

 考虑驱动电流——仿真实验电路如下:

 

 

 根据实验结果,我姑且可以判断:

我认为这个电平状态的指示灯是根据电压大小的范围来判断是否为高低电平的,这个灰色的状态指示灯就是处于高低电平之间的电压状态。

由于内置高电平估计为约5V,可以理解为当电压表电压约为2.5v时,其单片机内部的上拉电阻为100k左右,故2.5v以上即为高电平,1v的时候为无控的时候的电压,相当于外接电路短路,判断驱动电流约为7mA左右

以上的数据和数据手册还是有一些出入的,但是具体的解释我表示很难……

二、Proteus仿真电路的搭建和分析(使用单片机STM32F103xC6)

① Proteus仿真电路搭建

Proteus下的stm32仿真:参考文章https://blog.csdn.net/lucario1/article/details/109547302

 

 

 如果出现这个错误,需要按照下面的操作对stm32选择pcb封装

②Proteus仿真电路测试分析

阅读好文章:单片机简介 & 点亮LED & 流水灯 & 电路基础

下面是高低电平两种驱动方式:

 

场效应管的相关性质:

三、程序讲解

具体的工程项目搭建需要参考前面的一篇博客,

工程结构:

 这里列出一些重要的文件:

main.c


#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "led.h"


int main (void){//主程序
	RCC_Configuration(); //时钟设置
	LED_Init();
	while(1){

		GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1
		GPIO_WriteBit(LEDPORT,LED2,(BitAction)(1)); //LED2接口输出高电平1
		GPIO_WriteBit(LEDPORT,LED3,(BitAction)(0)); //LED3接口输出低电平0
		

	}
}

led.h

#ifndef __LED_H
#define __LED_H	 
#include "sys.h"

#define LEDPORT	GPIOA	//定义IO接口
#define LED1	GPIO_Pin_1	//定义IO接口
#define LED2	GPIO_Pin_2	//定义IO接口
#define LED3	GPIO_Pin_3	//定义IO接口


void LED_Init(void);//初始化

		 				    
#endif

led.c

#include "led.h"

void LED_Init(void){ //LED灯的接口初始化
	GPIO_InitTypeDef  GPIO_InitStructure; 	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);       
    GPIO_InitStructure.GPIO_Pin = LED1 | LED2 | LED3; //选择端口号(0~15或all)                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式       
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)    
	GPIO_Init(LEDPORT, &GPIO_InitStructure);			
}

其他的点灯方式:

 ​​​​​​​

 

结果如下:

 

如下:

 

 

 

 

 加油!!!

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值