STM32F407IGH6 GPIO引脚分布

外设 引脚
KEY1 PC9
KEY2 PC8
KEY3 PC5
STATE_LED PF8
USER PF9
LED1 PC4
LED2 PC3
LED3 PC13
BEEP PA15
UART2_RX PA13
UART2_TX PA12
UART3_RX PB11
UART3_TX PB10
IO_PIR(人体红外线) PB4
IO_Fire(火焰传感器) PB3
IO_ITR(光电传感器) PB2

通信协议

外设 引脚
I2C1_SDA PB7
I2C1_SDL PB6
SPI2_MOSI PB15
SPI2_MISO PB14
SPI2_SCK PB13
SPI2_NSS PB12
CAN_TX PB9
CAN_RX PB8

STM32F407IGH6 RCC时钟设置

在这里插入图片描述

STM32F407IGH6 GPIO常用寄存器

在这里插入图片描述

输出模式

在这里插入图片描述

输入模式

上拉输入

在上拉输入模式下,寄存器直接读取IO端口的电平
IO端口为高电平,读取的就是高电平;
IO端口为低电平,读取的就是低电平;
IO端口悬空无信号输入时,读取的是高电平;
在这里插入图片描述

下拉输入

在下拉输入模式下,寄存器直接读取IO端口的电平
IO端口为高电平,读取的就是高电平;
IO端口为低电平,读取的就是低电平;
IO端口悬空无信号输入时,读取的是低电平;
在这里插入图片描述

浮空输入

在浮空输入模式下,寄存器直接读取IO端口的电平
IO端口为高电平,读取的就是高电平;
IO端口为低电平,读取的就是低电平;
IO端口悬空无信号输入时,读取的电平不确定;
在这里插入图片描述

总结

在这里插入图片描述

STM32F407 时钟树

在这里插入图片描述

STM32F407IGH6 中断

Cortex-M4 内核(NVIC)理论上能够支持最多 256 个中断,其中包含 16 个系统中断(内核中断)和 240 个外部中断

然而,在实际的产品设计中,芯片厂商通常不会完全利用 Cortex-M4 内核提供的所有中断资源。以 STM32F407IGH6 这款微控制器为例,它虽然基于 Cortex-M4 内核,但只使用了 92个中断,其中有 10个不可屏蔽中断,82个可屏蔽中断。 如下图文及代码

在这里插入图片描述


/**
 * @brief STM32F4XX Interrupt Number Definition, according to the selected device
 *        in @ref Library_configuration_section
 */
