时钟、GPIO、NVIC

本文详细介绍了STM32芯片的时钟系统,包括HSE、HSI、LSE、LSI、PLLCLK等时钟源的工作原理和配置方法,以及系统时钟SYSCLK、AHB、APB1、APB2时钟的产生和控制。此外,还阐述了STM32的中断系统,包括NVIC的中断优先级分组、中断使能、中断处理和寄存器配置。同时,文章提及了GPIO的配置和功能,包括配置寄存器、数据寄存器、位设置/复位寄存器和锁定寄存器。
  *=============================================================================
  *                    Supported STM32F42xxx/43xxx devices
  *-----------------------------------------------------------------------------
  *        System Clock source                    | PLL (HSE)
  *-----------------------------------------------------------------------------
  *        SYSCLK(Hz)                             | 180000000
  *-----------------------------------------------------------------------------
  *        HCLK(Hz)                               | 180000000
  *-----------------------------------------------------------------------------
  *        AHB Prescaler                          | 1
  *-----------------------------------------------------------------------------
  *        APB1 Prescaler                         | 4
  *-----------------------------------------------------------------------------
  *        APB2 Prescaler                         | 2
  *-----------------------------------------------------------------------------
  *        HSE Frequency(Hz)                      | 25000000
  *-----------------------------------------------------------------------------
  *        PLL_M                                  | 25
  *-----------------------------------------------------------------------------
  *        PLL_N                                  | 360
  *-----------------------------------------------------------------------------
  *        PLL_P                                  | 2
  *-----------------------------------------------------------------------------
  *        PLL_Q                                  | 7
  *-----------------------------------------------------------------------------
  *        PLLI2S_N                               | NA
  *-----------------------------------------------------------------------------
  *        PLLI2S_R                               | NA
  *-----------------------------------------------------------------------------
  *        I2S input clock                        | NA
  *-----------------------------------------------------------------------------
  *        VDD(V)                                 | 3.3
  *-----------------------------------------------------------------------------
  *        Main regulator output voltage          | Scale1 mode
  *-----------------------------------------------------------------------------
  *        Flash Latency(WS)                      | 5
  *-----------------------------------------------------------------------------
  *        Prefetch Buffer                        | ON
  *-----------------------------------------------------------------------------
  *        Instruction cache                      | ON
  *-----------------------------------------------------------------------------
  *        Data cache                             | ON
  *-----------------------------------------------------------------------------
  *        Require 48MHz for USB OTG FS,          | Disabled
  *        SDIO and RNG clock                     |
  *-----------------------------------------------------------------------------
  *=============================================================================

STM32芯片(所有型号)的时钟包含4类:

HSE(High Speed External)高速外部时钟

