第2章 STM32单片机IO端口编程
stm32 汇编语言 gpio读写

stm32 汇编语言gpio读写在STM32微控制器上使用汇编语言进行GPIO(General Purpose Input/Output)的读写涉及到寄存器的操作。
以下是一个简单的例子,演示如何使用汇编语言在STM32上进行GPIO读写。
请注意,具体的寄存器和位定义可能会因不同的STM32型号而有所不同,下面的示例基于Cortex-M系列的STM32微控制器。
首先,假设我们要配置一个GPIO引脚为输出,并将其电平设置为高。
我们使用的是ARM汇编语言(GNU汇编语法),这是通用的语法,但具体的寄存器和位定义可能需要根据你的芯片手册进行调整。
```assembly.global _start.section .text_start:// 设置RCC_AHB1ENR 寄存器的GPIOA 位,使能GPIOA 时钟LDR R1, =0x40023830 // RCC_AHB1ENR 地址LDR R0, [R1] // 读取RCC_AHB1ENR 的当前值ORR R0, R0, #(1 << 0) // 设置GPIOA 位STR R0, [R1] // 将修改后的值写回RCC_AHB1ENR// 设置GPIOA_MODER 寄存器的MODER5 位,将GPIOA Pin 5 配置为输出LDR R1, =0x40020000 // GPIOA 地址LDR R0, [R1, #0x00] // 读取当前GPIOA_MODER 的值ORR R0, R0, #(1 << 10) // 设置MODER5 为01 (输出模式)STR R0, [R1, #0x00] // 将修改后的值写回GPIOA_MODER// 设置GPIOA_ODR 寄存器的ODR5 位,将GPIOA Pin 5 输出电平设置为高LDR R0, [R1, #0x14] // 读取当前GPIOA_ODR 的值ORR R0, R0, #(1 << 5) // 设置ODR5 为1 (高电平)STR R0, [R1, #0x14] // 将修改后的值写回GPIOA_ODR// 无限循环loop:B loop```上述代码的作用是配置GPIOA Pin 5 为输出,并将其电平设置为高。
stm32读取io口高电平范围

主题:STM32读取IO口高电平范围分析内容:1. STM32简介1.1 STM32是由意法半导体公司推出的一款32位嵌入式微控制器产品线。
1.2 STM32具有高性能、低功耗、丰富的外设接口和丰富的开发工具支持等特点。
2. IO口的定义2.1 IO口是微控制器上的通用输入输出引脚,可以通过程序控制其电平状态。
2.2 在一般情况下,IO口可以设置为输入模式或输出模式。
3. STM32读取IO口高电平的方法3.1 使用GPIO读取寄存器3.1.1 GPIO读取寄存器是用来读取IO口的高电平状态的寄存器。
3.1.2 该寄存器可以通过位操作来读取每个IO口的状态,可以获取其高电平状态。
3.2 使用外部中断3.2.1 在需要及时响应IO口状态变化的情况下,可以使用外部中断来读取IO口的高电平状态。
3.2.2 外部中断可以在IO口状态发生变化时立即响应,提高了系统的实时性。
3.3 使用定时器3.3.1 定时器可以周期性地读取IO口的状态,对于需要进行定时采集的场景较为适用。
3.3.2 通过定时器可以定时读取IO口的高电平状态,并进行相应的处理和分析。
4. STM32读取IO口高电平的限制4.1 IO口的速度限制4.1.1 由于IO口的速度限制,读取高电平的频率受到一定的限制。
4.1.2 针对高速信号的IO口读取,需要根据具体情况选择合适的读取方法。
4.2 IO口的电压范围限制4.2.1 STM32的IO口在读取高电平时,需要注意其电压范围的限制。
4.2.2 超过了IO口能够承受的电压范围,可能会损坏IO口或引发其他问题。
5. 结论5.1 通过GPIO读取寄存器、外部中断、定时器等方法,可以实现STM32读取IO口高电平的功能。
5.2 在使用这些方法时,需要注意IO口的速度限制和电压范围限制,以确保系统的稳定性和安全性。
结尾:以上就是对STM32读取IO口高电平范围的分析,希望对您有所帮助。
如有任何问题,欢迎交流讨论。
第2章-STM32单片机应用基础与项目实践-微课版-屈微-清华大学出版社

