STM32F407VET6开发 | 学习笔记Day2

目录

一、LED灯

1.原理图

2.添加库文件

3.代码部分

二、蜂鸣器

1.基本概述

2.原理图

3.代码部分

三、按键

1.原理图

2.代码部分

四、系统时钟

1.时钟源和锁相环

2.原理图

3.滴答定时器(SysTick)

3.1原理图

3.2代码部分(ms与us定时器)


一、LED灯

1.原理图

2.添加库文件

3.代码部分

led.h

#ifndef __LED_H__
#define __LED_H__
#include "stm32f4xx.h"                  // Device header

void LED_init(void);	//初始化
void LED1_on(void);		//打开LED1
void LED1_off(void);	//关闭LED1
void LED2_on(void);		//打开LED2
void LED2_off(void);	//关闭LED2
void LED3_on(void);		//关闭LED3
void LED3_off(void);	//关闭LED3

#endif

led.c

#include "led.h"

/*********************************************
*功能:初始化LED灯
*参数:无
*返回值:无
*其他:
*根据原理图
*	LED1 ---- PE8
*	LED1 ---- PE9
*	LED1 ---- PE10
*	高电平灭,低电平亮
***********************************************/
void LED_init(void)
{
	/*********1.开启时钟******************************/
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
	
	/*********2.初始化GPIO相关引脚*********************/	
	GPIO_InitTypeDef GPIO_InitStruct;

	GPIO_InitStruct.GPIO_Mode =  GPIO_Mode_OUT;						  //模式:输出模式
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;						  //输出:推挽
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10; //引脚:8、9、10
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;						  //上下拉:上拉

	GPIO_Init(GPIOE,&GPIO_InitStruct);

	/*********3.初始化引脚状态*********************/
	GPIO_SetBits(GPIOE,GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10);	//引脚给高电平,默认灭灯

}

/*********************************************
*功能:开LED1灯
*参数:无
*返回值:无
*其他:
*根据原理图
*	LED1 ---- PE8
*	LED1 ---- PE9
*	LED1 ---- PE10
*	高电平灭,低电平亮
***********************************************/
void LED1_on(void)
{
	GPIO_ResetBits(GPIOE,GPIO_Pin_8);	//引脚给低电平,亮灯
}
/*********************************************
*功能:关LED1灯
*参数:无
*返回值:无
*其他:
*根据原理图
*	LED1 ---- PE8
*	LED1 ---- PE9
*	LED1 ---- PE10
*	高电平灭,低电平亮
***********************************************/
void LED1_off(void)
{
	GPIO_SetBits(GPIOE,GPIO_Pin_8);		//引脚给高电平,灭灯
}

/*********************************************
*功能:开LED2灯
*参数:无
*返回值:无
*其他:
*根据原理图
*	LED1 ---- PE8
*	LED1 ---- PE9
*	LED1 ---- PE10
*	高电平灭,低电平亮
***********************************************/
void LED2_on(void)
{
	GPIO_ResetBits(GPIOE,GPIO_Pin_9);    //引脚给低电平,亮灯
}

/*********************************************
*功能:关LED2灯
*参数:无
*返回值:无
*其他:
*根据原理图
*	LED1 ---- PE8
*	LED1 ---- PE9
*	LED1 ---- PE10
*	高电平灭,低电平亮
***********************************************/
void LED2_off(void)
{
	
	GPIO_SetBits(GPIOE,GPIO_Pin_9);		//引脚给低电平,亮灯
}

/*********************************************
*功能:开LED3灯
*参数:无
*返回值:无
*其他:
*根据原理图
*	LED1 ---- PE8
*	LED1 ---- PE9
*	LED1 ---- PE10
*	高电平灭,低电平亮
***********************************************/
void LED3_on(void)
{
	GPIO_ResetBits(GPIOE,GPIO_Pin_10);		//引脚给低电平,亮灯
}

/*********************************************
*功能:关LED3灯
*参数:无
*返回值:无
*其他:
*根据原理图
*	LED1 ---- PE8
*	LED1 ---- PE9
*	LED1 ---- PE10
*	高电平灭,低电平亮
***********************************************/
void LED3_off(void)
{
	GPIO_SetBits(GPIOE,GPIO_Pin_10);	//引脚给低电平,亮灯
}

二、蜂鸣器

1.基本概述

蜂鸣器:分为有源和无源,有源给电就能用,无源需要自己配置信号源。

三极管:分为基极(Base)、发射极(Emitter)和集电极(Collecor) ,作用是小电流控制大电流,放大信号。

2.原理图

3.代码部分

beep.h

#ifndef __BEEP_H__
#define __BEEP_H__
#include "stm32f4xx.h"                  // Device header

void BEEP_init(void);	//初始化蜂鸣器
void BEEP_on(void);		//开启蜂鸣器
void BEEP_off(void);	//关闭蜂鸣器

#endif

beep.c

#include "beep.h"
/*********************************************
*功能:初始化BEEP蜂鸣器
*参数:无
*返回值:无
*其他:
*   根据原理图
*	BEEP ---- PB10
*	高电平响,低电平不响
***********************************************/
void BEEP_init(void)
{
	/**********1.使能GPIOB 外设时钟 ********************/
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
	/**********2.初始化GPIO相关引脚**********************/
	GPIO_InitTypeDef GPIO_InitStruct;
	
	GPIO_InitStruct.GPIO_Mode =  GPIO_Mode_OUT;		//模式:输出
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;		//输出:推挽
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;			//引脚:10
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;		//上下拉:上拉
	
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	/************************END*************************/
	
	/***************3.设置默认电平(不响)***************/	
	GPIO_ResetBits(GPIOB,GPIO_Pin_10);

}
/*********************************************
*功能:打开BEEP蜂鸣器
*参数:无
*返回值:无
*其他:
*   根据原理图
*	BEEP ---- PB10
*	高电平响,低电平不响
***********************************************/
void BEEP_on(void)
{
	GPIO_SetBits(GPIOB,GPIO_Pin_10);	//高电平响
}
/*********************************************
*功能:关闭BEEP蜂鸣器
*参数:无
*返回值:无
*其他:
*   根据原理图
*	BEEP ---- PB10
*	高电平响,低电平不响
***********************************************/
void BEEP_off(void)
{
	GPIO_ResetBits(GPIOB,GPIO_Pin_10);	//低电平不响
}