来源:有源晶振(1-50M)、无源晶振(4-26M

控制:RCC_CR 时钟控制寄存器的位16HSEON控制

 

HSI(High Speed Internal)高速内部时钟

来源:芯片内部,大小为16M,当HSE故障时,系统时钟会自

动切换到HSI,直到HSE启动成功。

控制: RCC_CR 时钟控制寄存器的位0HSION控制

 

LSE(Low  Speed External)低速外部时钟

 

LSI(Low  Speed Internal)低速内部时钟

 

锁相环时钟:PLLCLK

来源:HSIHSE。由PLLSRC位配置。

HSE或者HSI先经过一个分频因子M进行分频,然后再经过一个倍频因子N,然后再经过一个分频因子P,最后成为锁相环时钟PLLCLK = (HSE/M) * N / P = 25/25 * 360 / 2 = 180M

F407:(8/8*336/2=168M

 

控制: RCC_PLLCFGR :RCC PLL 配置寄存器

 

系统时钟:SYSCLK

缩写:SYSCLKF429最高为180MF407最高为168M

来源:HSIHSEPLLCLK

控制: RCC_CFGR 时钟配置寄存器的SW

 

 

AHB,是Advanced High performance Bus的缩写,译作高级高性能总线,这是一种系统总线

AHB主要用于高性能模块(CPUDMADSP)之间的连接。AHB 系统由主模块、从模块和基础结构(Infrastructure)3部分组成,整个AHB总线上的传输都由主模块发出,由从模块负责回应。APB,是Advanced

Peripheral Bus的缩写,这是一种外围总线。

 

APB主要用于低带宽的周边外设之间的连接,例如UART1284等,它的总线架构不像AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。再往下,APB2负责ADI/O,高级TIM,串口1APB1负责DAUSBSPII2CCAN,串口2345,普通TIM

 

HCLKAHB高速总线时钟,最高为180M。为AHB总线的外设提供时钟、为Cortex系统定时器提供时钟(SysTick)、为内核提供时钟(FCLK)。

 

AHBadvanced high-performance bus

来源:系统时钟分频得到。

控制: RCC_CFGR 时钟配置寄存器的

STM32 CubeMX配置GPIONVIC的方法及相关资料如下: ### GPIO配置方法 - **基础配置**:打开之前配置好的文件,将DeBug设置为SW模式,在已有基础上配置GPIO。根据主控板件原理图确定模块所需的GPIO,查找出这些GPIO后,根据需要选择GPIO的模式,如GPIO_Output。接着配置GPIO相关结构体参数,如电压高低、推挽开漏、上下拉、引脚速度等。最后生成keil代码,注意进行函数声明。总结步骤为打开模板文件,根据原理图选定功能模块的GPIO引脚,配置GPIO模式和结构体参数[^2]。 - **设置引脚状态**:GPIO_PIN_SET表示引脚为高电平,GPIO_PIN_RESET表示引脚为低电平。可使用`HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5)`读取GPIO引脚状态,使用`HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5)`释放GPIO引脚的配置,使用`HAL_GPIO_Init(GPIOA, &GPIO_InitStruct)`初始化GPIO(需配置GPIO_InitStruct结构体,可参考生成的gpio.c文件)[^3]。 ### GPIO与外部中断配置方法 复制GPIO基础配置文件,配置相关中断GPIO引脚,将GPIO结构体参数配置为外部中断,配置中断NVIC,最后生成代码[^2]。 ### NVIC配置方法 使用STM32CubeMX可以方便快捷地配置和优化NVIC中断优先级,实现对中断的灵活管理。在生成的代码中,可根据需求进行进一步的优化和修改。了解此配置方法有助于开发人员更好地理解和使用中断机制,提高系统的稳定性和性能[^1]。 ### 代码生成与使用 点击右上方GENERATE CODE生成代码,在弹出框点击OPEN PROJECT打开配置的工程文件。此时引脚的模式和时钟已配置好,在main.c文件中输入代码时,需将自己添加的代码放在CODE BEGIN和CODE END之间,否则再次使用CubeMX生成时会被删除[^5]。 ### 定时器中断相关代码示例 修改stm32f0xx_it.c文件中的`TIM6_DAC_IRQHandler`函数,进中断后判断如果使能了更新中断,且更新中断标志为1,则翻转数据并清除标志: ```c void TIM6_DAC_IRQHandler(void){ /* USER CODE BEGIN TIM6_DAC_IRQn 0 */ /* 进中断后判断如果使能了更新中断,且更新中断标志为1,则翻转数据,并清除标志 */ if ( (LL_TIM_IsActiveFlag_UPDATE(TIM6)) && (LL_TIM_IsEnabledIT_UPDATE(TIM6))) { LL_TIM_ClearFlag_UPDATE(TIM6); TestTimer = (++TestTimer) % 2; } /* USER CODE END TIM6_DAC_IRQn 0 */ /* USER CODE BEGIN TIM6_DAC_IRQn 1 */ /* USER CODE END TIM6_DAC_IRQn 1 */ } ``` [^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值