2.3 STM32系列芯片
• 2004年ARM公司推出了Cortex-M3 MCU 内核。紧随其后,ST(意 法半导体)公司就推出了基于Cortex-M3内核的MCU,就是STM32。 STM32凭借其产品线的多样化、极高的性价比、简单易用的开发 方式,迅速在众多Cortex-M3 MCU中脱颖而出。
图 2.1 Cortex-M3 的内核架构简化框图
2.2.2 ARM Cortex-M3应用与编程
• Cortex-M3处理器是一个32位的处理器。内部的数据路径是32位的, 寄存器是32位的,寄存器接口也是32位的;Cortex-M3的指令和数 据各使用一条总线,所以Cortex-M3处理器对多个操作可以并行执 行,加快了应用程序的执行速度;Cortex-M3处理器使用Thumb-2 指令集,它允许32位指令和16位指令同时使用,代码密度与处理 性能大幅RM微处理器包括:ARM7系列、ARM9系列、ARM9E系列、 ARM10E系列、ARM11系列、SecurCore系列、Inter的XScale、ARM Cortex系列等。
• 1. ARM7系列
• 适用于对价位和功耗要求较高的消费类应用,应用领域:工业控 制、Intenet设备、网络和调制解调器、移动电话等。
• Cortex-M3内核的架构如图2.1图所示,下面主要关注架构图中标 了序号的模块:寄存器组、NVIC、中断和异常、储存器映射、总 线接口、调试支持。
• Cortex-M3中央内核基于哈佛架构,指令和数据各使用一条总线, 所以Cortex-M3处理器对多个操作可以并行执行,加快了应用程序 的执行速度。内核流水线分3个阶段:取指、译码和执行。
• 7.StrongARM和XScale系列 • Inter StrongARM SA - 1100处理器是32位RISC微处理器; • 采用ARM体系结构高度集成,融合Inter的设计和处理技术及ARM体系结构的
stm32单片机 io口对地电阻

一、概述在嵌入式系统开发中,常常需要对STM32单片机的IO口进行操作。
其中,IO口对地电阻的问题是一个重要的话题。
本文将详细介绍STM32单片机IO口对地电阻的相关知识,包括其原理、计算方法和在实际开发中的应用。
二、STM32单片机IO口对地电阻的原理1. STM32单片机IO口STM32单片机拥有丰富的外设资源,其中IO口是其中最基本的一个。
IO口可以设置为输入或者输出模式,用于连接外部设备或者作为数据输入输出的通道。
2. IO口对地电阻的概念在使用IO口时,会涉及到与地之间的电阻。
当IO口处于输出模式时,如果外部设备与IO口相连,就会形成一个电路。
而在该电路中,IO口与地之间的电阻就称为IO口对地电阻。
IO口对地电阻的大小会影响IO口的输出电平和稳定性,因此需要合理设置。
三、STM32单片机IO口对地电阻的计算方法1. IO口对地电阻的计算公式IO口对地电阻的大小可以通过计算得出。
假设STM32单片机输出高电平时的输出电流为I,输出低电平时的输出电流为I_L,从而可以得到IO口对地电阻的计算公式如下:R = V / I其中R为IO口对地电阻,V为IO口输出高电平时的电压。
2. 实际计算方法在实际计算中,需要先确定IO口的输出电压和输出电流大小,然后通过上述公式即可计算得出IO口对地电阻的大小。
在计算时需要考虑实际电路中的影响因素,如外部电阻等。
四、STM32单片机IO口对地电阻的应用1. IO口对地电阻的影响IO口对地电阻的大小直接影响了IO口输出电平的稳定性和可靠性。
较大的IO口对地电阻会导致输出电平波动较大,甚至无法正常输出高电平。
合理设置IO口对地电阻对于保证IO口正常工作至关重要。
2. 设置IO口对地电阻的方法在实际开发中,可以采取一定的措施来设置IO口对地电阻。
可以通过外部电路方式对IO口进行负载补偿,从而降低IO口对地电阻的大小,提高输出稳定性。
五、结论本文从STM32单片机IO口对地电阻的原理、计算方法和应用进行了详细介绍。
STM32单片机的八种IO口模式解析

