目录
③ STM32F103xC6(对照翻译+仿真实验验证io特性)
二、Proteus仿真电路的搭建和分析(使用单片机STM32F103xC6)
一、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);
}
其他的点灯方式:
结果如下:
如下:
加油!!!