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

    文章

    6812

    浏览量

    147662
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16022

    浏览量

    343694
  • 意法半导体
    +关注

    关注

    30

    文章

    2990

    浏览量

    107967
  • GPIO
    +关注

    关注

    16

    文章

    1137

    浏览量

    50596
  • STM32F407
    +关注

    关注

    15

    文章

    187

    浏览量

    29003
收藏 人收藏

    评论

    相关推荐

    STM32F407 GPIO口输入配置配置步骤

    介绍STM32F407新建寄存器工程流程,介绍输入模式的配置方式,以按键为例完成按键输入检测。
    的头像 发表于 07-06 14:28 1286次阅读
    <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>

    STM32F407 串口配置步骤

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

    STM32F407 位带配置步骤

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

    STM32F407 外部中断配置步骤

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

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

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

    STM32F407时钟配置学习

    STM32F407时钟配置学习。
    发表于 08-04 07:14

    如何对STM32F407 SPI模块进行配置

    STM32F407硬件SPI的初始化过程是怎样的?如何对STM32F407 SPI模块进行配置
    发表于 10-15 09:27

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

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

    STM32F407 HAL库的按键中断配置步骤有哪些

    STM32F407 HAL库的中断管理是什么?STM32F407 HAL库的按键中断配置步骤有哪些?
    发表于 11-05 06:03

    STM32F407外部中断的一般配置步骤有哪些

    STM32F407把中断分为几个组呢?STM32F407外部中断的一般配置步骤有哪些?
    发表于 11-16 07:14

    STM32F407编程步骤是怎样的?

    STM32F407编程步骤是怎样的?
    发表于 12-13 06:12

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

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

    STM32F407的串口UART 基础配置STM32CubeMX

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

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

    STM32F407开发板用户手册】第21章 STM32F407的NVIC中断分组和配置(重要)
    发表于 12-04 13:51 20次下载
    【<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 32次下载
    【<b class='flag-5'>STM32F407</b>开发板用户手册】第19章 <b class='flag-5'>STM32F407</b>的<b class='flag-5'>GPIO</b>应用之按键FIFO