• 方案介紹
    • 【1】F407建工程所需依賴文件
    • 【2】 新建工程
    • 【3】分析LED硬件原理圖
    • 【4】編寫LED驅(qū)動(dòng)代碼
    • 【5】編譯代碼 配置下載
    • 【6】編寫無源蜂鳴器驅(qū)動(dòng)代碼
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

STM32F407 GPIO口輸出配置配置步驟

03/27 08:21
575
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

更多詳細(xì)資料請聯(lián)系.docx

共1個(gè)文件

STM32F407ZGT6 是意法半導(dǎo)體(STMicroelectronics)公司推出的一款高性能ARM Cortex-M4核心的32位微控制器MCU)。它是 STM32F4 系列的一員,具備強(qiáng)大的處理能力和豐富的外設(shè)功能,適用于各種應(yīng)用領(lǐng)域。

【1】F407建工程所需依賴文件

img

img

img

img

img

img

【2】 新建工程

img

img

img

img

img

img

img

img

img

img

img

img

img

說明:STM32F4 的主頻最高是 168Mhz,所以我們一般設(shè)置 PLLCLK 為 168Mhz(M=8,N=336,P=2),通過 SW 選擇 SYSCLK=PLLCLK即可得到 168Mhz 的系統(tǒng)運(yùn)行頻率。

【3】分析LED硬件原理圖

img

img

img

【4】編寫LED驅(qū)動(dòng)代碼

查看數(shù)據(jù)手冊:

img

img

Led.c文件代碼如下:

#include "led.h"
/*
函數(shù)功能:LED初始化
硬件連接:
PF8-->BEEP  --高電平響
PF9-->LED0  --低電平亮
PF10->LED1  --低電平亮
*/
void LED_Init(void)
{
		/*1. 開時(shí)鐘*/
	  RCC->AHB1ENR|=1<<5;//使能PORTF時(shí)鐘
		
	  /*2. 配置GPIO口模式*/
	  GPIOF->MODER&=~(0x3<<8*2); //清除模式
		GPIOF->MODER|=0x1<<8*2;    //配置輸出模式
		
		GPIOF->MODER&=~(0x3<<9*2); //清除模式
		GPIOF->MODER|=0x1<<9*2;    //配置輸出模式
	
		GPIOF->MODER&=~(0x3<<10*2); //清除模式
		GPIOF->MODER|=0x1<<10*2;    //配置輸出模式
	
	  /*3. 配置GPIO口輸出類型*/
		GPIOF->OTYPER&=~(0x1<<8);  //0表示推挽輸出
		GPIOF->OTYPER&=~(0x1<<9);  //0表示推挽輸出
		GPIOF->OTYPER&=~(0x1<<10); //0表示推挽輸出
	
		/*4. 配置GPIO口輸出速度*/
		GPIOF->OSPEEDR&=~(0x3<<8*2); //清除之前配置
		GPIOF->OSPEEDR|=0x2<<8*2;    //50MHZ輸出速度
		
		GPIOF->OSPEEDR&=~(0x3<<9*2); //清除之前配置
		GPIOF->OSPEEDR|=0x2<<9*2;    //50MHZ輸出速度
		
		GPIOF->OSPEEDR&=~(0x3<<8*2); //清除之前配置
		GPIOF->OSPEEDR|=0x2<<10*2;   //50MHZ輸出速度
		
		/*5. 配置GPIO口輸出默認(rèn)電平*/
		GPIOF->ODR|=1<<10;   	//輸出1
		GPIOF->ODR|=1<<9;   	//輸出1
		GPIOF->ODR&=~(1<<8);  //輸出0
}



Led.h代碼如下

#ifndef _LED_H
#define _LED_H
#include "stm32f4xx.h"
void LED_Init(void);
#define LED0(x) if(x){GPIOF->ODR|=1<<9;}else{GPIOF->ODR&=~(1<<9);}
#define LED1(x) if(x){GPIOF->ODR|=1<<10;}else{GPIOF->ODR&=~(1<<10);}
#define BEEP(x) if(x){GPIOF->ODR|=1<<8;}else{GPIOF->ODR&=~(1<<8);}
#endif

Main.c代碼如下

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

void DelayMs(u32 time)
{
		u32 a,b,c;
		for(a=0;a<time;a++)
			for(b=0;b<100;b++)
				for(c=0;c<450;c++);
}

int main(void)
{
		LED_Init();
		while(1)
		{
			LED0(0);
			LED1(0);
		//	BEEP(0);
			DelayMs(1000);
			LED0(1);
			LED1(1);
			//BEEP(1);
			DelayMs(1000);	
		}
}