typedef enum
{
  /******  Cortex-M4 Processor Exceptions Numbers ****************************************************************/
  NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                                          */
  MemoryManagement_IRQn       = -12,    /*!< 4 Cortex-M4 Memory Management Interrupt                           */
  BusFault_IRQn               = -11,    /*!< 5 Cortex-M4 Bus Fault Interrupt                                   */
  UsageFault_IRQn             = -10,    /*!< 6 Cortex-M4 Usage Fault Interrupt                                 */
  SVCall_IRQn                 = -5,     /*!< 11 Cortex-M4 SV Call Interrupt                                    */
  DebugMonitor_IRQn           = -4,     /*!< 12 Cortex-M4 Debug Monitor Interrupt                              */
  PendSV_IRQn                 = -2,     /*!< 14 Cortex-M4 Pend SV Interrupt                                    */
  SysTick_IRQn                = -1,     /*!< 15 Cortex-M4 System Tick Interrupt                                */
  /******  STM32 specific Interrupt Numbers **********************************************************************/
  WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                                         */
  PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detection Interrupt                         */
  TAMP_STAMP_IRQn             = 2,      /*!< Tamper and TimeStamp interrupts through the EXTI line             */
  RTC_WKUP_IRQn               = 3,      /*!< RTC Wakeup interrupt through the EXTI line                        */
  FLASH_IRQn                  = 4,      /*!< FLASH global Interrupt                                            */
  RCC_IRQn                    = 5,      /*!< RCC global Interrupt                                              */
  EXTI0_IRQn                  = 6,      /*!< EXTI Line0 Interrupt                                              */
  EXTI1_IRQn                  = 7,      /*!< EXTI Line1 Interrupt                                              */
  EXTI2_IRQn                  = 8,      /*!< EXTI Line2 Interrupt                                              */
  EXTI3_IRQn                  = 9,      /*!< EXTI Line3 Interrupt                                              */
  EXTI4_IRQn                  = 10,     /*!< EXTI Line4 Interrupt                                              */
  DMA1_Stream0_IRQn           = 11,     /*!< DMA1 Stream 0 global Interrupt                                    */
  DMA1_Stream1_IRQn           = 12,     /*!< DMA1 Stream 1 global Interrupt                                    */
  DMA1_Stream2_IRQn           = 13,     /*!< DMA1 Stream 2 global Interrupt                                    */
  DMA1_Stream3_IRQn           = 14,     /*!< DMA1 Stream 3 global Interrupt                                    */
  DMA1_Stream4_IRQn           = 15,     /*!< DMA1 Stream 4 global Interrupt                                    */
  DMA1_Stream5_IRQn           = 16,     /*!< DMA1 Stream 5 global Interrupt                                    */
  DMA1_Stream6_IRQn           = 17,     /*!< DMA1 Stream 6 global Interrupt                                    */
  ADC_IRQn                    = 18,     /*!< ADC1, ADC2 and ADC3 global Interrupts                             */
  CAN1_TX_IRQn                = 19,     /*!< CAN1 TX Interrupt                                                 */
  CAN1_RX0_IRQn               = 20,     /*!< CAN1 RX0 Interrupt                                                */
  CAN1_RX1_IRQn               = 21,     /*!< CAN1 RX1 Interrupt                                                */
  CAN1_SCE_IRQn               = 22,     /*!< CAN1 SCE Interrupt                                                */
  EXTI9_5_IRQn                = 23,     /*!< External Line[9:5] Interrupts                                     */
  TIM1_BRK_TIM9_IRQn          = 24,     /*!< TIM1 Break interrupt and TIM9 global interrupt                    */
  TIM1_UP_TIM10_IRQn          = 25,     /*!< TIM1 Update Interrupt and TIM10 global interrupt                  */
  TIM1_TRG_COM_TIM11_IRQn     = 26,     /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */
  TIM1_CC_IRQn                = 27,     /*!< TIM1 Capture Compare Interrupt                                    */
  TIM2_IRQn                   = 28,     /*!< TIM2 global Interrupt                                             */
  TIM3_IRQn                   = 29,     /*!< TIM3 global Interrupt                                             */
  TIM4_IRQn                   = 30,     /*!< TIM4 global Interrupt                                             */
  I2C1_EV_IRQn                = 31,     /*!< I2C1 Event Interrupt                                              */
  I2C1_ER_IRQn                = 32,     /*!< I2C1 Error Interrupt                                              */
  I2C2_EV_IRQn                = 33,     /*!< I2C2 Event Interrupt                                              */
  I2C2_ER_IRQn                = 34,     /*!< I2C2 Error Interrupt                                              */
  SPI1_IRQn                   = 35,     /*!< SPI1 global Interrupt                                             */
  SPI2_IRQn                   = 36,     /*!< SPI2 global Interrupt                                             */
  USART1_IRQn                 = 37,     /*!< USART1 global Interrupt                                           */
  USART2_IRQn                 = 38,     /*!< USART2 global Interrupt                                           */
  USART3_IRQn                 = 39,     /*!< USART3 global Interrupt                                           */
  EXTI15_10_IRQn              = 40,     /*!< External Line[15:10] Interrupts                                   */
  RTC_Alarm_IRQn              = 41,     /*!< RTC Alarm (A and B) through EXTI Line Interrupt                   */
  OTG_FS_WKUP_IRQn            = 42,     /*!< USB OTG FS Wakeup through EXTI line interrupt                     */
  TIM8_BRK_TIM12_IRQn         = 43,     /*!< TIM8 Break Interrupt and TIM12 global interrupt                   */
  TIM8_UP_TIM13_IRQn          = 44,     /*!< TIM8 Update Interrupt and TIM13 global interrupt                  */
  TIM8_TRG_COM_TIM14_IRQn     = 45,     /*!< TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */
  TIM8_CC_IRQn                = 46,     /*!< TIM8 Capture Compare global interrupt                             */
  DMA1_Stream7_IRQn           = 47,     /*!< DMA1 Stream7 Interrupt                                            */
  FSMC_IRQn                   = 48,     /*!< FSMC global Interrupt                                             */
  SDIO_IRQn                   = 49,     /*!< SDIO global Interrupt                                             */
  TIM5_IRQn                   = 50,     /*!< TIM5 global Interrupt                                             */
  SPI3_IRQn                   = 51,     /*!< SPI3 global Interrupt                                             */
  UART4_IRQn                  = 52,     /*!< UART4 global Interrupt                                            */
  UART5_IRQn                  = 53,     /*!< UART5 global Interrupt                                            */
  TIM6_DAC_IRQn               = 54,     /*!< TIM6 global and DAC1&2 underrun error  interrupts                 */
  TIM7_IRQn                   = 55,     /*!< TIM7 global interrupt                                             */
  DMA2_Stream0_IRQn           = 56,     /*!< DMA2 Stream 0 global Interrupt                                    */
  DMA2_Stream1_IRQn           = 57,     /*!< DMA2 Stream 1 global Interrupt                                    */
  DMA2_Stream2_IRQn           = 58,     /*!< DMA2 Stream 2 global Interrupt                                    */
  DMA2_Stream3_IRQn           = 59,     /*!< DMA2 Stream 3 global Interrupt                                    */
  DMA2_Stream4_IRQn           = 60,     /*!< DMA2 Stream 4 global Interrupt                                    */
  ETH_IRQn                    = 61,     /*!< Ethernet global Interrupt                                         */
  ETH_WKUP_IRQn               = 62,     /*!< Ethernet Wakeup through EXTI line Interrupt                       */
  CAN2_TX_IRQn                = 63,     /*!< CAN2 TX Interrupt                                                 */
  CAN2_RX0_IRQn               = 64,     /*!< CAN2 RX0 Interrupt                                                */
  CAN2_RX1_IRQn               = 65,     /*!< CAN2 RX1 Interrupt                                                */
  CAN2_SCE_IRQn               = 66,     /*!< CAN2 SCE Interrupt                                                */
  OTG_FS_IRQn                 = 67,     /*!< USB OTG FS global Interrupt                                       */
  DMA2_Stream5_IRQn           = 68,     /*!< DMA2 Stream 5 global interrupt                                    */
  DMA2_Stream6_IRQn           = 69,     /*!< DMA2 Stream 6 global interrupt                                    */
  DMA2_Stream7_IRQn           = 70,     /*!< DMA2 Stream 7 global interrupt                                    */
  USART6_IRQn                 = 71,     /*!< USART6 global interrupt                                           */
  I2C3_EV_IRQn                = 72,     /*!< I2C3 event interrupt                                              */
  I2C3_ER_IRQn                = 73,     /*!< I2C3 error interrupt                                              */
  OTG_HS_EP1_OUT_IRQn         = 74,     /*!< USB OTG HS End Point 1 Out global interrupt                       */
  OTG_HS_EP1_IN_IRQn          = 75,     /*!< USB OTG HS End Point 1 In global interrupt                        */
  OTG_HS_WKUP_IRQn            = 76,     /*!< USB OTG HS Wakeup through EXTI interrupt                          */
  OTG_HS_IRQn                 = 77,     /*!< USB OTG HS global interrupt                                       */
  DCMI_IRQn                   = 78,     /*!< DCMI global interrupt                                             */
  RNG_IRQn                    = 80,     /*!< RNG global Interrupt                                              */
  FPU_IRQn                    = 81      /*!< FPU global interrupt                                               */
} IRQn_Type;

