- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 STM32F10x的主要模块设计1时钟
* Embedded System Development 嵌入式系统与应用 第8章 STM32F10x的主要模块设计1时钟 8.1 STM32时钟与配置 8.1.1 STM32时钟系统RCC寄存器组 8.1.2 RCC寄存器组在库中的宏定义 8.1.3 RCC功能配置数据的宏定义 8.1.4 RCC的库函数 8.1.5 系统时钟初始化 8.1.6 开启关闭外设时钟 8.1 STM32时钟与配置 前面的学习可知, STM32的时钟与其它外设一样,是通过多个寄存器进行配置后才能工作的。 要配置这些寄存器就要知道各寄存器的空间地址、寄存器各个位对应的功能,通过汇编指令才能读写各位。 本节通过剖析CMSIS库与STM32官方库的代码,学习如何用C/C++语言,使用库来对寄存器进行读写!库开发方式。 库的本质就是建立了一个新的软件抽象层,屏蔽底层实现方式的差异,使得软件开发变成简单的调用函数接口,而不用管它的实现,大大提高开发效率。 8.1.1 STM32时钟系统RCC寄存器组 每个部件都有相应的寄存器进行配置。如: 时钟控制寄存器RCC_CR 偏移地址:0x00h;复位值:0x0000 xx83h; 位31:26,保留,始终读为0; 位25,PLLRDY:1 PLL时钟就绪/0未就绪; 位24, PLLON :PLL使能, 0关闭/1使能; 位19, CSSON :时钟安全系统使能,0时钟监测器关/1开; 位18,HSEBYP:外部高速时钟旁路1/0不旁路; 位17,HSERDY:外部高速时钟就绪1/0未就绪; … … 详查STM32F10x参考手册。 STM32时钟系统 RCC寄存器组 时钟配置寄存器RCC_CFGR 偏移地址:0x04h;复位值:0x0000 0000h; 位26:24,MCO微控制器时钟输出:0xx没有输出,100 SYSCLK输出,101HSI输出,110HSE输出, 111PLL时钟2分频后输出; 位22, USBPRE,USB预分频, 0:1.5分频/1直接用; 位21:18,PLLMUL:PLL倍频系数,0000:2倍,0001:3倍,… …; 位17,PLLXTPRE,0:HSE二分频为PLL输入/1直接用; … … STM32时钟系统 RCC寄存器组 时钟中断寄存器RCC_CIR: 偏移地址:0x08h;复位值:0x0000 0000h; APB2外设复位寄存器RCC_APB2RSTR: 偏移地址:0x0Ch;复位值:0x0000 0000h; APB1外设复位寄存器RCC_APB1RSTR: AHB外设时钟使能寄存器RCC_AHBENR: APB2外设时钟使能寄存器RCC_APB2ENR APB1外设时钟使能寄存器RCC_APB1ENR 备份域控制寄存器RCC_BDCR 控制/状态寄存器RCC_CSR。 由上看出,RCC寄存器组在内存空间中是按字、连续存储的,只有确定了首地址,其他也就确定了。见下图: RCC寄存器组映像图 8.1. 2 RCC寄存器组在库中的宏定义 RCC寄存器组在stm32f10x.h中1081行的宏定义: typedef struct {?__IO uint32_t CR; ??__IO uint32_t CFGR; ??__IO uint32_t CIR; ??__IO uint32_t APB2RSTR; ??__IO uint32_t APB1RSTR; ??__IO uint32_t AHBENR; ??__IO uint32_t APB2ENR; ??__IO uint32_t APB1ENR; ??__IO uint32_t BDCR; ??__IO uint32_t CSR; #ifdef STM32F10X_CL ??__IO uint32_t AHBRSTR; ??__IO uint32_t CFGR2; #endif /* STM32F10X_CL */ … … } RCC_TypeDef; __IO宏定义core_cm3.h中: #define?__IO??volatile; //volatile(易变的),用变量时需到原地址重新存取。 uint32_t宏定义在stdin.h中: typedef unsigned int uint32_t; 知道了结构体首地址就确定RCC寄存器组所有32位寄存器的地址,0x04正好是地址偏移量,所以把连续的寄存器组定义为结构。 RCC寄存器组在库中的宏定义 文件中包含如下宏定义: #define PERIPH_BASE ((uint32_t)0x4000 0000) #define AHBPERIPH_BASE (PERIPH_BASE + 0x2 0000) #de
您可能关注的文档
最近下载
- 臀位剖宫产护理查房.pptx VIP
- 北京市通州区2024-2025学年高三上学期期中质量检测数学试卷2.docx
- 美食推荐微信小程序的设计与实现.docx VIP
- 冬季预防训练伤部队ppt.pptx VIP
- 提高患者腕带佩戴依从性PDCA.docx VIP
- 《工程勘察设计收费标准》2002年修订本完整.pdf VIP
- TZS 0680—2025《医疗机构实验室生物安全管理组织架构规范》(水印版).pdf VIP
- SANKEN三肯变频器samco-ns TEXC-NS-002(小容量)使用手册调试说明书.pdf
- 标准图集-05R502-燃气工程设计施工.pdf VIP
- 不靠谱梦想该劝阻吗辩论赛 正方辩词一辩、二辩、三辩、四辩发言稿.docx VIP
原创力文档


文档评论(0)