RCC_Configuration(void)

合集下载

stm32步进电机主程序

stm32步进电机主程序
#define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电*/
unsigned char Speed;
void delay(void)
{
unsigned long ik ;
GPIO_Write(GPIOA,0x22);
delay();
GPIO_Write(GPIOA,0x44);
delay();
GPIO_Write(GPIOA,0x88);
delay();
}
delay1();
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化外设0,1,2,3,6的端口
GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化外设0,1,2,3,6的端口
/* Configure IO connected to LD1, LD2, LD3 and LD4 leds *********************/
/* Enable GPIO_LED clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOF, ENABLE);//打开外设A,F的时钟
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS

嵌入式复习题(题目借鉴)

嵌入式复习题(题目借鉴)

一、单选1..Cortex-M处理器采用的架构是(D)(A)v4T (B)v5TE (C)v6 (D)v72.Cortex-M系列正式发布的版本是(A )(A)Cortex-M3 (B)Cortex-M4 (C)Cortex-M6 (D)Cortex-M83.STM32F10x的NVIC可用来表示优先级的位数可配置为是____A.2B.4C.6D.8##B4.Cortex-M3的提供的流水线是____A.2级B.3级C.5级D.8级##B5.STM32处理器的USB接口可达____ A.8Mbit/s B.12Mbit/s C.16Mbit/s D.24Mbit/s##B6.Contex-M3处理器的寄存器r14代表____A.通用寄存器B.链接寄存器C.程序计数器D.程序状态寄存器##B7.Cortex-M3使用的存储器格式是____ A.小端格式 B.大端格式C.小端或大端格式D.没有正确答案##D8.Cortex-M3的存储格式中专用外设总线区域可以使用____A.小端格式B.大端格式C.小端或大端格式D.没有正确答案##A二、判断1.从某种意义上说,异常就是中断。

(√)2.中断的优先级和它在中断向量表里的位置没有关系。

(×)3.当抢占式优先级不一样时,一定会发生抢占。

(×)4.STM32ADC是一个12位的连续近似模拟到数字的转换器。

(√)5.所谓不可屏蔽的中断就是优先级不可调整的中断。

(×)6.固件包里的Library文件夹包括一个标准的模板工程,该工程编译所有的库文件和所有用于创建一个新工程所必须的用户可修改文件。

(×)三、填空1.STM32 103是32位的单片机2.F103 系列为标准型,运行频率为72MHZ3.STM32103的GPIO端口具有多种配置状态,输入有3种状态,它们分别是_模拟输入_、_浮空输入__和上拉/下拉输入;输出有4种状态,它们分别是_通用推挽输出_、_通用开漏输出_、_复用推挽输出_和_复用开漏输出_。

stm32的RTC时钟程序

stm32的RTC时钟程序
int main(void){ /* System Clocks Configuration */RCC_Configuration(); /* NVIC
rtcfirstconfigure程序是第一次配置rtc如果配置后以后上电不需要重新
stm32的RTC时钟程序
sபைடு நூலகம்m32 的RTC 时钟程序
前些日子做了stm32 RTC 时钟的程序,现在把它记录下来。首先配置RTC,,使用外部时钟32.768KHz。其中配置了秒中断。
RTCFirstConfigure()程序是第一次配置RTC,如果配置后以后上电不需要重新
配置,如果RTC 时钟快了,可内部校准。
void RTCFirstConfigure() //first ini { RCC_BackupResetCmd(ENABLE); RCC_BackupResetCmd(DISABLE); RCC_LSEConfig(RCC_LSE_ON); //enable LSE clock 32.768K while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {} // Select LSE as RTC Clock Source RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //Enable RTC Clock / RCC_RTCCLKCmd(ENABLE); // Wait for RTC registers synchronization / RTC_WaitForSynchro(); // Wait until last write operation on RTC registers has finished / RTC_WaitForLastTask(); // Enable the RTC Second Interrupt/ RTC_ITConfig(RTC_IT_SEC, ENABLE); RTC_WaitForLastTask(); RTC_SetPrescaler(32767); // RTC period = RTCCLK/RTC_PR = (32.768KHz)/(32767+1)/ RTC_WaitForLastTask(); // BKP_SetRTCCalibrationValue(120); //RTC Calibration RCC_ClearFlag(); } RTCNorConfigure()程序配置完后每次上电都运行的程序

STM32各模块学习笔记

STM32各模块学习笔记

STM32中断优先级和开关总中断一,中断优先级:STM32(Cortex-M3)中的优先级概念STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。

具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。

当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。

如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下:所有8位用于指定响应优先级最高1位用于指定抢占式优先级,最低7位用于指定响应优先级最高2位用于指定抢占式优先级,最低6位用于指定响应优先级最高3位用于指定抢占式优先级,最低5位用于指定响应优先级最高4位用于指定抢占式优先级,最低4位用于指定响应优先级最高5位用于指定抢占式优先级,最低3位用于指定响应优先级最高6位用于指定抢占式优先级,最低2位用于指定响应优先级最高7位用于指定抢占式优先级,最低1位用于指定响应优先级这就是优先级分组的概念。

--------------------------------------------------------------------------------Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:第0组:所有4位用于指定响应优先级第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级第4组:所有4位用于指定抢占式优先级可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:NVIC_PriorityGroup_0 => 选择第0组NVIC_PriorityGroup_1 => 选择第1组NVIC_PriorityGroup_2 => 选择第2组NVIC_PriorityGroup_3 => 选择第3组NVIC_PriorityGroup_4 => 选择第4组接下来就是指定中断源的优先级,下面以一个简单的例子说明如何指定中断源的抢占式优先级和响应优先级:// 选择使用优先级分组第1组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);// 使能EXTI0中断NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 指定抢占式优先级别1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响应优先级别0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);// 使能EXTI9_5中断NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);要注意的几点是:1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想不到的结果;2)抢占式优先级别相同的中断源之间没有嵌套关系;3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。

STM32入门基本知识

STM32入门基本知识

STM32学前班教程之一:选择他的理由经过几天的学习,基本掌握了STM32的调试环境和一些基本知识。

想拿出来与大家共享,笨教程本着最大限度简化删减STM32入门的过程的思想,会把我的整个入门前的工作推荐给大家。

就算是给网上的众多教程、笔记的一种补充吧,所以叫学前班教程。

其中涉及产品一律隐去来源和品牌,以防广告之嫌。

全部汉字内容为个人笔记。

所有相关参考资料也全部列出。

:lol教程会分几篇,因为太长啦。

今天先来说说为什么是它——我选择STM32的原因。

我对未来的规划是以功能性为主的,在功能和面积之间做以平衡是我的首要选择,而把运算放在第二位,这根我的专业有关系。

里面的运算其实并不复杂,在入门阶段想尽量减少所接触的东西。

不过说实话,对DSP的外设并和开发环境不满意,这是为什么STM32一出就转向的原因。

下面是我自己做过的两块DSP28的全功能最小系统板,在做这两块板子的过程中发现要想尽力缩小DSP的面积实在不容易(目前只能达到50mm×45mm,这还是没有其他器件的情况下),尤其是双电源的供电方式和1.9V的电源让人很头疼。

后来因为一个项目,接触了LPC2148并做了一块板子,发现小型的ARM7在外设够用的情况下其实很不错,于是开始搜集相关芯片资料,也同时对小面积的A VR和51都进行了大致的比较,这个时候发现了CortexM3的STM32,比2148拥有更丰富和灵活的外设,性能几乎是2148两倍(按照MIPS值计算)。

正好2148我还没上手,就直接转了这款STM32F103。

与2811相比较(核心1.8V供电情况下),135MHz×1MIPS。

现在用STM32F103,72MHz×1.25MIPS,性能是DSP的66%,STM32F103R型(64管脚)芯片面积只有2811的51%,STM32F103C型(48管脚)面积是2811的25%,最大功耗是DSP的20%,单片价格是DSP的30%。

STM32F103读写24C02 C程序 有硬件电路图和程序

STM32F103读写24C02 C程序 有硬件电路图和程序

向有子地址器件读取多字节数据函数
函数原型: bit RecndStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no);
功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
地址 sla,子地址 suba,读出的内容放入 s 指向的存储区,读 no 个字节。
Delay_us_24C02(1);
//发送结束条件的时钟信号
SCL(1) ; //SCL=1; 结束条件建立时间大于 4μs
Delay_us_24C02(5);
SDA(0); //SDA=1; 发送 I2C 总线结束信号
Delay_us_24C02(4);
}****************************************** 字节数据发送函数
注意:
如果返回 1 表示操作成功,否则操作有误。 使用前必须已结束总线。
********************************************************************/
u8 IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)
//实验 24C02 连接在 PF 口 //WP、A0、A1、A2 都接地,如下图所示。 //单片机:STM32F103
#include "stm32f10x_flash.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #define AT24C02 0xa0 //AT24C02 地址 /******************************** 变量定义 ---------------------------------------------------------*/ GPIO_InitTypeDef GPIO_InitStructure; //GPIO ErrorStatus HSEStartUpStatus; unsigned char Count1 , Count2; unsigned int USEC; static vu32 TimingDelay; unsigned char Readzfc; unsigned char pDat[8] = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55};//实验数据 unsigned char R_Dat[8]; /*********************************声明函数 -----------------------------------------------*/ void RCC_Configuration(void); void SysTick_Configuration(void); void Delay_us_24C02(u32 nTime); /************************************24C02 硬件接口 ******************************/

