stm32f407zgt6 是意法半导体(stmicroelectronics)公司推出的一款高性能arm cortex-m4核心的32位微控制器(mcu)。它是 stm32f4 系列的一员,具备强大的处理能力和丰富的外设功能,适用于各种应用领域。
【1】F407建工程所需依赖文件说明:STM32F4 的主频最高是 168Mhz,所以我们一般设置 PLLCLK 为 168Mhz(M=8,N=336,P=2),通过 SW 选择 SYSCLK=PLLCLK即可得到 168Mhz 的系统运行频率。
【3】分析LED硬件原理图查看数据手册:
Led.c文件代码如下:
代码语言:javascript代码运行次数:0运行复制#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; //输出1GPIOF->ODR|=1<<9; //输出1GPIOF->ODR&=~(1<<8); //输出0}
Led.h代码如下
代码语言:javascript代码运行次数:0运行复制#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代码如下
代码语言:javascript代码运行次数:0运行复制#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);}}
Delay.c延时函数代码
代码语言:javascript代码运行次数:0运行复制#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代码
代码语言:javascript代码运行次数:0运行复制#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; //输出1GPIOF->ODR|=1<<9; //输出1GPIOF->ODR&=~(1<<8); //输出0}/*1/2000HZ=0.0005s=0.5ms=500us1/4000HZ=0.25ms控制蜂鸣器:产生2KHZ~5KHZ的方波即可*/void BEEP_Ctlrl(u8 cmd,u32 time){u8 i;if(cmd) //打开蜂鸣器{for(i=0;i
Mian.c主函数代码
代码语言:javascript代码运行次数:0运行复制#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口输出配置配置步骤的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号