STM32单片机的八种IO口模式解析
STM32八种IO口模式区别
(1)GPIO_Mode_AIN模拟输入
(2)GPIO_Mode_IN_FLOATING浮空输入
(3)GPIO_Mode_IPD下拉输入
(4)GPIO_Mode_IPU上拉输入
(5)GPIO_Mode_Out_OD开漏输出
(6)GPIO_Mode_Out_PP推挽输出
(7)GPIO_Mode_AF_OD复用开漏输出
(8)GPIO_Mode_AF_PP复用推挽输出
以下是详细讲解
(1)GPIO_Mode_AIN模拟输入
即关闭施密特触发器,将电压信号传送到片上外设模块(不接上、下拉电阻)
(2)GPIO_Mode_IN_FLOATING浮空输入
浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的
(3)GPIO_Mode_IPD下拉输入GPIO_Mode_IPU上拉输入
一般来讲,上拉电阻为1K-10K,电阻越小,驱动能力越强
电阻的作用:防止输入端悬空,减少外部电流对芯片的干扰,限流;,增加高电平输出时的驱动能力。
上拉输入:在默认状态下(GPIO引脚无输入)为高电平
下拉输入:在默认状态下(GPIO引脚无输入)为低电平
(4)GPIO_Mode_Out_OD开漏输出
开漏输出:输出端相当于三极管的集电极。
要得到高电平状态需要上拉电阻才行。
适合于做电流型的驱动,。
第2章-STM32单片机结构和最小系统