SPI总线数据通信实验

SPI总线数据通信实验
五、实验原理
1. 内部逻辑结构图
2. 时钟信号的相位和极性
SPI_CR1.LSBFIRST=0 的时序
3. 数据帧格式
根据 SPI_CR1.LSBFIRST 位,输出数据位时可以 MSB 在先也可以 LSB 在先。 根据 SPI_CR1.DFF 位,每个数据帧可以是 8 位或 16 位。所以选择的数据帧格式 对发送或者接受都有效。
Transfer_procedure();
/* Check the corectness of written dada */
TransferStatus = Buffercmp(SPI1_Buffer_Rx, SPI1_Buffer_Tx, BufferSize);
进行读写操作,此时串口会输出读到 FLASH ID 值。 2) 如果读到 ID 值正确,说明 FLASH 在位。FLASH 准备好后,先通过按钮"上"
键,将由 SPI2 接口把提前设置好的字符串“const u8 TEXT_Buffer[]={神 舟 II 号 SPI 读写访问程序}”中的数据写到 FALSH W25X16 中;然后,通过 “下”键的检测,将写到 W25X16 的字符串读取出来,并在串口显示出来。 3) 上电后,读取 FLASH 的 ID 号,作为在位判断,如果不在位,则循环打印“当 读到的 ID 为 0xxxx:期望值的 ID 为 0XEF14,请检查硬件连接!”等。否则 准备好,并提示写 FLASH 或是读 FLASH 操作。
7) SPI Tx CRC寄存器(SPI_TXCRCR)
8) SPI_I2S配置寄存器(SPI_I2S_CFGR)
9) SPI_I2S预分频寄存器(SPI_I2SPR)
六、参考程序

