Bootstrap

STM32学习笔记(一)从点灯开始之ST-LINK V2

文章目录

之前介绍了使用串口来下载程序,接下来,我们使用ST-LINK V2来开始我们的正式学习。

前言

在代码编写中,我将采取模块化编程的思想,带领大家一步步编写程序

1、ST-LINK V2的接线及Keil5的配置

在这里插入图片描述
![(https://img-blog.csdnimg.cn/fd8914cb6d1f4264b6bb6849bc1098ad.png)
在这里插入图片描述

2、开始点灯----函数介绍及代码实现

2.1、函数介绍

1、函数名: GPIO_WriteBit
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin, BitAction BitVal)
2、函数名: GPIO_SetBits
void GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
3、函数名: GPIO_ResetBits
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)

2.2、代码实现

while (1)
	{
		//方法1:
    	GPIO_WriteBit(GPIOC,GPIO_Pin_13,(BitAction)(1)); //输出高电平1
//		GPIO_WriteBit(GPIOC,GPIO_Pin_13,(BitAction)(0)); //输出低电平0		
		//方法2:
//		GPIO_SetBits(GPIOC, GPIO_Pin_13);  //输出高电平1
//		GPIO_ResetBits(GPIOC, GPIO_Pin_13);//输出低电平0			
	}

3、让灯闪烁起来----使用延时函数

3.1、延时函数代码

void Delay_us(uint32_t xus)
{
	SysTick->LOAD = 72 * xus;				//设置定时器重装值
	SysTick->VAL = 0x00;					//清空当前计数值
	SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器
	while(!(SysTick->CTRL & 0x00010000));	//等待计数到0
	SysTick->CTRL = 0x00000004;				//关闭定时器
}

3.2、根据微秒我们可以写出毫秒和秒

void Delay_ms(uint32_t xms)
{
	while(xms--)
	{
		Delay_us(1000);
	}
}
void Delay_s(uint32_t xs)
{
	while(xs--)
	{
		Delay_ms(1000);
	}
} 

3.3、完整代码

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	
	while (1)
	{
		GPIO_ResetBits(GPIOC, GPIO_Pin_13);
		Delay_us(500);
		GPIO_SetBits(GPIOC, GPIO_Pin_13);
		Delay_us(500);
		
		GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET);
		Delay_ms(500);
		GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET);
		Delay_ms(500);
		
		GPIO_WriteBit(GPIOC, GPIO_Pin_13, (BitAction)0);
		Delay_s(5);
		GPIO_WriteBit(GPIOC, GPIO_Pin_13, (BitAction)1);
		Delay_s(5);
	}
}

4、呼吸灯

4.1、原理介绍

原理:使用循环和延时函数,让LED亮灭交替。亮的时间占亮灭时间和的比值逐渐增加和减少,让人眼产生灯逐渐变亮和变暗,来达到手动PWM的目的。

4.2、代码展示----变亮循环

	if(flag == 0){ //变亮循环
			for(i = 0; i < 10; i++) //十个等级的亮度
			{
				GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1
				delay_us(t); //延时
				GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED1接口输出低电平0
				delay_us(501-t); //延时
			}
			t++;
			if(t==500){		 //等待0.5s后开始变暗
				flag = 1;
			}
		}

变暗循环

	if(flag== 1){ //变暗循环
			for(i = 0; i < 10; i++)
			{
				GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1
				delay_us(t); //延时
				GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED1接口输出低电平0
				delay_us(501-t); //延时
			}
			t--;
			if(t==1){
				flag= 0;
			}
		}	

5、结语

学习了以上知识,相信对点灯应该炉火纯青了,接下来我们将学习使用按键来控制LED灯。

;