片内资源
开发板使用的STM32F407ZGT6在手册里是这样的:
片内FLASH:1M,片内RAM:192K,这两个跟程序运行和下载密切相关。
FLASH
地址分配如图,因此FLASH下载地址从0x8000 0000
开始,大小为0x0010 0000
(1M)
RAM
RAM的两段需要注意的是只有0x20000000
开始的112K+16K是可以让外设访问的,而0x10000000
开始的64K不可被外设访问
时钟与总线
系统时钟SYS_CLK
有3个来源,HSI(内部16M,可用作PLL),HSE(外部高速,晶振产生),PLL(主PLL由HSE或HSI提供,输出两路,第一个输出高速系统时钟168M,第二路生成USBOTG 48M、RNG<=48M、SDIO时钟<=48M,专用PLL用于I2S),配置方面可以参考cubeMX来设置
总线的概念一直不太清楚,这里总线部分引用自网络:
总线来自于ARM公司的AMBA标准,是ARM公司提出的一种开放性的SoC总线标准,现在已经广泛的应用于RISC的内核上,它定义了两种总线: AHB(Advanced High-performance Bus)先进的高性能总线,也叫做ASB(Advanced System Bus)。APB(Advanced peripheral Bus)先进的外设总线,AHB和ASB其实是一个东西,是高速总线,主要负责嵌入式处理器、DMA控制器、Memory等等的接口。 APB是低速总线,主要负责外设接口
简单说就是高低速分离,通过bridge连接,片上外设配置的寄存器涉及的总线在手册中有写:
中断
中断类型和资源手册有写,这里标记下如何在程序中使用中断,首先在工程中一般是CORE目录下会有startup_stm32f40_41xxx.s
这个汇编文件,摘取其中一部分说明:
; Amount of memory (in bytes) allocated for Stack ; Tailor this value to your application needs ; <h> Stack Configuration ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h> Stack_Size EQU 0x00000800 ;如果使用STemWin的话此值应该设置大一点 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp ; <h> Heap Configuration ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h> Heap_Size EQU 0x00000200 AREA HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base Heap_Mem SPACE Heap_Size __heap_limit PRESERVE8 THUMB ; Vector Table Mapped to Address 0 at Reset AREA RESET, DATA, READONLY EXPORT __Vectors EXPORT __Vectors_End EXPORT __Vectors_Size __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD SVC_Handler ; SVCall Handler DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserved DCD PendSV_Handler ; PendSV Handler DCD SysTick_Handler ; SysTick Handler ; External Interrupts DCD WWDG_IRQHandler ; Window WatchDog DCD PVD_IRQHandler ; PVD through EXTI Line detection DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line DCD FLASH_IRQHandler ; FLASH DCD RCC_IRQHandler ; RCC DCD EXTI0_IRQHandler ; EXTI Line0 DCD EXTI1_IRQHandler ; EXTI Line1 DCD EXTI2_IRQHandler ; EXTI Line2 DCD EXTI3_IRQHandler ; EXTI Line3 DCD EXTI4_IRQHandler ; EXTI Line4
这里定义了栈Stack_Size
和堆Heap_Size
的大小,栈内存放局部变量和程序嵌套过程中的压栈数据,堆可用于动态内存分配和释放,注意全局变量在BSS段不占用栈和堆,__Vectors
给出了中断向量表和服务函数的名称,在C文件中定义相应的服务函数即可:
//定时器3中断服务函数 void TIM3_IRQHandler(void) { if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET) //溢出中断 { //OS_TimeMS++; printf("frame:%d\r\n", ov_frame); //打印帧率 //printf("jpeg_data_len:%d\r\n",jpeg_data_len);//打印帧率 ov_frame = 0; } TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除中断标志位 }
其他
参考手册使用
板载资源
- W25Q128 8Mbit的SPIflash
- AT24C02 2048bit,256B的E2PROM,IIC接口
- 液晶屏,网口DP83848,RS485/232,CAN,SRAM,USBOTG等等
来源:https://www.cnblogs.com/RegressionWorldLine/p/11674112.html