本文主要是介绍[STM32F407ZET6] 片上资源介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
学习心得
学习一款单片机步骤:
- 了解有芯片上有哪些硬件资源
- 了解内存映射, 和地址总线
- 时钟体系
硬件资源可以让我们知道, 这个芯片都有哪些功能, 内存映射让我们知道, 我们的代码存到了哪里, 运行内存在哪里, 外设寄存器在哪里. 了解时钟体系, 是必要的, 时钟是通信的核心, 是单片机运行的心脏, 如果不了解时钟体系, 通信必然会出现不可预估的问题.
STM32F407ZET6这款芯片硬件资源
- 频率: 168MHz
- 引脚数: 144
- FLASH: 512KB
- SRAM: 196KB
- USART/UART: 4+2
- I2C: 3
- SPI: 3
- I2S: 2
- CAN: 2
- SDIO: 支持
- USB: 支持
- ADC: 3个24通道
- DAC: 2个通道
- 定时器: 2(高级)+10(通用)+2(基本)
- 看门狗: 窗口看门狗+独立看门狗
- RTC: 支持
- FSMC: 支持
- 以太网: 支持
- 随机数字生成器: 支持
- 相机接口: 支持
- 电压: 1.8-3.6v
- 工作温度: -40~+85°C
内存映射
FLASH: 代码编译之后烧录存放的位置, const修饰的全局变量的位置.
RAM: 就是运行内存, 将代码需要的临时变量存储到RAM中.
- FLASH: 0x0800 0000 ~ 0x0808 0000. 正好512k, 虽然数据手册上是1M但是这个芯片只能到这里.
- 外设寄存器: 0x4000 0000 ~ 0xC000 0000. 其中包含了APB1, APB2, AHB1, AHB2, AHB3总线等.
- 外设别名区: 0x4200 0000 ~ 0x0x43FF FFFC.
- SRAM: 0x2000 0000 ~ 0x2001 BFFF, 112kB的SRAM, 这里才是我们真正使用的.
- SRAM别名区: 0x2001 C000 ~ 0x2001 FFFF, 16kB的位带别名区.
- 系统存储器: BootLoader的存储位置, 0x1FFF 0000 ~ 0x1FFF 7A0F
时钟体系
有4种时钟, 外部高速晶振HSE, 外部低速晶振LSE, 内部高速RC振荡器HSI, 内部低速LSI. 除此之外还有可以外部提供特定时钟信号, 这里不说.
- LSE: 32.768kHz外部低速晶振: RTC提供时钟.
- HSE: 8MHz, 经过PLL倍频到168MHz. PLL作为系统时钟. HSE作为系统时钟, RTC时钟.
- HSI: 16MHz, 没有HSE时, 默认作为系统时钟, 等待目标时钟源就绪(PLL)后, 切换另一个时钟.
- LSI: 32kHz, 给独立看门狗提供时钟.
三个AHB总线时钟都是168MHz, APB1低速总线:42MHz,四分频, APB2高速总线:84MHz,二分频, 挂载的TIM都会2倍频.
标准库配置系统时钟
f4系列的f1系列的不同, F1系列的基本上配置都是正确的, 外接8M晶振就是正确的, F4系列不同, 需要自己配置PLL的倍频. 在system_stm32f4xx.c文件中修改.
#if defined(STM32F40_41xxx)
uint32_t SystemCoreClock = 168000000; //看是否为168000000
#endif /* STM32F40_41xxx */
配置PLL , PLL一旦配置后, 程序运行不可以更改.
根据图示, 可以看出来输入8M, 首先经过M分频, 然后经过N倍频, 再经过P分频.
这里配置PLL_M = 8, PLL_N = 336, PLL_P = 2. 就是8M / 8 *336 / 2 = 168MHz
下面这个PLL_Q说是外设时钟输出48MHz, 不知道干什么的, 不过配置为PLL_Q = 7就是48MHz.
注意: PLL分频不能随便给数, 要参考RCC_PLLCFGR, PLL配置寄存器参考手册来进行配置.
这篇关于[STM32F407ZET6] 片上资源介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!