LOGOLOGO基于STM32的嵌入式系统原理与设计第一章STM32基本原理博客:交流论坛:开发板和教程:引脚、电源和时钟树模数和数模转换中断定时器DMA灵活的FSMC同步和异步串行接口第一章STM32基本原理–学习STM32需要从原理入手,为硬件、软件、操作系统、工程实践学习打下一个良好的基础。–本章的第一部分是STM32的性能和结构,然后是对CortexM3处理器的分析,之后是地址映射、引脚功能描述、电源连接、复位和时钟控制RCC、输入输出端口GPIO、ADC和DAC、中断、DMA、定时器、同步串行通信SPI和I2C、同步异步串行通信USART,最后是灵活的存储器控制FSMC。–通过本章的学习,既可以掌握STM32的全貌,也可以学习到重要的关于CortexM3处理器内核和STM32器件的细节信息1.1STM32性能和结构1.1.1总体性能以高密度的STM32F103VET6为例,能适合一般项目的需要,价格在30元以下,避免由于FLASH和RAM太小造成的瓶颈。VET6的含义为:•V的含义为100pins,即100个管脚。•E表示512KB的FLASH。•T表示LQFP封装。•6表示-40到85度的温度范围。STM32MCU结构•由控制单元、从属单元和总线矩阵三大部分组成,控制单元和从属单元通过总线矩阵相连接•控制单元包括Cortex-M3内核和两个DMA控制器(DMA1和DMA2)•从属单元包括存储器(Flash和SRAM等)和设备(连接片外设备的接口和片内设备)1.1STM32性能和结构1.1.2系统结构分析STM32MCU结构•连接片外设备的接口有并行接口和串行接口,并行接口即通用IO接口GPIO,串行接口有USART、SPI、I2C、USB和CAN等•片内设备有定时器TIM、模数转换器ADC和数模转换器DAC等1.1STM32性能和结构1.1.2系统结构分析总线结构中各单元的功能STM32MCU结构•ICode总线:将Flash存储器指令接口与Cortex-M3内核的指令总线相连接,用于指令预取;•DCode总线:将Flash存储器的数据接口与Cortex-M3内核的DCode总线相连接,用于常量加载和调试访问;•System总线:将Cortex-M3内核的System总线(外设总线)连接到总线矩阵;1.1STM32性能和结构1.1.2系统结构分析STM32MCU结构•DMA总线:将DMA的AHB主控接口与总线矩阵相连;•总线矩阵:用于连接三个主动单元部件和三个被动单元,负责协调和仲裁Cortex-M3内核和DMA对SRAM的访问,仲裁采用轮换算法•AHB/APB桥:两个AHB/APB桥在AHB和2个APB总线之间提供完全同步连接。1.1STM32性能和结构1.1.2系统结构分析1.1STM32性能和结构1.1.2系统结构分析1.1STM32性能和结构1.1.2系统结构分析(1)Cortex-M3CPU所在之处,是司令部是大脑。(2)总线矩阵(3)FLASH通过FLASH接口连接CPU。(4)静态存储器SRAM通过总线矩阵连接CPU。(5)复位和时钟控制RCC。(6)低速APB1外设。(7)低速APB2外设。(8)可变静态存储控制器FSMC。(9)DMA通道。1.1STM32性能和结构1.1.3芯片封装和管脚概述Cortex-M3简介•Cortex-M3是采用哈佛结构的32位处理器内核,拥有独立的指令总线和数据总线,两者共享同一个4GB存储空间•Cortex-M3内建一个嵌套向量中断控制器(NVIC:NestedVectoredInterruptController),支持可嵌套中断、向量中断和动态优先级等•Cortex-M3内部还包含一个系统滴答定时器SysTick1.2CortexM3处理器1.2CortexM3处理器1.2.1Cortex-M3的定位和应用从图1.2.1可见,嵌入式处理器核CortexM3,容量(Capability)和执行功能(PerformanceFunctionality)都居中,但其性价比是当今最好的品种之一,也是现在最流行的品种之一。1.2CortexM3处理器1.2.2Cortex-M3处理器结构1.2CortexM3处理器1.2.3Cortex-M3寄存器1.2CortexM3处理器1.2.3Cortex-M3寄存器1.2CortexM3处理器1.2.3Cortex-M3寄存器特殊功能寄存器1.2CortexM3处理器1.2.3Cortex-M3寄存器1.2CortexM3处理器1.2.4堆栈1.2CortexM3处理器1.2.4堆栈1.3STM32存储地址映射•程序存储器、数据存储器、寄存器和输入输出端口寄存器被组织在同一个4GB的线性地址空间内地址范围设备名称0xE0000000-0xE00FFFFF(1MB)内核设备(SysTick和NVIC等)0x40000000-0x5FFFFFFF(512MB)片上设备(GPIO、USART、TIM和ADC等)0x20000000-0x3FFFFFFF(512MB)SRAM0x00000000-0x1FFFFFFF(512MB)FLASH代码区Cortex-M3内部外设外设内部SRAM0x000000000x200000000x400000000x600000000x800000000xA00000000xC00000000xE00000000xE01000000xFFFFFFFF根据启动配置加到FLASH或系统存储FLASH存储系统存储0x000000000x080000000x0801FFFF0x1FFFFF0000x1FFFFF8000x1FFFFF80F0x1FFFFFFFFUSB/CANSRAMbxCANBKPPWRAFIOEXTIPortAPortBPortCPortDPortEADC1ADC2TIM1SPI1USART1DMARCCFLASH接口CRCTIM2TIM3TIM4RTCWWDGIWDGSPI2USART2USART3I2C1I2C2USB0x400000000x400004000x400008000x40000C000x400028000x40002C000x400030000x400034000x400038000x40003C000x400044000x400054000x400048000x40004C000x400058000x40005C000x400060000x400064000x400068000x400070000x400074000x400100000x400104000x400108000x40010C000x400110000x400114000x400124000x400118000x40011C000x400128000x40012C000x400130000x400134000x400138000x40013C000x400200000x400204000x400220000x400210000x400214000x400224000x400230000x40006C000x400234000x600000000xE01000000xFFFFFFFF1.3STM32存储地址映射代码分析,P13代码1-2到1-6说明如何访问串口寄存器来实现发送数据到串口1.3STM32存储地址映射1.4引脚功能描述引脚功能来源于数据手册,注意复用功能1.6复位和时钟控制RCC复位分三种形式,电源复位、系统复位和备份区域复位。1.6.1复位STM32系统时钟树•系统时钟树由系统时钟源、系统时钟和设备时钟等部分组成•系统时钟源有4个:高速外部时钟HSE、低速外部时钟LSE、高速内部时钟HSI和低速内部时钟LSI1.6复位和时钟控制RCC1.6.2时钟源1.6复位和时钟控制RCC时钟树图解了各个设备时钟的来源。参考P19页图1-11STM32时钟树。问题:STM32定时器1是APB2外设,请从晶振开始,分析器定时器1时钟的来源。那么定时器2呢?通常,STM32主频在72M,而外时钟选择8M,因此必须通过倍频获得。(锁相环PLL对选择的时钟进行倍频)1.6.2时钟源1.6复位和时钟控制RCCSTM32MCU系统时钟树•系统时钟树中的时钟选择、预分频值和外设时钟使能等都可以通过对复位和时钟控制(RCC)寄存器编程实现偏移地址名称类型复位值说明0x14RCC_AHBENR读/写0x00000014AHB设备时钟使能寄存器0x18RCC_APB2ENR读/写0x00000000APB2设备时钟使能寄存器0x1CRCC_APB1ENR读/写0x00000000APB1设备时钟使能寄存器1.6复位和时钟控制RCC1.7输入输出端口GPIO1.7.1常规输入输出GPIO•GPIO包括多个16位I/O端口,每个端口可以独立设置3工作模式,并可独立地置位或复位•GPIO由寄存器、输入驱动器和输出驱动器等部分组成•GPIO是可编程输入/输出端口1.7输入输出端口GPIO1.7.1常规输入输出GPIO•GPIO通过7个32位寄存器进行操作偏移地址名称类型复位值说明0x00CRL读/写0x44444444配置寄存器低位(每个端口4位)0x04CRH读/写0x44444444配置寄存器高位(每个端口4位)0x08IDR读0x000016位输入数据寄存器0x0CODR读/写0x000016位输出数据寄存器0x10BSRR写0x00000000位置位/复位寄存器0x14BRR写0x0000位复位寄存器0x18LCKR读/写0x00000配置锁定寄存器1.7输入输出端口GPIO1.7.1常规输入输出GPIOGPIO结构及寄存器说明•每个端口的4个配置位是CNF[1:0]和MODE[1:0]CNF[1:0]MODE[1:0]输入配置CNF[1:0]MODE[1:0](2)输出配置0000模拟输入0001/10/11通用推挽输出0100浮空输入(复位状态)0101/10/11通用开漏输出1000上拉/下拉输入(1)1001/10/11推挽复用输出1100保留1101/10/11开漏复用输出注:(1)ODR=1:上拉,ODR=0:下拉(2)01/10/11依次对应最大输出频率为10MHz/2MHz/50MHz1.7输入输出端口GPIO1.7.1常规输入输出GPIOGPIO端口的模式模式是输入浮空,为什么这样设计?1.7输入输出端口GPIO1.7.2GPIO复用可以将具有复用功能的引脚的功能进行重新配置,例如配置一些管脚为ADC的管脚,这些管脚就不能再作为GPIO使用。这个过程叫做复用重映射。8个ADC通过的选择过程P21-22。问题:根据P21表1-7,如果需要选择一个引脚做ADC输入引脚,可以选择哪个引脚呢?为什么?ADC简介•模数转换器ADC的主要功能是将模拟信号转化为数字信号以便于微控制器进行数据处理•STM32ADC是12位逐次比较型,最多可测量21个外部的模拟量,各通道的转换可以单次、连续、扫描或间断模式执。1.8模数转换器和数模转换器1.8.1模-数转换器ADC结构•STM32ADC主要由模拟多路开关、模拟至数字转换器、数据寄存器和触发选择等部分组成•转换通道分为规则通道和注入通道两组•规则通道由最多16个通道组成,按顺序转换•注入通道由最多4个通道组成,可插入转换1.8模数转换器和数模转换器1.8.1模-数转换器1.8模数转换器和数模转换器1.8.2数-模转换器1.数模转换器框图分析P24图1-15。2.参考源。3.信号发生器功能。中断简介•接口数据传送控制方式有查询、中断和DMA等,中断是重要的接口数据传送控制方式•STM32中断控制分为全局和局部2