0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32F407 GPIO口输出配置配置步骤

DS小龙哥-嵌入式威廉希尔官方网站 来源:DS小龙哥-嵌入式威廉希尔官方网站 作者:DS小龙哥-嵌入式技 2023-07-06 14:27 次阅读

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

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

img

img

img

img

img

img

【2】 新建工程

img

img

img

img

img

img

img

img

img

img

img

img

img

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

【3】分析LED硬件原理图

img

img

img

【4】编写LED驱动代码

查看数据手册:

img

img

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】编译代码 配置下载

img

img

img

【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主函数代码

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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7551

    浏览量

    151398
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17143

    浏览量

    351127
  • 意法半导体
    +关注

    关注

    31

    文章

    3137

    浏览量

    108615
  • GPIO
    +关注

    关注

    16

    文章

    1204

    浏览量

    52086
  • STM32F407
    +关注

    关注

    15

    文章

    187

    浏览量

    29451
收藏 人收藏

    评论

    相关推荐

    STM32F407 GPIO输入配置配置步骤

    介绍STM32F407新建寄存器工程流程,介绍输入模式的配置方式,以按键为例完成按键输入检测。
    的头像 发表于 07-06 14:28 2287次阅读
    <b class='flag-5'>STM32F407</b> <b class='flag-5'>GPIO</b><b class='flag-5'>口</b>输入<b class='flag-5'>配置</b><b class='flag-5'>配置</b><b class='flag-5'>步骤</b>

    STM32F407 串口配置步骤

    介绍STM32F407配置步骤,完成串口的数据发送与接收、实现中断接收,支持printf重定向。
    的头像 发表于 07-06 14:29 3116次阅读
    <b class='flag-5'>STM32F407</b> 串口<b class='flag-5'>配置</b><b class='flag-5'>步骤</b>

    STM32F407 位带配置步骤

    介绍STM32F407位带操作方法,设置寄存器的偏移量,实现按GPIO指定位进行读写操作,方便编程。
    的头像 发表于 07-06 14:30 1228次阅读
    <b class='flag-5'>STM32F407</b> 位带<b class='flag-5'>配置</b><b class='flag-5'>步骤</b>

    STM32F407 外部中断配置步骤

    介绍STM32F407外部中断配置步骤,以按键为例,实现外部中断配置,使用按键触发中断进行LED灯控制。
    的头像 发表于 07-06 14:31 1985次阅读
    <b class='flag-5'>STM32F407</b> 外部中断<b class='flag-5'>配置</b><b class='flag-5'>步骤</b>

    STM32F407 基本定时器配置输出PWM方波

    介绍STM32F407定时器PWM波形输出配置方式。 通过逻辑分析采集波形数据进行可视化显示对比。
    的头像 发表于 07-06 14:33 5184次阅读
    <b class='flag-5'>STM32F407</b> 基本定时器<b class='flag-5'>配置</b><b class='flag-5'>输出</b>PWM方波

    stm32f407输出pwm波的配置步骤有哪些

    什么是脉冲宽度调制?stm32f407输出pwm波的配置步骤有哪些?
    发表于 10-25 07:15

    STM32F407的DAM输出配置有哪些步骤

    STM32F407的DAM输出配置有哪些步骤呢?怎样去实现其代码呢?
    发表于 01-25 07:22

    stm32f407通信的代码

    stm32f407通信的代码 原理图还有封装 很清楚自己画的
    发表于 03-21 17:22 0次下载

    STM32CubeMX 配置STM32F407 实现HAL库延时微妙方案

    STM32CubeMX 配置STM32F407 实现HAL库延时微妙方案
    发表于 11-24 20:51 20次下载
    <b class='flag-5'>STM32</b>CubeMX <b class='flag-5'>配置</b><b class='flag-5'>STM32F407</b> 实现HAL库延时微妙方案

    [STM32]STM32F407系列教程之二,gpio输入输出实验

    [STM32]STM32F407系列教程之二,gpio输入输出实验
    发表于 11-29 14:06 19次下载
    [<b class='flag-5'>STM32</b>]<b class='flag-5'>STM32F407</b>系列教程之二,<b class='flag-5'>gpio</b>输入<b class='flag-5'>输出</b>实验

    STM32F407的串口UART 基础配置STM32CubeMX

    STM32F407的串口UART 基础配置STM32CubeMX
    发表于 11-29 16:06 55次下载
    <b class='flag-5'>STM32F407</b>的串口UART 基础<b class='flag-5'>配置</b><b class='flag-5'>STM32</b>CubeMX

    stm32f407引脚相关配置

    stm32f407的IO可由软件配置成8种模式:输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽输出、推挽式复用功能、开漏式复用功能
    发表于 12-02 15:51 15次下载
    <b class='flag-5'>stm32f407</b>引脚相关<b class='flag-5'>配置</b>

    STM32F407开发板用户手册】第21章 STM32F407的NVIC中断分组和配置(重要)

    STM32F407开发板用户手册】第21章 STM32F407的NVIC中断分组和配置(重要)
    发表于 12-04 13:51 21次下载
    【<b class='flag-5'>STM32F407</b>开发板用户手册】第21章 <b class='flag-5'>STM32F407</b>的NVIC中断分组和<b class='flag-5'>配置</b>(重要)

    STM32F407开发板用户手册】第19章 STM32F407GPIO应用之按键FIFO

    STM32F407开发板用户手册】第19章 STM32F407GPIO应用之按键FIFO
    发表于 12-05 15:21 39次下载
    【<b class='flag-5'>STM32F407</b>开发板用户手册】第19章 <b class='flag-5'>STM32F407</b>的<b class='flag-5'>GPIO</b>应用之按键FIFO

    STM32F407的USB_HID 基础配置STM32CubeMX

    STM32F407的USB_HID 配置示例详解: (参考 : https://blog.csdn.net/zhanglifu3601881/article/details/89675307)工具
    发表于 12-28 19:59 20次下载
    <b class='flag-5'>STM32F407</b>的USB_HID 基础<b class='flag-5'>配置</b><b class='flag-5'>STM32</b>CubeMX