三、按键

1.原理图

2.代码部分

key.h

#ifndef __KEY_H__
#define __KEY_H__
#include "stm32f4xx.h"                  // Device header

void KEY_Init(void);	//初始化KEY按键
u8 KEY_Scan(void);		//扫描按键获取键值

#endif

key.c

#include "key.h"

/*********************************************
*功能:初始化KEY按键
*参数:无
*返回值:无
*其他:
*	原理图
*	KEY1 ---- PE4
*	KEY2 ---- PE5
*	KEY3 ---- PE6
*	KEY4 ---- PC13
***********************************************/
void KEY_Init(void)
{
	/*******1.使能外设时钟***************/
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOE,ENABLE);
	
	/*******2.初始化GPIO引脚*************/
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;	//模式:输入
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;		//引脚: 13
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;	//上下拉: 上拉
	
	GPIO_Init(GPIOC, &GPIO_InitStruct);
	
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;	//引脚: 4、5、6
	GPIO_Init(GPIOE, &GPIO_InitStruct);
}

/*********************************************
*功能:扫描按键
*参数:无
*返回值:KEY1返回1,KEY2返回2,KEY3返回3,KEY4返回4,无按键返回0
*其他:
*	原理图
*	KEY1 ---- PE4
*	KEY2 ---- PE5
*	KEY3 ---- PE6
*	KEY4 ---- PC13
***********************************************/
#define KEY1 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4)
#define KEY2 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_5)
#define KEY3 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_6)
#define KEY4 GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13)
extern void delay_ms();

u8 KEY_Scan(void)
{
	static u8 flag = 1;	//无键按下标志位为1
	
	if( (!KEY1 || !KEY2 || !KEY3 || !KEY4) && (flag == 1))
	{
		flag = 0;
		delay_ms(5);		//消抖
		if(!KEY1) return 1;
		if(!KEY2) return 2;
		if(!KEY3) return 3;
		if(!KEY4) return 4;
	}
	
	if( KEY1 && KEY2 && KEY3 && KEY4)
	{
		flag = 1;
	}
	
	return 0;
}


main.c

#include "stm32f4xx.h"                  // Device header
#include "key.h"
#include "led.h"
#include "beep.h"

/*********************************************
*功能:粗略毫秒定时
*参数:
*	ms:毫秒()
*返回值:无
*其他:无
***********************************************/
void delay_ms(uint32_t ms)
{
	for(uint32_t i=0 ; i < (ms * 10000) ;i++)
	{
		__NOP();
	}
}

int main()
{
	/*************1.调用初始化函数*******************/
	KEY_Init();
	LED_init();
	BEEP_init();
	
	/**************2.定义相关变量********************/
	u8 key;	
	/**************3.进入操作************************/
	while(1)
	{
		key = KEY_Scan();         //获取键值
		switch(key)
		{
			case 1 :
				GPIO_ToggleBits(GPIOE, GPIO_Pin_8);		//LED1位反转
				break;
			case 2 :
				GPIO_ToggleBits(GPIOE, GPIO_Pin_9);		//LED2位反转
				break;
			case 3 :
				GPIO_ToggleBits(GPIOE, GPIO_Pin_10);	//LED3位反转
				break;
			case 4 :
				GPIO_ToggleBits(GPIOC, GPIO_Pin_13);	//LED4位反转
				break;
		}
	}
}

四、系统时钟

1.时钟源和锁相环

LSI: 低速内部时钟

LSE:低速外部时钟

HSI: 高速内部时钟

HSE:高速外部时钟

PLL: 锁相环

2.原理图

3.滴答定时器(SysTick)
3.1原理图

3.2代码部分(ms与us定时器)

systick.h

#ifndef __SYSTICK_H__
#define __SYSTICK_H__
#include "stm32f4xx.h"                  // Device header

void systick_Init(u8 SYSTICK);		//初始化滴答定时器
void delay_us(u32 us);				//微秒定时器
void delay_ms(u32 ms);				//毫秒定时器

#endif

systick.c

#include "systick.h"

u32 _us;

/**************************************
功能:初始化滴答定时器
参数:
	@SYSTICK:时钟频率
返回值:无
其他:
****************************************/
void systick_Init(u8 SYSTICK)
{
	//配置时钟为八分频
	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
	//一微秒跳动次数
	_us = SYSTICK / 8;		// 168/8 = 21
}

/**************************************
功能:微秒定时器
参数:
	@us:微秒
返回值:无
其他:
****************************************/
void delay_us(u32 us)
{
	SysTick->VAL = 0;				//初始化当前计数值
	SysTick->LOAD = us * _us;		//装载计数
	SysTick->CTRL |= 0x1;	//使能嘀嗒时钟
	
	while( !((SysTick->CTRL >> 16) & 0x1) )
	{
		
	}
	SysTick->VAL = 0;				//重置计数值
	SysTick->CTRL &= ~(0x1);		//关闭嘀嗒时钟
}

/**************************************
功能:毫秒定时器
参数:
	@ms:毫秒
返回值:无
其他:
****************************************/
void delay_ms(u32 ms)
{
	while(ms--)
	{
		delay_us(1000);
	}
}

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值