• STM32 开发板资源梳理


    片内资源

    开发板使用的STM32F407ZGT6在手册里是这样的:

    片内FLASH:1M,片内RAM:192K,这两个跟程序运行和下载密切相关。

    FLASH

    地址分配如图,因此FLASH下载地址从0x8000 0000开始,大小为0x0010 0000(1M)

    RAM

    RAM的两段需要注意的是只有0x20000000开始的112K+16K+64K是可以让外设访问的,而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
    ", ov_frame); //打印帧率
    										  //printf("jpeg_data_len:%d
    ",jpeg_data_len);//打印帧率
    		ov_frame = 0;
    	}
    	TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除中断标志位
    }
    

    其他

    参考手册使用

    板载资源

    • W25Q128 128Mbit的SPIflash,实际16MB可用
    • AT24C02 2048bit,256B的E2PROM,IIC接口
    • 液晶屏,网口DP83848,RS485/232,CAN,SRAM,USBOTG等等
  • 相关阅读:
    基础数据结构总结
    图论总结
    【bzoj1614】[Usaco2007 Jan]Telephone Lines架设电话线
    【bzoj1015】星球大战starwar
    NOIP2012摆花
    最勇敢的机器人
    【bzoj1056】排名系统
    图的第k短路
    【bzoj1455】罗马游戏
    ti
  • 原文地址:https://www.cnblogs.com/RegressionWorldLine/p/11674112.html
Copyright © 2020-2023  润新知