可选项
工作温度范围
芯片类型:F——通封用装快信闪,息L——低电压(1.65~
3.6V),WFL—AS—H无容线量系统芯片。
引脚数目
芯片子系列 引脚数目:R——B6— —43—P2I1KN2B8,KFBlFas—Fhla(—sh小2(容0中P量容I)N量,,芯)8G,—片—4——类—64—型K1B6KFBlasFhla(sh中(容小量容)量,)C,——6—
ADC2 GPIOD PWR SPI2/I2S
USART1 GPIOE BKP IWDG
SPI1 EXT1 CAN1 WWDG
TIM1 AFIO CAN2 RTC
GPIOA
I2C2 TIM7
GPIOB
I2C1 TIM6
UART5 TIM5
UART4 TIM4
USART3 TIM3
USART2 TIM2
APB2 预分频
/1,2,4,8,16
最大72MHz 外设时钟使能
PCLK2 APB2外设
TIM1,8 APB预分频=1乘
1,否则乘2
ADC预分频 /2,4,6,8
TIMxCLK TIM1,8 外设时钟使能 ADCCLK,最大14MHz ADC1,2,3
/2 时钟输出 MCO
MCO
PLLCLK HIS HSE SYSCLK
System 总线:将Cortex-M3 内核的 System 总线(外设总线)连接到总线矩阵;
总线结构中各单元的功能
DMA 总线:将DMA 的 AHB 主控接口与总线 矩阵相连; 总线矩阵:用于连接三个主动单元部件和三个 被动单元,负责协调和仲裁Cortex-M3 内核和 DMA 对 SRAM 的访问,仲裁采用轮换算法。 AHB/APB 桥:两个 AHB/APB 桥在 AHB 和 2 个 APB 总线之间提供完全同步连接。
stm32单片机开关代码
stm32单片机开关代码针对STM32单片机的开关控制代码,可以通过GPIO(通用输入/输出)模块来实现。
以下是一个简单的示例代码,用于控制单片机上的一个开关:c.#include "stm32f4xx.h"#define SWITCH_PIN GPIO_PIN_0。
#define SWITCH_PORT GPIOA.int main(void)。
{。
// 初始化时钟。
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;// 配置GPIOA的PIN0为输入。
SWITCH_PORT->MODER &= ~(GPIO_MODER_MODE0); while (1)。
{。
// 读取开关状态。
if (SWITCH_PORT->IDR & SWITCH_PIN)。
{。
// 开关处于打开状态。
// 执行相应操作。
}。
else.{。
// 开关处于关闭状态。
// 执行相应操作。
}。
}。
}。
在这个示例代码中,我们首先包含了STM32F4系列的头文件,然后定义了开关所连接的引脚和端口。
在主函数中,我们启用了GPIOA的时钟,并将其PIN0配置为输入。
然后在一个无限循环中,我们不断地读取开关的状态,根据开关状态执行相应的操作。
需要注意的是,以上代码是一个简单的示例,实际的应用中可能需要考虑消抖、中断处理等更多的细节。
另外,具体的代码可能会因为使用的STM32型号和开发环境的不同而有所差异,需要根据具体情况进行调整。
希望以上信息能够帮助到你。
如果你需要更详细的代码或者其他方面的帮助,请随时告诉我。
STM32的IO端口高8位或低8位单独操作方法
举例说下怎幺对IO端口赋值:
1.对高8位/低8位/全部清零
很明显,这个只需要操作BRR寄存器即可:
对高8位清零:GPIOA->BRR=0xFF00
对低8位清零:GPIOA->BRR=0x00FF
全部清零:GPIOA->BRR=0xFFFF或GPIOA->ODR=0x0000
1,置0的位不影响原来的值
高16位应该置为0000000010101010,这个就等于~0x55(即取反)的结
果,置1使某位为ห้องสมุดไป่ตู้,置0不影响原来的值
这样,BSRR寄存器的值就是00000000101010100000000001010101,
两部分的高8位均为0,所以不会影响到IO口的高8位
总结,以下的宏实现对某端口的低8位置数,不影响高8位:
STM32的IO端口高8位或低8位单独操作方法
几天前刚接触stm32的时候,被单独操作IO口给弄糊涂了,现记录下,现
在发现其实蛮简单的,只是刚开始的时候~~~
stm32的IO端口都是16位的,如果要单独操作某高8位或低8位,则不
是那幺简单,先看两张BSRR/BRR寄存器的图:
据官方数据手册上面说,这两个寄存器用于专门对ODR进行原子操作的
#defineGPIO_WriteLow(GPIOx,a)GPIOx-
>BSRR=(((uint32_t)(uint8_t)~(a))BSRR=(((uint8_t)(uint8_t)~(a))BSRR=value的
形式,所以担心是多余的
当然了,使用下面2,3的两个宏也可以完全该清零操作~stm32固件库是不
是应该加上这两个宏/函数?
单片机数字输入输出与IO口编程实践指南
单片机数字输入输出与IO口编程实践指南引言:单片机是一种集成电路芯片,具有微处理器、内存和输入输出设备等功能模块。
在现代电子设备和嵌入式系统中,单片机广泛应用于各种领域。
在单片机编程中,数字输入输出(Digital Input Output,简称DIO)和IO口编程是基础而重要的部分。
本文将介绍单片机数字输入输出基础知识和IO口编程的实践指南。
一、数字输入输出的基本概念1.1 数字输入输出(DIO)的定义数字输入输出(DIO)是单片机进行与外部世界的交互的方式。
通过DIO,单片机可以从外部接收数据(输入)和向外部发送数据(输出)。
1.2 二进制表示在单片机中,数字信号被表示为二进制数值。
通常,0表示低电平(或逻辑低),1表示高电平(或逻辑高)。
1.3 IO口的分类单片机的IO口可分为输入口和输出口。
输入口用于接收外部信号,输出口用于向外部发送信号。
1.4 IO口的引脚编号单片机上的每个IO口都有一个引脚编号,通过这个编号可以确定特定的IO口。
二、数字输入输出的实现方式2.1 接口标准单片机的数字输入输出通常与外部设备通过特定的接口标准连接,如GPIO、UART、SPI、I2C等。
2.2 GPIO(通用输入输出)接口通用输入输出(GPIO)接口是最常见和基础的IO接口。
它提供了通用的数字输入输出能力,并且可以配置为输入口或输出口。
2.3 IO口的配置在单片机的程序中,需要对IO口进行相应的配置,包括输入模式、输出模式、输入电平触发方式、输出电平和驱动能力等。
三、IO口编程实践指南3.1 IO口初始化在进行IO口编程之前,首先需要进行IO口的初始化。
初始化包括设置IO口为输入还是输出、设置输入口的电平触发方式、设置输出口的初始电平等。
3.2 数字输入实践数字输入是指单片机通过IO口接收来自外部的数字信号。
为了正确读取到外部信号,需要配置IO口为输入模式,并设置电平触发方式。
3.3 数字输出实践数字输出是指单片机通过IO口向外部发送数字信号。
STM32微处理器 GPIO接口定义
例如:读取GPIOE.5引脚输出值 GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_5);
GPIO_ReadOutputData()函数是读取指定IO口16个引脚的输出值, 也就是读取寄存器ODR的值
IO端口低配置寄存器CRL描述,如下图1所示。 该寄存器的复位值为:
0X4444 4444 既配置端口为浮空输入模式
STM32
认识STM32的IO口
2. STM32的IO端口寄存器
② 端口高配置寄存器CRH
CRH的作用和CRL完全一样,CRH控制的是高8位输出口。 例如:设置GPIOC的11位为上拉输入,12位为推挽输出,输出速率为
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
通过这3个语句,设置了PC11为上拉输入,PC12为推挽输出、速率为50MHz。
STM32
认识STM32的IO口
2. STM32的IO端口寄存器
例如:设置GPIOC的11位为上拉输入,12位为推挽输出,输出速率为50MHz
。若采用stm32f10x_gpio.c文件中的GPIO_Init函数设置,代码如下:
设连接的时候很有优势,具体哪些IO口是5V兼容的,可从数据 手册引脚描述查到(I/O Level标FT的就是5V电平兼容的)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*设置高速PCLK2时钟(即APB2 clock)= = AHB时钟/2 = 24 MHz,PCLK2 = HCLK/2 */
RCC_PCLK2Config(RCC_HCLK_Div2);
/*设置低速PCLK1时钟(即APB1 clock)= AHB时钟/4=12 MHz ,PCLK1 = HCLK/4 */
/* Peripheral base address in the bit-band region */
#define PERIPH_BASE
((u32)0x40000000)
/* Peripheral memory map */ #define APB1PERIPH_BASE #define APB2PERIPH_BASE #define AHBPERIPH_BASE
APB2:用于高速外设 APB1:用于低速外设
连接在APB2(高速外设)上的设备:有 连接在APB1(低速外设)上的设备:有
连接在AHB(Advanced High performance Bus)上的设备:有 STM32系统结构图
1、使能 挂接在APB1总线上的外设 对应的时钟 命令:
RCC_APB1PeriphClockCmd( ) 函数
RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE);
/* Enable GPIOC, GPIOD clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC| RCC_APB2Periph_GPIOD, ENABLE); }
2.2.2 RCC_Configuration( )函数
( Reset and Clock Configuration( ), 复位和时钟设置 函数 ) 1、RCC复位和时钟配置寄存器组 2、枚举类型ErrorStatus
3、RCC_Configuration ( ):(复位和时钟设置)函数
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)
第2章 STM32单片机IO端口编程
2.1 STM32单片机管脚和命名规则 2.2 STM32单片机时钟 配置 2.3 STM32单片机I/O端口配置 2.4 STM32单片机I/O端编程步骤
2.1 STM32单片机管脚和命名规则 • STM32单片机管脚 • STM32系列单片机命名规则
• STM32单片机管脚:以STM32F103Cx为例,
在文件“stm32f10x_map.h”中,定义如下:
/*------------------------ Real-Time Clock -----------------------------------*/ typedef struct {
vu32 CR; vu32 CFGR; vu32 CIR; vu32 APB2RSTR; vu32 APB1RSTR; vu32 AHBENR; vu32 APB2ENR; vu32 APB1ENR; vu32 BDCR; vu32 CSR; } RCC_TypeDef;
2.2.1 STM32时钟系统
2.2.2 RCC_Configuration(复位和时钟设置)函数
2.2.1 STM32时钟系统
STM32系列微控制器中,有5个时钟源: HSI (High Speed Internal) :高速内部时钟、 HSE (High Speed External):高速外部时钟、 LSI (Low Speed Internal) :低速内部时钟、 LSE(Low Speed External) :低速外部时钟、 PLL(Phase Locked Loop) :锁相环倍频输出。 其中的HSI、HSE、 或PLL可被用来驱动系统时钟。 其中的LSI、LSE作为二级时钟源。
该宏定义的功能:在程序中,所有写RCC的地方,编译器的 预处理程序,都将它替换为:((RCC_TypeDef *) 0x40021000)
2、枚举类型ErrorStatus 在文件“stm32f10x_type.h”中,包含 typedef enum {ERROR=0, SUCCESS=! ERROR} ErrorStatus;
PERIPH_BASE (PERIPH_BASE + 0x1 0000) (PERIPH_BASE + 0x2 0000)
#define RCC_BASE
(AHBPERIPH_BASE + 0x1000)
#ifdef _RCC
#define RCC
#endif /*_RCC */
((RCC_TypeDef *) RCC_BASE)
RCC_PLLConfig ( RCC_PLLSource_HSE_Div1, RCC_PLLMul_6);
//此处不同于鸥鹏公司的程序:PLLCLK = 8MHz * 6 = 48 MHz
/* Enable PLL */ RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready,等待 锁相环 输出稳定 */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { }
3、使能 挂接在AHB总线上的外设 对应的时钟 命令:
RCC_AHBPeriphClockCmd( ) 函数
例如,使能DMA对应的时钟: RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA, ENABLE);
使用操作符“|”可以一次选中上表中的一个或多个取值的组合作为 该参数的值。
该语句,定义了新枚举类型名ErrorStatus,代表左侧定义的 枚举类型。
3、RCC_Configuration(复位和时钟设置)函数:在“HelloRobot.h”
中 枚举类型
变量
ErrorStatus HSEStartUpStatus;
void RCC_Configuration(void)
STM32时钟系统结构图(P56)
• AMBA片上总线:已成为一种流行的工业片上总线标准。 它包括AHB(Advanced High performance Bus)和 APB(Advanced Peripheral Bus ),前者作为系统总线, 后者作为外设总线。
• 外设总线:包括APB1(Advanced Peripheral Bus 1) 和APB2(Advanced Peripheral Bus 2)
STM32F103 xx增强型模 块框图
基于ARM Cortex内核的MCU 和 普通的8/16位单片机 在系统结构上 最大区别:
普通的8/16位单片机:只有1个系统时钟频率, 而基于ARM Cortex内核的MCU:具有多个时钟频率,分别供 给内核 和 不同外设模块使用。
本课程的学习难点之一:就是ARM时钟 比 单片机时钟 复杂得多。
以上所见的固件库函数: 详见“中文版:STM32F10xxx_固件库函数 V2.pdf P193”
固件库函数的具体实现:见文件“stm32f10x_rcc.h”
{ /*将外设RCC寄存器组重新设置为默认值,即复位 。 RCC system reset*/ RCC_DeInit();
/*打开外部高速时钟晶振HSE ,Enable HSE */ RCC_HSEConfig(RCC_HSE_ON);
/*等待HSE外部高速时钟晶振稳定,或者在超时的情况下退出,Wait till HSE is ready */
详见参考手册 V10_1 第P60
Backup domain control register (RCC_BDCR)
1、RCC复位和时钟配置寄存器组
编程时,时钟的具体配置是从RCC(Reset and Clock Configuration,复位和时钟配置)寄存器组开始。在固件库中,用结构体 RCC_TypeDef 定义 RCC寄存器组:
采用的封装形式LQFP48
PC口 3脚 PD口 2脚
PA口 16脚
PB口 16脚
STM32F103CBT6 共有37个I/O管脚: PA口 16脚+ PB口16脚+ PC口3脚+ PD口2脚。
2.2 STM32单片机时钟配置
一般而言,嵌入式系统在工作前,都要进行初始化工作,其中包括 调用RCC_Configuration(复位和时钟设置)函数。用于系统复位 和初始化STM32系列微控制器的时钟。
/* Enable peripheral clocks --------------------------------------------------*/ /* GPIOA, GPIOB and SPI1 clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2PeriphBuffer预取指令指令缓冲区,这2句与RCC没有关系 */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* 利用锁相环将HSE外部8MHz晶振6倍频到48 MHz,作为PLLCLK。 PLLCLK = 8MHz * 6 = 48 MHz */