STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键

    1.新建一个文件夹。



    2.新建一个工程- new project - 定位到文件夹中 -命名。

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第1张图片



    3.选择芯片。

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第2张图片



    4.选择 :
        CMSIS 标准 - core勾选
        DEVICE - startup 勾选
        标准库 -     

                GPIO勾选
                framework勾选
                RCC勾选
                //或者点击resolve解决这个问题。
                //五个勾就算完成任务。

core

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第3张图片

startup

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第4张图片

图片:

 GPIO勾选
  framework勾选
RCC勾选

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第5张图片

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第6张图片


    5.点击三个方块 - 新建文件夹,组织文件结构(改变工程文件夹的名字  (可以不操作))

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第7张图片


 
    6.新建文件c文件并且添加进工程当中。
        //右键 - add new items to this group

        1.新建.c 文件 保存

        2.然后添加到文件夹里面就可以(直接左边的项目栏 里面的  文件夹  右键, 添加,就行了)



    7.新编写一个主函数并且编译。



    8.进到stm32f4xx.h中的109行的宏添加到 options for target c/c++中;
        //再编译一下就没有错误了。

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第8张图片


 9.使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键

寄存器的地址     RCC  基地址;0x40023800

时钟地址

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第9张图片

    1配置时钟:找到AHB1总线的寄存器位    //找到各种功能所对应的寄存器位
    RCC  的地址    (初始化,LED 的引脚GPIOE   让他使能!!)
    基地址 + 偏移地址;    0x4002 3800 + 0x30

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第10张图片

使这个地址的数值等于:0x10

	unsigned int * PECLK =(unsigned int *)(0x40023800 + 0x30);//寄存器的位置
	*PECLK = 0X10;//寄存器的赋值

 10.配置引脚:模式:输出模式  输出类型  速度  电阻 引脚输出的电平  :也要找到寄存器位
    基地址+偏移地址; //查手册:存储器映射    0x40021000 + 0x00 : 

配置引脚:

1.我们要找的引脚是  GPIOE   (地址 :  0x40021000)

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第11张图片

 2.然后找到GPIO 配置引脚的部分:

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第12张图片

 STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第13张图片

GIOPE 引脚输出设置的地址  (基本地址 + 偏移量 )

地址: 0x40021000   +  0x00

赋值的大小:  (1<<2*8  | 1 << 2 * 9 | 1 << 2*10);

或者为0x1a0000

代码:

unsigned int * PEMODE = (void*)(0x40021000 + 0x00);//GPIO 的地址
*PEMODE = (1<<2*8  | 1 << 2 * 9 | 1 << 2*10);//设置为GPIOE  8 9 10 这些引脚为输出引脚


输出类型  :   (也可以不设置   因为默认状态是  推挽输出) 

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第14张图片

 STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第15张图片

 地址 (基地址  + 偏移地址)=    GPIOE   (地址 :  0x40021000)+ (偏移地址  0x04)

赋值的大小:0x000

代码:

unsigned int * PEMODE_leixing = (void*)(0x40021000 + 0x04);//设置引脚的输出类型
*PEMODE_leixing=0x000;//设置输出类型 为推挽输出

 速度:  (假如设置引脚的速度为低速  也可以不要设置,因为它默认是 低速)

 STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第16张图片

地址 (基地址  + 偏移地址)=    GPIOE   (地址 :  0x40021000)+ (偏移地址  0x08)

赋值的大小:0x30000

代码:

unsigned int * PESPEED = (void*)(0x40021000 + 0x08);//设置引脚 的速度
*PESPEED =0x10000;//引脚8 为 中速  9  10  为低速

 电阻:     (LED  亮  一般配置 上拉电阻)

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第17张图片

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第18张图片

地址 (基地址  + 偏移地址)=    GPIOE   (地址 :  0x40021000)+ (偏移地址  0x0c)

赋值的大小:0x150000

代码:

unsigned int * PEMODE_dianzu = (void*)(0x40021000 + 0x0c);//设置引脚的电阻
*PEMODE_dianzu=0x150000;//引脚8 为 中速  9  10 为上拉电阻

引脚输出的电平 :(LED 灯亮  为输出低电平)

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第19张图片

地址 (基地址  + 偏移地址)=    GPIOE   (地址 :  0x40021000)+ (偏移地址  0x14)

赋值的大小:0x0 (0)

代码:

unsigned int *PEdata = (void*)(0x40021000 + 0x14);//设置引脚的输出的电平
	*PEdata = 0;//设置引脚都输出低电平


LED 亮的   总的代码:

#include "stm32f4xx.h"
//.寄存器方法配置GPIO接口功能:1点亮一个灯-打开蜂鸣器-按键检测
int main()
{
		//GPIOE-8 9 10 ; //
	unsigned int * PECLK =(unsigned int *)(0x40023800 + 0x30);
	unsigned int * PEMODE = (void*)(0x40021000 + 0x00);//设置引脚为 输出模式 或者输入模式
	unsigned int * PEMODE_leixing = (void*)(0x40021000 + 0x04);//设置引脚的输出类型
	unsigned int * PEMODE_dianzu = (void*)(0x40021000 + 0x0c);//设置引脚的电阻
	unsigned int * PESPEED = (void*)(0x40021000 + 0x08);//设置引脚 的速度
	unsigned int *PEdata = (void*)(0x40021000 + 0x14);//设置引脚的输出的电平
	//1配置时钟:找到AHB1总线的寄存器位	//找到各种功能所对应的寄存器位
	//RCC  的地址 
	//基地址 + 偏移地址;	0x4002 3800 + 0x30
	// 0000 0000 0000 0000 0000 0000 0001 0000 = 0x10;	
	*PECLK = 0X10;//设置时钟
	
	
	//2.配置引脚:模式:输出模式  输出类型  速度  电阻 引脚  :也要找到寄存器位
	//基地址+偏移地址;//查手册:存储器映射
	//0x40021000 + 0x00 : 
	
	
	// 0000 0000 0000 0001 0000 0000 0000 0000  = 0x10000;
	//*PEMODE = 0X10000;
	*PEMODE = (1<<2*8  | 1 << 2 * 9 | 1 << 2*10);//设置引脚 8  9  10 引脚为输出模式
	*PEMODE_leixing=0x000;//设置输出类型 为推挽输出
	*PESPEED =0x10000;//引脚8 为 中速  9  10  为低速
	*PEMODE_dianzu=0x150000;//引脚8 为 中速  9  10 为上拉电阻

	//3.操作引脚:输出低电平   //也要找到寄存器位
	//数据寄存器;
	//0x40021000 + 0x14
	
	*PEdata = 0;//设置引脚都输出低电平

	//防止程序跑飞
	while(1);
}



11.使用寄存器 使 蜂鸣器 响 或者关闭!

1.首先配置时钟:

 寄存器的地址     RCC  基地址;0x40023800

时钟地址

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第20张图片

    1配置时钟:找到AHB1总线的寄存器位    //找到各种功能所对应的寄存器位
    RCC  的地址    (初始化,LED 的引脚GPIOE   让他使能!!)
    基地址 + 偏移地址;    0x4002 3800 + 0x30

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第21张图片

使这个地址的数值等于:0x02

	unsigned int * PECLK =(unsigned int *)(0x40023800 + 0x30);//寄存器的位置
	*PECLK = 0X02;//寄存器的赋值

 1.设置引脚的输出模式  (蜂鸣器的引脚是   GPIOB   10)

我们要找的引脚是  GPIOB  (地址 :  0x40020400) 

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第22张图片

 2.然后找到GPIO 配置引脚的部分:

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第23张图片

 STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第24张图片

GIOPB 引脚输出设置的地址  (基本地址 + 偏移量 )

地址:0x40020400   +  0x00

赋值的大小:  

或者为0x100000

代码:

unsigned int * BEEP_PEMODE = (void*)(0x40020400 + 0x00);//设置引脚为 输出模式 或者输入模式
	*BEEP_PEMODE=0x100000;//设置引脚为 GPIOB  10 输出模式

输出类型  :   (也可以不设置   因为默认状态是  推挽输出) 

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第25张图片

 STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第26张图片

 地址 (基地址  + 偏移地址)=    GPIOB  (地址 :  0x40020400)+ (偏移地址  0x04)

赋值的大小:0x000

代码:

unsigned int * BEEP_PEMODE_leixing = (void*)(0x40020400 + 0x04);//设置引脚的输出类型
*BEEP_PEMODE_leixing=0x000000;//设置输出类型 为推挽输出

 速度:  (假如设置引脚的速度为低速  也可以不要设置,因为它默认是 低速)

 STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第27张图片

地址 (基地址  + 偏移地址)=    GPIOB   (地址 :  0x40020400)+ (偏移地址  0x08)

赋值的大小:0x00000

代码:

	unsigned int * BEEP_PESPEED = (void*)(0x40020400 + 0x08);//设置引脚 的速度