STM32开发板例程讲解之二:GPIO的描述和配置,GPIOIOTG例程精讲ch...

STM32开发板例程讲解之二:GPIO的描述和配置,GPIOIOTG例程精讲ch...
(二)专门的寄存器(GPIOx_BSRR 和GPIOx_BRR) 实现对GPIO 口的原子操作,即回避了设置或清除I/O端口时的“读-修改-写”操作,使得设置或清 除I/O端口的操作不会被中断处理打断而造成误动作。 (三)每个GPIO 口都可以作为外部中断的输入,便于系统灵活设计。 (四)I/O口的输出模式下,有3种输出速度可选(2MHz 、10MHz 和50MHz) ,这有利于噪声控制。 (五)所有I/O口兼容CMOS和TTL,多数I/O口兼容5V电平。 (六)大电流驱动能力:GPIO 口在高低电平分别为0.4V和VDD-0.4V时,可以提供或吸收8mA电流;如果把输入输出电平分别放宽到1.3V和VDD1.3V时,可以提供或吸收20mA电流。 (七)具有独立的唤醒I/O口。 (八)很多I/O口的复用功能可以重新映射。 (九)GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。此功能非常有利于在程序跑飞的 情况下保护系统中其他的设备,不会因为某些I/O口的配置被改变而损坏——如一个输入口变成输出口并输出电流。
#if 0 // 配置所有未使用GPIO引脚为输入模式(浮空输入),这样可以降低功耗,并且提高器件的抗EMI/EMC 的性能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);
//armfly :注释掉的原因是当代码在外部存储器运行时,GPIOD,E,F,G部分IO用于FSMC,因此对这些IO不能重置,否则导致取指异常 // GPIO_Init(GPIOD, &GPIO_InitStructure); // GPIO_Init(GPIOE, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RCC的配置函数,这个函数配置STM32的时钟,里面的函数都为STM32的库函数
void RCC_Configuration(void)
{
/* RCC system reset(for debug purpose) */
/* 复位所有的RCC外围设备寄存器,不改变内部高速振荡器调整位(HSITRIM[4..0])以及备份域控制寄存器(RCC_BDCR),控制状态寄存器RCC_CSR */
RCC_DeInit(); /*将外设RCC设置为缺省值*/
/* Enable HSE */
/* 开启HSE振荡器 */
/* 三个参数
RCC_HSE_ON HSE晶振开启
RCC_HSE_OFF HSE晶振关闭
RCC_HSE_BYPASS 使用外部时钟振荡器
*/
RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is ready */
/* HSEStartUpStatus为枚举类型变量,2种取值,0为ERROR,非0为SUCCESS
等待HSE准备好,若超时时间到则退出*/
HSEStartUpStatus = RCC_WaitForHSEStartUp();
/* 当HSE准备完毕切振荡稳定后 */
if(HSEStartUpStatus == SUCCESS)
{
/* HCLK = SYSCLK */
/* 配置AHB时钟,这个时钟从SYSCLK分频而来
分频系数有1,2,4,8,16,64,128,256,512
*/
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK */
/* 设置低速APB2时钟,这个时钟从AHB时钟分频而来
分频系数为1,2,4,8,16 */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK/2 */
/* 设置低速APB1时钟,这个时钟从AHB时钟分频而来
分频系数为1,2,4,8,16 */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* PLLCLK = 8MHz * 9 = 72 MHz */
/* 设置PLL的时钟源和乘法因子
第一个入口参数为时钟源,共有3个
RCC_PLLSource_HSI_Div2
RCC_PLLSource_HSE_Div1
RCC_PLLSource_HSE_Div2
乘法因子RCC_PLLMul_2~RCC_PLLMul_16,之间参数连续
*/
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* Enable PLL */
/* 输入参数为ENABLE及DISABLE */
RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {
}
/* Select PLL as system clock source */
/*选择系统时钟源,三个参数
RCC_SYSCLKSource_HSI 内部高速振荡器
RCC_SYSCLKSource_HSE 外部高速振荡器
RCC_SYSCLKSource_PLLCLK PLL时钟
*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */
/* 返回系统当前的时钟源
返回值有3种
0x00 HSI是当前时钟源
0x04 HSE是当前时钟源
0x08 PLL是当前时钟源
*/
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
/* Enable GPIOB, GPIOC and AFIO clocks */
/* 使能低速总线APB2上的外围设备
这里打开了IO端口B的时钟
AFIO是重映射功能的时钟,一般未使用REMAP功能时,此时钟不必开启输入参数见UM0472 PAGE 426
*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
}。

相关文档
最新文档