目录
闪灯原理
LED灯有个2-10mA的电流就可以点亮
3.3/510=0.006A=6mA
2种接线方式控制闪灯
使用推挽接法
当设置推挽模式时,CPU控制寄存器写0,IO引脚输出低电压,电路导通,灯亮。
CPU控制寄存器写1,IO引脚输出高电压,电路导通,灯不亮。
使用开漏接法
下面和最开始基本相同,但是开关接在右边
闭合灯亮,断开灯不亮
开漏模式下,P-MOS一直漏断开的,所以只用考虑下面的N-MOS,当给这个寄存器写0的时候,N-MOS闭合,电路导通灯就亮,当写1的时候,N-MOS断开,都悬空灯不亮。
看原理图
STM32F103C8T6有两个小灯,下面一个灯是电源指示灯,如果想点亮上面那个灯PC13,就需要看这个系统板的接法,看他是推挽接法还是开漏接法。如果你自己外接一个灯,当然可以自己随意设置。
STM32F103C8T6有的PC13在下面,电源指示灯在上门。
会发现是一个开漏接法,所以写0就可以亮,写1不亮
写代码
通过CPU往寄存器中写程序,所以是通用,又这个灯是开漏,所以选用的就是通用输出开漏模式
#include "stm32f10x.h" // Device header
#include "delay.h"
int main(void)
{
//开启GPIOC的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//初始化IO引脚 PC13通用输出开漏模式 2MHZ PC13初始化后默认为0会亮
GPIO_InitTypeDef GPIO_InitStruct={0};
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_OD;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_Init(GPIOC,&GPIO_InitStruct);
while(1)
{
GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET); //写1 不亮
Delay(200);
GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET); //写0 亮
Delay(200);
}
}
我用proteus仿真也试了一下没问题