*BEEP_PESPEED=0x0000;//设置引脚 的速度 GPIOB 10 为低速

 电阻:     (  蜂鸣器  一般配置 上拉电阻)

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第28张图片

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第29张图片

地址 (基地址  + 偏移地址)=     GPIOB   (地址 :  0x40020400)+ (偏移地址  0x0c)

赋值的大小:0x100000

代码:

	unsigned int * BEEP_PEMODE_dianzu = (void*)(0x40020400 + 0x0c);//设置引脚的电阻
*BEEP_PEMODE_dianzu=0x100000;//引脚  10 为上拉电阻

引脚输出的电平 :( 蜂鸣器响  为输出高电平)

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第30张图片

地址 (基地址  + 偏移地址)=    GPIOB   (地址 :  0x40020400)+ (偏移地址  0x14)

赋值的大小:0x400 

代码:

unsigned int * BEEP_PEdata = (void*)(0x40020400 + 0x14);//设置引脚的输出的电平
*BEEP_PEdata =0x400;//开启蜂鸣器
				//*BEEP_PEdata =0x0000;//关闭蜂鸣器

蜂鸣器的所有代码:

unsigned int * BEEP_PECLK =(unsigned int *)(0x40023800 + 0x30);//配置时钟
				unsigned int * BEEP_PEMODE = (void*)(0x40020400 + 0x00);//设置引脚为 输出模式 或者输入模式
				unsigned int * BEEP_PEMODE_leixing = (void*)(0x40020400 + 0x04);//设置引脚的输出类型
				unsigned int * BEEP_PEMODE_dianzu = (void*)(0x40020400 + 0x0c);//设置引脚的电阻
				unsigned int * BEEP_PESPEED = (void*)(0x40020400 + 0x08);//设置引脚 的速度
				unsigned int * BEEP_PEdata = (void*)(0x40020400 + 0x14);//设置引脚的输出的电平
	
				*BEEP_PECLK= 0X02;//设置时钟
				*BEEP_PEMODE=0x100000;//设置引脚为 GPIOB  10 输出模式
				*BEEP_PEMODE_leixing=0x000000;//设置输出类型 为推挽输出
				*BEEP_PEMODE_dianzu=0x100000;//引脚  10 为上拉电阻
				*BEEP_PESPEED=0x0000;//设置引脚 的速度 GPIOB 10 为低速
				*BEEP_PEdata =0x400;//开启蜂鸣器
				//*BEEP_PEdata =0x0000;//关闭蜂鸣器


12.KEY 模块的代码:

//1.时钟   //配置好 PE 和 PB时钟
		AHB1 = 0x12; 
	
		//2.1配置灯   //输出模式 灯的其他部分用默认值
		unsigned int *PEMODELED = (void*)(0x40021000 + 0x00);
		*PEMODELED = (1<<8*2 | 1<<9*2 | 1<<10*2); 
	
		//2.2:配置按键
		*PEMODELED |= 0x000;//位或有添加位的功能;//0000 1000 | 0100 0000 = 0100 1000
		//2.3:配置蜂鸣器
		unsigned int *PBMODEBEEP = (void*)(0x40020400 +0x00 );
		*PBMODEBEEP = 1<<10*2;
		//2.4:给按键配置一个上拉电阻
		unsigned int *PEKEYUPDER = (void*)(0x40021000 + 0X0C);
		*PEKEYUPDER = 1 << 5*2 ;
	
		
		//3.操作部分  三个关灯操作
		unsigned int *PEDATALED = (void*)(0x40021000 + 0x14);
		*PEDATALED =(1<<8 | 1<<9 | 1<<10);
		//3.1蜂鸣器数据寄存器
		unsigned int *PBBEEPDATA =(void*)( 0x40020400 + 0x14);
		

		//4.按键的输入数据寄存器准备好
		unsigned int *PEKEYINPUT = (void*)(0x40021000 + 0X10);
		
		while(1)
		{	
			//
			if(!(*PEKEYINPUT & 0x20))//假如按下第二个按键
			{
					*PEDATALED = 0x00;//LED 灯 低电平
					*PBBEEPDATA = (1 <<10);//BEEP  响
			}
			if(!(*PEKEYINPUT & 0x40))//假如按下第三个按键
			{
					*PEDATALED =(1<<8 | 1<<9 | 1<<10);//关闭LED 灯
			}
		
		}




附加的知识:

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第31张图片

STM32F407 芯片的学习 day03 工程模块建立的新的办法,和使用寄存器 来点亮LED 灯 , 蜂鸣器, key 按键_第32张图片


你可能感兴趣的:(#,stm32f407,单片机技术学习,stm32,学习,单片机)