【5】編譯代碼 配置下載

img

img

img

【6】編寫無源蜂鳴器驅(qū)動(dòng)代碼

Delay.c延時(shí)函數(shù)代碼

#include "delay.h"
/*
功能  :毫秒級別的延時(shí)函數(shù)
參數(shù)  :填入延時(shí)的時(shí)間
返回值:無
說  明:頻率在168MHZ情況下使用
*/
void DelayMs(u32 time)
{
	u32 a,b,c;
	for(a=0;a<time;a++)
		for(b=0;b<100;b++)
			for(c=0;c<450;c++);
}


/*
功能  :微秒級別的延時(shí)函數(shù)
參數(shù)  :填入延時(shí)的時(shí)間
返回值:無
說  明:頻率在168MHZ情況下使用
*/
void DelayUs(u32 time)
{
	u32 k;
	while(time--)
	{
		k=40;
		while(k--);
	}
}


Led.c代碼

#include "led.h"
/*
函數(shù)功能:LED初始化
硬件連接:
PF8-->BEEP  --高電平響
PF9-->LED0  --低電平亮
PF10->LED1  --低電平亮
*/
void LED_Init(void)
{
		/*1. 開時(shí)鐘*/
	  RCC->AHB1ENR|=1<<5;//使能PORTF時(shí)鐘
		
	  /*2. 配置GPIO口模式*/
	  GPIOF->MODER&=~(0x3<<8*2); //清除模式
		GPIOF->MODER|=0x1<<8*2;    //配置輸出模式
		
		GPIOF->MODER&=~(0x3<<9*2); //清除模式
		GPIOF->MODER|=0x1<<9*2;    //配置輸出模式
	
		GPIOF->MODER&=~(0x3<<10*2); //清除模式
		GPIOF->MODER|=0x1<<10*2;    //配置輸出模式
	
	  /*3. 配置GPIO口輸出類型*/
		GPIOF->OTYPER&=~(0x1<<8);  //0表示推挽輸出
		GPIOF->OTYPER&=~(0x1<<9);  //0表示推挽輸出
		GPIOF->OTYPER&=~(0x1<<10); //0表示推挽輸出
	
		/*4. 配置GPIO口輸出速度*/
		GPIOF->OSPEEDR&=~(0x3<<8*2); //清除之前配置
		GPIOF->OSPEEDR|=0x2<<8*2;    //50MHZ輸出速度
		
		GPIOF->OSPEEDR&=~(0x3<<9*2); //清除之前配置
		GPIOF->OSPEEDR|=0x2<<9*2;    //50MHZ輸出速度
		
		GPIOF->OSPEEDR&=~(0x3<<8*2); //清除之前配置
		GPIOF->OSPEEDR|=0x2<<10*2;   //50MHZ輸出速度
		
		/*5. 配置GPIO口輸出默認(rèn)電平*/
		GPIOF->ODR|=1<<10;   	//輸出1
		GPIOF->ODR|=1<<9;   	//輸出1
		GPIOF->ODR&=~(1<<8);  //輸出0
}

/*
1/2000HZ=0.0005s=0.5ms=500us
1/4000HZ=0.25ms
控制蜂鳴器:產(chǎn)生2KHZ~5KHZ的方波即可
*/
void BEEP_Ctlrl(u8 cmd,u32 time)
{
		u8 i;
		if(cmd) //打開蜂鳴器
		{
				for(i=0;i<time;i++)
				{
						BEEP(0);
						DelayUs(250);
						BEEP(1);
						DelayUs(250);
				}
		}
		else   //關(guān)閉蜂鳴器
		{
				BEEP(0);
				for(i=0;i<time;i++)DelayUs(250);
		}
}

Mian.c主函數(shù)代碼

#include "stm32f4xx.h" // Device header
#include "led.h"
#include "delay.h"

int main(void)
{
		u8 i;
		LED_Init();
		while(1)
		{
				 i=!i;
				 BEEP_Ctlrl(i,200);
		}
}

  • 更多詳細(xì)資料請聯(lián)系.docx
    下載
意法半導(dǎo)體

意法半導(dǎo)體

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(fèi)(17%),計(jì)算機(jī)(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計(jì)數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車用集成電路領(lǐng)域居世界前列.

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(fèi)(17%),計(jì)算機(jī)(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計(jì)數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車用集成電路領(lǐng)域居世界前列.收起

查看更多

相關(guān)推薦