STM32学习日志

一.点亮LED

1.1 硬件部分:C8T6核心板+面包板,led灯若干,3.3v接面包板正极,GND接面包板负极,led正极接面包板正极,负极接PA8口
(可以大致认为:led灯如果要亮,需满足存在导通压差,即为led正负极两端电压不能一致)
插入额外补充知识:
GPIO_Mode_Out_PP:推挽模式,高低电平输出能力均有
当led正极接面包板正极,那么负极电平为低电平:亮
当led负极接面包板负极,那么正极电平为高电平:亮
当led负极接面包板负极,那么正极电平为高电平:不亮
当led正极接面包板正极,那么负极电平为高电平:不亮

1.2核心函数:

GPIO_SetBits(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin)*

给所指定的引脚输出高电平:参数一:GPIOX,参数二:引脚名
Eg:GPIO_SetBits(GPIOA, GPIO_Pin_8)** 指定GPIOA的8号引脚输出高电平(PA8输出高电平)
#include “stm32f10x.h” // Device header
#include “Delay.h”

int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);
while(1)
{
	//GPIO_SetBits(GPIOA,GPIO_Pin_8);
	//Delay_ms(200);
	GPIO_SetBits(GPIOA,GPIO_Pin_8);
	//Delay_ms(200);

}

}
现象:(推挽模式下)LED不亮 ()

GPIO_ResetBits(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin)*

参数同上,区别是此函数是指定输出引脚电平为低电平

#include “stm32f10x.h” // Device header
#include “Delay.h”

int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);
while(1)
{
	//GPIO_SetBits(GPIOA,GPIO_Pin_8);
	//Delay_ms(200);
	GPIO_ResetBits(GPIOA,GPIO_Pin_8);
	//Delay_ms(200);

}

}
现象:led亮接线图

GPIO_WriteBit(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin, BitAction BitVal)*

给指定GPIO口输出电平,参数一:GPIOx,参数二:指定引脚口,参数三:高/低 电平(Bit_SET/Bit_RESET)

对比前两个函数:函数名不一样,多了一个参数,可以理解为通过参数三,让此函数可以替代前两个函数,实现高低电平输出
Eg:当led正极接面包板正极,负极接PA8时
#include “stm32f10x.h” // Device header
#include “Delay.h”

int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);
while(1)
{
	//GPIO_WriteBit(GPIOA,GPIO_Pin_8,);
	//Delay_ms(200);
	GPIO_WriteBit(GPIOA,GPIO_Pin_8,Bit_RESET);
	//Delay_ms(200);

}

}

现象:led亮 (将Bit_RESET改为Bit_SET)——led不亮

此时,将led正极接PA8,负极接面包板负极
#include “stm32f10x.h” // Device header
#include “Delay.h”

int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);
while(1)
{
	//GPIO_WriteBit(GPIOA,GPIO_Pin_8,);
	//Delay_ms(200);
	GPIO_WriteBit(GPIOA,GPIO_Pin_8,Bit_SET);
	//Delay_ms(200);

}

}
现象:led亮 (将Bit_RESET改为Bit_RESET)——led不亮

那么在上述三个亮灭函数的基础上,如何让led实现闪烁?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值