具有 16 级可编程中断优先级,82 个可屏蔽中断的打开与关闭、挂起等,都是被寄存器控制。这些寄存器都已被标准封装成 NVIC_Type 的结构体,如图所示:

typedef struct
{
  __IOM uint32_t ISER[8U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register 中断使能寄存器组*/
        uint32_t RESERVED0[24U];
  __IOM uint32_t ICER[8U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register 中断清除使能寄存器组*/
        uint32_t RESERVED1[24U];
  __IOM uint32_t ISPR[8U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register 个中断使能挂起控制寄存器组*/
        uint32_t RESERVED2[24U];
  __IOM uint32_t ICPR[8U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register 中断解挂控制寄存器组*/
        uint32_t RESERVED3[24U];
  __IOM uint32_t IABR[8U];               /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register 中断激活标志位寄存器组*/
        uint32_t RESERVED4[56U];
  __IOM uint8_t  IP[240U];               /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) 中断优先级控制寄存器组*/
        uint32_t RESERVED5[644U];
  __OM  uint32_t STIR;                   /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */
}  NVIC_Type;

中断优先级

typedef struct
{
  __IO uint32_t ISER[8];                 //中断使能寄存器组
       uint32_t RESERVED0[24];
  __IO uint32_t ICER[8];                 //中断清除寄存器组
       uint32_t RSERVED1[24];
  __IO uint32_t ISPR[8];                 //中断挂起寄存器组
       uint32_t RESERVED2[24];
  __IO uint32_t ICPR[8];                 //中断解挂寄存器组
  	   uint32_t RESERVED3[24];
  __IO uint32_t IABR[8];                 //中断激活标志位寄存器组
       uint32_t RESERVED4[56];
  __IO uint8_t  IP[240];                 //中断优先级控制的寄存器组
       uint32_t RESERVED5[644];
  __O  uint32_t STIR;                    
}  NVIC_Type;

在这里插入图片描述

STM32F407IGH6 异常

在这里插入图片描述

中断与事件的区别

中断,是检测到外部上升或者下降沿,触发中断,进入中断服务函数。
在这里插入图片描述

事件,是检测到外部上升或者下降沿,最终产生的是指定频率的脉冲信号
在这里插入图片描述

光电开关

在这里插入图片描述

结合红外发射、光电接收与遮挡逻辑分析光电开关中**光电三极管U13(ITR9608-F)**的状态变化:

1. 红外发射管的工作状态

左侧红外发射管(引脚1接VCC 3.3V,引脚2接地)始终处于导通状态,持续发射红外光。

2. 光电三极管U13的状态(核心:“光照→导通;无光照→截止”)

U13是反射式光电三极管,其导通/截止由“是否接收到反射的红外光”决定:

  • 无物体遮挡时
    红外发射管的光经反射后,被U13接收。此时光电三极管因光照产生载流子,进入导通状态
    U13的集电极(引脚3)通过导通的三极管直接拉到发射极(引脚4,接地),因此引脚3电位为低电平(接近0V)。

  • 有物体遮挡时
    红外光被物体阻挡,无法反射到U13。此时光电三极管因缺乏光照,载流子极少,进入截止状态
    U13的集电极(引脚3)通过上拉电阻R46(100Ω)VCC 3.3V,因此引脚3电位为高电平(接近3.3V)。

3. 对后续电路的影响

U13集电极的电平变化(高/低)会输入到比较器U14A(LM393)同相输入端(引脚3+),与反相输入端(引脚2-)的参考电压比较后,输出电平控制PE15引脚和指示灯LD5的状态,最终实现“遮挡检测→电信号反馈”的功能。

总结:

  • 无遮挡 → 光电三极管导通 → 集电极低电平;
  • 有遮挡 → 光电三极管截止 → 集电极高电平。

HCLK(高性能总线时钟)

HCLK(高性能总线时钟)是STM32微控制器中连接AHB总线的时钟信号,由系统时钟(SYSCLK)分频得到,通常直接等于SYSCLK的频率。 ‌

核心作用

HCLK为AHB总线提供时钟信号,直接关联CPU和外设的工作频率。例如,当SYSCLK为72MHz时,HCLK通常也为72MHz,用于驱动高性能外设(如串口、定时器等)。 ‌

与其他时钟的关系
SYSCLK‌:系统时钟,决定CPU和外设的整体运行节奏,通过分频器生成HCLK等子时钟。 ‌
FCLK‌:直接为CPU内核提供时钟信号(如主频),与HCLK并行运行但独立分频。 ‌‌
PCLK‌:为APB总线提供时钟信号,通常由HCLK分频得到。 ‌‌

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