




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4 20 2020 1 电源2 复位3 时钟4 下载电路5 启动配置电路 STM32最小系统 典型的最小系统由微控制器芯片 供电电路 时钟电路 复位电路 启动配置电路和程序下载电路构成 最小系统设计 1 电源 STM32F103系列微控制器的工作电压在 2 0V 3 6V之间 由于常用电源为5V 必须采用转换电路把5V电压转换为2 3 6之间 电源转换芯片REG1117 3 3是一款正电压输出的低压降三端线性稳压电路 输入5V电压 输出固定的3 3V电压2 时钟 时钟通常由晶体振荡器 简称晶振 产生 图2 9中时钟部分提供了两个时钟源 Y1是32 768kHz晶振 为RTC提供时钟 Y2是8MHz晶振 为整个系统提供时钟 3 复位 采用按键和保护电阻电容构成复位电路 按下按键将触发系统复位 具体电路如图2 9中复位部分所示 4 启动模式 启动模式由BOOT0和BOOT1选择 为了便于设置 BOOT0接电平 并且和BOOT1通过2X2插针相连 通过跳线可以配置三种不同启动模式 5 下载 JTAG是一种国际标准测试协议 主要用于芯片内部测试 现在多数的高级器件都支持JTAG协议 如ARM DSP FPGA器件等 采用4线的JTAG下载方式 有效节省IO口 在STM32中有5个时钟源 分别为HSI HSE LSE LSI PLL1 HSI 高速内部时钟信号8MHz通过8MHz的内部RC振荡器产生 并且可被直接用做系统时钟 或者经过2分频后作为PLL的输入 2 HSE 高速外部时钟信号4 25MHz可以通过外部直接提供时钟 从OSC IN输入 或使用外部陶瓷 晶体谐振器 HSI比HSE有更快的启动时间 但频率精确度没有外部晶体振荡器高 3 LSE 低速外部时钟信号32 768KHZ振荡器是一个32 768KHz的低速外部晶体 陶瓷振荡器 它为RTC或其它功能提供低功耗且精确的时钟源 4 LSI 低速内部时钟信号30 60KHzLSIRC担当一个低功耗时钟源的角色 它可以在停机和待机模式下保持运行 为独立看门狗和自动唤醒单元提供时钟 5 PLL 锁相环倍频输出用来倍频HIS或者HSE 时钟输入源可选择为HSI 2 HSE或者HSE 2 倍频可选择为2 16倍 但是其输出频率最大不得超过72MHz 3 2时钟控制 一般而言 嵌入式系统在工作前 都要进行初始化工作 其中包括调用RCC Configuration 复位和时钟设置 函数 用于系统复位和初始化STM32系列微控制器的时钟 3 2STM32单片机时钟配置 3 2 1STM32时钟系统 3 2 2RCC Configuration 复位和时钟设置 函数 STM32系列微控制器中 有5个时钟源 HSI HighSpeedInternal 高速内部时钟 HSE HighSpeedExternal 高速外部时钟 LSI LowSpeedInternal 低速内部时钟 LSE LowSpeedExternal 低速外部时钟 PLL PhaseLockedLoop 锁相环倍频输出 其中的HSI HSE 或PLL可被用来驱动系统时钟 其中的LSI LSE作为二级时钟源 STM32时钟系统结构图 P66 3 2 1STM32时钟系统 其中的HSI HSE 或PLL可被用来驱动系统时钟 实际PLL是来自于HSI HSE 外设总线 包括APB1 AdvancedPeripheralBus1 和APB2 AdvancedPeripheralBus2 APB2 用于高速外设APB1 用于低速外设 AMBA片上总线 已成为一种流行的工业片上总线标准 它包括AHB AdvancedHighperformanceBus 和APB AdvancedPeripheralBus 前者作为系统总线 后者作为外设总线 STM32系统结构图 连接在APB1 低速外设 上的设备 有 连接在APB2 高速外设 上的设备 有 连接在AHB AdvancedHighperformanceBus 上的设备 有 1 使能挂接在APB1总线上的外设对应的时钟命令 RCC APB1PeriphClockCmd 函数 例如 使能TIM2对应的时钟 RCC APB1PeriphClockCmd RCC APB1Periph TIM2 ENABLE RCC APB2PeriphClockCmd 函数 2 使能挂接在APB2总线上的外设对应的时钟命令 例如 使能GPIO端口对应的时钟 RCC APB2PeriphClockCmd RCC APB2Periph GPIOB RCC APB2Periph GPIOE ENABLE 3 使能挂接在AHB总线上的外设对应的时钟命令 RCC AHBPeriphClockCmd 函数 例如 使能DMA对应的时钟 RCC AHBPeriphClockCmd RCC AHBPeriph DMA ENABLE 使用操作符 可以一次选中上表中的一个或多个取值的组合作为该参数的值 复位和时钟控制 RCC STM32F103xx增强型模块框图 基于ARMCortex内核的MCU和普通的8 16位单片机在系统结构上最大区别 普通的8 16位单片机 只有1个系统时钟频率 而基于ARMCortex内核的MCU 具有多个时钟频率 分别供给内核和不同外设模块使用 本课程的学习难点之一 就是ARM时钟比单片机时钟复杂得多 为什么ARM时钟这么复杂 原因二 时钟分开有助于实现低功耗 原因一 高速时钟供中央处理器等高速设备使用 低速时钟供外设等低速设备使用 时钟输出使能 STM32处理器因为低功耗的需要 各模块需要分别独立开启时钟 当需要使用某个外设模块时 记得一定要先使能对应的时钟 否则 这个外设不能工作 3 2 2RCC Configuration 函数 1 RCC复位和时钟配置寄存器组 2 枚举类型ErrorStatus 3 RCC Configuration 复位和时钟设置 函数 ResetandClockConfiguration 复位和时钟设置函数 1 RCC复位和时钟配置寄存器组 2 枚举类型ErrorStatus STM32单片机的复位和时钟设置 共包括10个设置寄存器 一个32位的时钟控制寄存器 RCC CR 一个32位的时钟配置寄存器 RCC CFGR 一个32位的时钟中断寄存器 RCC CIR 一个32位的APB2外设复位寄存器 RCC APB2RSTR 一个32位的APB1外设复位寄存器 RCC APB1RSTR 一个32位的AHB外设时钟使能寄存器 RCC AHBENR 一个32位的APB2外设时钟使能寄存器 RCC APB2ENR 一个32位的APB1外设时钟使能寄存器 RCC APB1ENR 一个32位的备份域控制寄存器 RCC BDCR 一个32位的控制 状态寄存器 RCC CSR Backupdomaincontrolregister RCC BDCR 详见参考手册V10 1第P60 编程时 时钟的具体配置是从RCC ResetandClockConfiguration 复位和时钟配置 寄存器组开始 在固件库中 用结构体RCC TypeDef定义RCC寄存器组 在文件 stm32f10 x map h 中 定义如下 Real TimeClock typedefstruct vu32CR vu32CFGR vu32CIR vu32APB2RSTR vu32APB1RSTR vu32AHBENR vu32APB2ENR vu32APB1ENR vu32BDCR vu32CSR RCC TypeDef 1 RCC复位和时钟配置寄存器组 Peripheralbaseaddressinthebit bandregion definePERIPH BASE u32 0 x40000000 Peripheralmemorymap defineAPB1PERIPH BASEPERIPH BASE defineAPB2PERIPH BASE PERIPH BASE 0 x10000 defineAHBPERIPH BASE PERIPH BASE 0 x20000 defineRCC BASE AHBPERIPH BASE 0 x1000 ifdef RCC defineRCC RCC TypeDef RCC BASE endif RCC 该宏定义的功能 在程序中 所有写RCC的地方 编译器的预处理程序 都将它替换为 RCC TypeDef 0 x40021000 2 枚举类型ErrorStatus 在文件 stm32f10 x type h 中 包含typedefenum ERROR 0 SUCCESS ERROR ErrorStatus 该语句 定义了新枚举类型名ErrorStatus 代表左侧定义的枚举类型 3 RCC Configuration 复位和时钟设置 函数 在 HelloRobot h 中 ErrorStatusHSEStartUpStatus voidRCC Configuration void 将外设RCC寄存器组重新设置为默认值 即复位 RCCsystemreset RCC DeInit 打开外部高速时钟晶振HSE EnableHSE RCC HSEConfig RCC HSE ON 等待HSE外部高速时钟晶振稳定 或者在超时的情况下退出 WaittillHSEisready HSEStartUpStatus RCC WaitForHSEStartUp if HSEStartUpStatus SUCCESS SUCCESS HSE晶振稳定就绪 设置AHB时钟 SYSCLK 48MHz HCLK 即AHB时钟 SYSCLK RCC HCLKConfig RCC SYSCLK Div1 设置高速PCLK2时钟 即APB2clock AHB时钟 2 24MHz PCLK2 HCLK 2 RCC PCLK2Config RCC HCLK Div2 设置低速PCLK1时钟 即APB1clock AHB时钟 4 12MHz PCLK1 HCLK 4 RCC PCLK1Config RCC HCLK Div4 RCC HCLK Div4 APB1clock HCLK 4 12MHz 此处不同于鸥鹏公司的程序 36MHz 设置Flash延时时钟周期数 为2 FLASH SetLatency FLASH Latency 2 EnableFlashPrefetchBuffer预取指令指令缓冲区 这2句与RCC没有关系 FLASH PrefetchBufferCmd FLASH PrefetchBuffer Enable 利用锁相环将HSE外部8MHz晶振6倍频到48MHz PLLCLK 8MHz 6 48MHz RCC PLLConfig RCC PLLSource HSE Div1 RCC PLLMul 6 此处不同于鸥鹏公司的程序 PLLCLK 8MHz 6 48MHz EnablePLL RCC PLLCmd ENABLE WaittillPLLisready 等待锁相环输出稳定 while RCC GetFlagStatus RCC FLAG PLLRDY RESET SelectPLLassystemclocksource RCC SYSCLKConfig RCC SYSCLKSource PLLCLK 选择PLLCLK作为SYSCLK 所以SYSCLK为48MHz WaittillPLLisusedassystemclocksource while RCC GetSYSCLKSource 0 x08 Enableperipheralclocks GPIOA GPIOBandSPI1clockenable RCC APB2PeriphClockCmd RCC APB2Periph GPIOA RCC APB2Periph GPIOB RCC APB2Periph SPI1 ENABLE EnableGPIOC GPIODclock RCC APB2PeriphClockCmd RCC APB2Periph GPIOC RCC APB2Periph GPIOD ENABLE 枚举类型 变量 设置低速PCLK1时钟 即APB1clock AHB时钟 4 12MHz PCLK1 HCLK 4 RCC PCLK1Config RCC HCLK Div4 RCC HCLK Div4 APB1clock HCLK 4 12MHz 此处不同于鸥鹏公司的程序 36MHz 设置Flash延时时钟周期数 为2 FLASH SetLatency FLASH Latency 2 EnableFlashPrefetchBuffer预取指令指令缓冲区 这2句与RCC没有关系 FLASH PrefetchBufferCmd FLASH PrefetchBuffer Enable 利用锁相环将HSE外部8MHz晶振6倍频到48MHz 作为PLLCLK PLLCLK 8MHz 6 48MHz RCC PLLConfig RCC PLLSource HSE Div1 RCC PLLMul 6 此处不同于鸥鹏公司的程序 PLLCLK 8MHz 6 48MHz EnablePLL RCC PLLCmd ENABLE WaittillPLLisready 等待锁相环输出稳定 while RCC GetFlagStatus RCC FLAG PLLRDY RESET SelectPLLassystemclocksource 选择PLLCLK作为SYSCLK 所以SYSCLK为48MHzRCC SYSCLKConfig RCC SYSCLKSource PLLCLK WaittillPLLisusedassystemclocksource while RCC GetSYSCLKSource 0 x08 Enableperipheralclocks GPIOA GPIOBandSPI1clockenable RCC APB2PeriphClockCmd RCC APB2Periph GPIOA RCC APB2Periph GPIOB RCC APB2Periph SPI1 ENABLE EnableGPIOC GPIODclock RCC APB2PeriphClockCmd RCC APB2Periph GPIOC RCC APB2Periph GPIOD ENABLE 以上所见的固件库函数 详见 中文版 STM32F10 xxx 固件库函数V2 pdfP193 固件库函数的具体实现 见文件 stm32f10 x rcc h 其中RCC DeInit FunctionName RCC DeInit Description ResetstheRCCclockconfigurationtothedefaultresetstate Input None Output None Return None voidRCC DeInit void SetHSIONbit RCC CR u32 0 x00000001 ResetSW 1 0 HPRE 3 0 PPRE1 2 0 PPRE2 2 0 ADCPRE 1 0 andMCO 2 0 bits RCC CFGR STM32F10 x支持电源复位 系统复位 和备份区域复位三种复位形式 3 3复位 三种复位形式 系统复位电源复位备份区域复位 3 3复位 电源管理器 3 3复位 STM32启动模式 在STM32F10 xxx里 可以通过BOOT 1 0 引脚选择三种不同启动模式 3 4STM32启动 3 4启动配置 STM32F103x因为固定的存储器映像 代码区始终从地址0 x00000000开始 通过ICode和DCode总线访问 启动之后 CPU从地址0 x00000000获取堆栈顶的地址 并从启动存储器的0 x00000004指示的地址开始执行代码 而数据区 SARM 始终从地址0 x20000000开始 通过系统总线访问 STM32F103x的CPU始终从ICode总线获取复位向量 即启动仅适合于从代码区开始 而常用的程序代码存放在Flash中 因此最典型的是从Flash启动 STM32F103微控制器实现了一个特殊的机制 系统可以不仅仅从Flash存储器启动 还可以从系统存储器或内置SRAM启动 在系统复位后 SYSCLK的第4个上升沿 BOOT引脚的值将被锁存 用户可以通过设置BOOT1和BOOT0引脚的状态 来选择在复位后的启动模式 在从待机模式退出时 BOOT引脚的值将被重新锁存 因此 在待机模式下BOOT引脚应保持为需要的启动配置 在启动延迟之后 CPU从地址0 x00000000获取堆栈顶的地址 并从启动存储器的0 x00000004指示的地址开始执行代码 因为固定的存储器映像 代码区始终从地址0 x00000000开始 通过ICode和DCode
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文山州麻栗坡县消防救援大队招聘考试真题2024
- 国殇考试题及答案
- 历年考试题及答案
- 中级财务会计学(安徽财经大学)知到智慧树答案
- 中级微观经济学(双语)(山东联盟)知到智慧树答案
- 中外陶瓷商务英语知到智慧树答案
- 血液肿瘤科PICC专项技术理论考题(附答案)
- 2025版商品房认购及智能家居安装协议范本
- 2025年度专业地板砖铺装施工服务合同
- 2025版汽车经销商品牌授权及销售支持合同
- 小儿上呼吸道感染
- 2025年CCAA国家注册审核员考试(产品认证基础)历年参考题库含答案详解(5卷)
- 2025-2030中国骨科手术导航机器人医生培训体系与手术量增长关联报告
- 北京市西城区2024-2025学年七年级下学期期末道德与法治试题(解析版)
- 苏州工业园区外国语学校语文新初一均衡分班试卷
- 《智能建造概论》高职完整全套教学课件
- 2025-2026小学学年度第一学期教学工作安排表:启智育心绘蓝图筑梦前行谱新篇
- GB/T 30807-2025建筑用绝热制品浸泡法测定长期吸水性
- 无限极中医秋季养生课件
- GB/T 23806-2025精细陶瓷断裂韧性试验方法单边预裂纹梁(SEPB)法
- 妇科常规手术器械处理流程
评论
0/150
提交评论