STM32F407 GPIO口输出配置配置步骤

这篇具有很好参考价值的文章主要介绍了STM32F407 GPIO口输出配置配置步骤。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32F407ZGT6 是意法半导体(STMicroelectronics)公司推出的一款高性能ARM Cortex-M4核心的32位微控制器(MCU)。它是 STM32F4 系列的一员,具备强大的处理能力和丰富的外设功能,适用于各种应用领域。

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

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

【2】 新建工程

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

说明:STM32F4 的主频最高是 168Mhz,所以我们一般设置 PLLCLK 为 168Mhz(M=8,N=336,P=2),通过 SW 选择 SYSCLK=PLLCLK即可得到 168Mhz 的系统运行频率。

【3】分析LED硬件原理图

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

【4】编写LED驱动代码

查看数据手册:

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

Led.c文件代码如下:

#include "led.h"
/*
函数功能:LED初始化
硬件连接:
PF8-->BEEP  --高电平响
PF9-->LED0  --低电平亮
PF10->LED1  --低电平亮
*/
void LED_Init(void)
{
		/*1. 开时钟*/
	  RCC->AHB1ENR|=1<<5;//使能PORTF时钟
		
	  /*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口输出默认电平*/
		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】编译代码 配置下载

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

STM32F407 GPIO口输出配置配置步骤,STM32F103系列(项目实战),stm32,嵌入式硬件,单片机,F407

【6】编写无源蜂鸣器驱动代码

Delay.c延时函数代码

#include "delay.h"
/*
功能  :毫秒级别的延时函数
参数  :填入延时的时间
返回值:无
说  明:频率在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++);
}


/*
功能  :微秒级别的延时函数
参数  :填入延时的时间
返回值:无
说  明:频率在168MHZ情况下使用
*/
void DelayUs(u32 time)
{
	u32 k;
	while(time--)
	{
		k=40;
		while(k--);
	}
}


Led.c代码

#include "led.h"
/*
函数功能:LED初始化
硬件连接:
PF8-->BEEP  --高电平响
PF9-->LED0  --低电平亮
PF10->LED1  --低电平亮
*/
void LED_Init(void)
{
		/*1. 开时钟*/
	  RCC->AHB1ENR|=1<<5;//使能PORTF时钟
		
	  /*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口输出默认电平*/
		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
控制蜂鸣器:产生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   //关闭蜂鸣器
		{
				BEEP(0);
				for(i=0;i<time;i++)DelayUs(250);
		}
}

Mian.c主函数代码文章来源地址https://www.toymoban.com/news/detail-517632.html

#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);
		}
}

到了这里,关于STM32F407 GPIO口输出配置配置步骤的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 串口通信——stm32F407实现串口发送坐标,输出x坐标和y坐标

    通过串口助手发送一个(a,b),需要输出x = a,y = b; 初始化串口; 编写接收数据中断函数; 编写转换函数; 编写main函数。 2.1 初始化串口 2.2 编写接收数据中断函数 2.3 编写转换函数 2.4 main.c函数 如下图所示: 在数据的类型上,x和y的坐标值类型是 int16_t ,就是有正负号

    2024年02月14日
    浏览(41)
  • STM32F407单一定时器输出4路不同频率及占空比的PWM波

    程序效果演示 STM32单一定时器输出四路不同频率及占空比的PWM波 一、程序思路 因为定时器只有一个CNT计数器所以只能有一个输出频率,若要实现多路不同频率波形,只能通过在当前CNT计数器的基础上不断累加自身CCR寄存器的值来触发中断在中断中翻转波形的方式,此时中断

    2024年02月05日
    浏览(54)
  • STM32F407 SPI配置和时序图讲解(二)

    上节讲了SPI的基本配置,这节主要讲解 如何看时序图 ,SPI数据到底是如何传输的。 SPI初始化后,就可以开始向对象发送数据了,但是要发送数据给W25Q128模块,需要按照它的时序图来发送( 个人用的是W25Q128模块 ) W25Q128模块简介 W25Q128是一款常见的串行闪存存储器模块,属

    2024年02月06日
    浏览(34)
  • STM32CubeMX生成C代码及时钟树配置(基于stm32f407)

    近来对于stm32单片机编程中,HAL库逐渐取代标准库成为主流的库。标准库支持的芯片型号有限,而且目前已经停止支持,而HAL库支持所有类型的芯片,可移植性也很高,再加上有神器STM32Cube可以生成工程模板,越来越多的编程开始从使用标准库转到使用HAL库。 新建工程后,在

    2024年02月15日
    浏览(56)
  • 基于stm32F407的hal库,移植FreeRTOS的具体步骤和遇到的问题(看正点原子的视频)

    因为板子是stm32F407的第二版的,所以开始下的资料是旧版本的,但是旧版本的FreeRTOS工程没有hal库的,都是标准库的,这里是下载stm32F407最新版的资料,进行移植。 资料可以在正点原子官网下载,如下: http://www.openedv.com/docs/boards/stm32/index.html 一定要下载最新的资料(开始用

    2024年02月06日
    浏览(79)
  • 从STM32F407到AT32F407(一)

    雅特力公司的MCU有着性能超群,价格优越的巨大优势,缺点是相关资料少一些,我们可以充分利用ST的现有资源来开发它。 我用雅特力的STM32F437开发板,使用原子 stm32f407的开发板自带程序,测试串口程序,原设定串口波特率为115200,但是输出乱码,波特率改成230400,串口输

    2024年02月02日
    浏览(57)
  • STM32F407使用Helix库软解MP3并通过DAC输出,最精简的STM32+SD卡实现MP3播放器

    只用STM32单片机+SD卡+耳机插座,实现播放MP3播放器! 看过很多STM32软解MP3的方案,即不通过类似VS1053之类的解码器芯片,直接用STM32和软件库解码MP3文件,通常使用了labmad或者Helix解码库实现,Helix相对labmad占用的RAM更少。但是大多数参考的方案还是用了外接IIS接口WM98xx之类的

    2024年02月12日
    浏览(50)
  • 【DRV8323】电机驱动芯片寄存器配置指南,通过STM32F407的SPI通信配置

    笔者计划使用一块使用到STM32F407控制芯片与DRV8323s驱动芯片的板子,驱动BLDC。了解到需要使用SPI通信来配置DRV8323s驱动芯片,配置过程中涉及DRV8323数据手册中提及的几个寄存器,故写此文做个记录。 另外,DRV8323芯片和DRV8302、DRV8303、DRV8353都有极大的相似之处,可以相互参考

    2024年02月02日
    浏览(58)
  • 【正点原子STM32连载】第二十三章 高级定时器互补输出带死区控制实验 摘自【正点原子】APM32F407最小系统板使用指南

    本章将介绍使用APM32F407输出带死区和刹车控制的两路互补PWM。通过本章的学习,读者将学习到高级定时器的互补输出、死区插入和刹车的功能的使用。 本章分为如下几个小节: 23.1 硬件设计 23.2 程序设计 23.3下载验证 23.1 硬件设计 23.1.1 例程功能 定时器8通道1及其互补通道输

    2024年02月09日
    浏览(61)
  • [STM32] - STM32F407VET6使用STM32CubeMX配置FatFs,以及挂载时返回03错误码问题的解决

    为测试新买的开发板TF卡读写是否正常,使用STM32CubeMX(后简称CubeMX)进行代码构建。生成代码后烧录测试,发现在挂载TF卡时无法成功,返回值为错误3( FR_NOT_READY )。经排查后问题已解决,遂记录配置过程供大家参考,并讲解挂载时返回错误3的解决方式。 ①为了输出TF卡(

    2024年02月22日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包