STM32F407ZGT6 是意法半导体(STMicroelectronics)公司推出的一款高性能ARM Cortex-M4核心的32位微控制器(MCU)。它是 STM32F4 系列的一员,具备强大的处理能力和丰富的外设功能,适用于各种应用领域。
说明:STM32F4 的主频最高是 168Mhz,所以我们一般设置 PLLCLK 为 168Mhz(M=8,N=336,P=2),通过 SW 选择 SYSCLK=PLLCLK即可得到 168Mhz 的系统运行频率。
查看数据手册:
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);
- }
- }
-
-
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);
- }
- }
-
-