




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对STM32进行软件开发时,最基本的就是对STM32芯片进行时钟和端口配置,然后是对项目所用到的片上资源进行配置并驱动,下面给出时钟和端口配置代码,该代码几乎涵盖了片上所有时钟和端口配置项目,可根据自己需要进行删除不必要的配置项: /* Function Name : RCC_Configuration 复位时钟控制配置* Description : Configures the different system clocks.* Input : None* Output : None* Return : None*/void RCC_Configuration(void)/* system clocks configuration -系统时钟配置-*/* RCC system reset(for debug purpose) */RCC_DeInit(); /将外设RCC寄存器重设为缺省值/* Enable HSE */RCC_HSEConfig(RCC_HSE_ON); /开启外部高速晶振(HSE)/* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); /等待HSE起振if(HSEStartUpStatus = SUCCESS) /若成功起振,(下面为系统总线时钟设置) /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /使能FLASH预取指缓存 /* Flash 2 wait state */ FLASH_SetLatency(FLASH_Latency_2); /设置FLASH存储器延时时钟周期数(根据不同的系统时钟选取不同的值) /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /设置AHB时钟=72 MHz /* PCLK2 = HCLK/2 */ RCC_PCLK2Config(RCC_HCLK_Div2); /设置APB1时钟=36 MHz(APB1时钟最大值) /* PCLK1 = HCLK/2 */ RCC_PCLK1Config(RCC_HCLK_Div1); /设置APB2时钟=72 MHz /* Configure ADCCLK such as ADCCLK = PCLK2/2 */ RCC_ADCCLKConfig(RCC_PCLK2_Div2); /RCC_PCLK2_Div2,4,6,8 /* PLLCLK = 8MHz * 9 = 72 MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /PLL必须在其激活前完成配置(设置PLL时钟源及倍频系数) /* Enable PLL */ RCC_PLLCmd(ENABLE); /* Wait till PLL is ready */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) /* Enable peripheral clocks -外设时钟使能-*/ /* Enable AHB peripheral clocks -AHB外设时钟使能-*/* Enable DMA clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);/使能DMA时钟/* Enable SRAM clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SRAM, ENABLE);/使能SRAM时钟/* Enable FLITF clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FLITF, ENABLE);/使能FLITF时钟/* Enable APB1 peripheral clocks -APB1外设时钟使能-*/* TIM2,3,4 clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);/使能TIM2时钟 if (APB1 prescaler=1) x1/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);/使能TIM3时钟 else x2/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);/使能TIM4时钟/* WWDG clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);/使能WWDG时钟/* Enable SPI2 clocks */ RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPI2, ENABLE);/使能SPI2时钟/* USART2,3 clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);/使能USART2时钟(对应万利开发板上的USART1)/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);/使能USART3时钟(万利开发板上未接该串口)/* I2C1,2 clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);/使能I2C1时钟/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);/使能I2C2时钟/* USB clock enable / PLL clock divided by 1.5 used as USB clock source */ / RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5); /根据不同PLLCLK选择分频比,必须确保USBCLK始终是48MHz / RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);/使能USB时钟/* CAN clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);/使能CAN时钟/* BKP clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);/使能BKP时钟/* PWR clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);/使能PWR时钟/* APB1Periph_ALL clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_ALL, ENABLE);/使能APB1Periph_ALL时钟/* Enable APB2 peripheral clocks -APB2外设时钟使能-*/* Enable GPIOA,B,C,D,E clocks */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/使能GPIOA时钟/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);/使能GPIOB时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);/使能GPIOC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);/使能GPIOD时钟/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);/使能GPIOE时钟/* AFIO clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);/使能AFIO时钟/* Enable ADC1,2clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);/使能ADC1时钟/RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE);/使能ADC2时钟/* TIM1 clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);/使能TIM1时钟/* Enable SPI1 clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);/使能SPI1时钟/* USART1 clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);/使能USART1时钟(对应万利开发板上的USART0)/* APB1Periph_ALL clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ALL, ENABLE);/使能APB2Periph_ALL时钟/* Enable no peripheral clocks -非总线上外设时钟配置-*/* Enable Internal High Speed oscillator */ /RCC_HSICmd(ENABLE); /* Enable the Internal Low Speed oscillator */ /RCC_LSICmd(ENABLE); /给IWDG提供时钟信号(如果IWDG运行的话,LSI不能被失能) /* Configure RTCCLK such as ADCCLK = PCLK2/2 */ / RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);/* Select the LSE as RTC clock source */ / RCC_RTCCLKCmd(ENABLE);/* Enable the RTC clock */ /* Enable the Clock Security System */ /RCC_ClockSecuritySystemCmd(ENABLE); /* Output PLL clock divided by 2 on MCO pin */ /RCC_MCOConfig(RCC_MCO_PLLCLK_Div2);/ 警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。 大家都知道在使用单片机时,时钟速度决定于外部晶振或内部RC振荡电路的频率,是不可以改变的。而ARM的出现打破了这一传统的法则,可以通过软件随意改变时钟速度。这一出现让我们的设计更加灵活,但是也给我们的设计增加了复杂性。为了让用户能够更简单的使用这一功能,STM32的库函数已经为我们设计的更加简单方便。 在比较靠前的版本中,我们需要向下面那样设置时钟:ErrorStatus HSEStartUpStatus;/* FunctionName : RCC_Configuration()* Description : 时钟配置* EntryParameter : None* ReturnValue : None*/void RCC_Configuration(void) /* 复位所有的RCC外围设备寄存器,不改变内部高速振荡器调整位(HSITRIM4.0)以及 备份域控制寄存器(RCC_BDCR),控制状态寄存器RCC_CSR */ RCC_DeInit(); / RCC system reset(for debug purpose) /* 开启HSE振荡器 */ /* 三个参数: RCC_HSE_ON-开启 RCC_HSE_OFF-关闭 RCC_HSE_BYPASS-使用外部时钟振荡器*/ RCC_HSEConfig(RCC_HSE_ON);/ Enable HSE /* HSEStartUpStatus为枚举类型变量,2种取值,0为ERROR,非0为SUCCESS 等待HSE准备好,若超时时间到则退出*/ HSEStartUpStatus = RCC_WaitForHSEStartUp();/ Wait till HSE is ready if (HSEStartUpStatus = SUCCESS) / 当HSE准备完毕切振荡稳定后 /* 配置AHB时钟,这个时钟从SYSCLK分频而来分频系数有1,2,4,8,16,64,128,256,512*/ RCC_HCLKConfig(RCC_SYSCLK_Div1); / HCLK = SYSCLK /* 设置低速APB2时钟,这个时钟从AHB时钟分频而来分频系数为1,2,4,8,16 */ RCC_PCLK2Config(RCC_HCLK_Div1); / PCLK2 = HCLK /* 设置低速APB1时钟,这个时钟从AHB时钟分频而来分频系数为1,2,4,8,16 */ RCC_PCLK1Config(RCC_HCLK_Div2); / PCLK1 = HCLK/2 FLASH_SetLatency(FLASH_Latency_2); / Flash 2 wait state FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); / Enable Prefetch Buffer /* 设置PLL的时钟源和乘法因子 第一个入口参数为时钟源,共有3个 RCC_PLLSource_HSI_Div2 RCC_PLLSource_HSE_Div1 RCC_PLLSource_HSE_Div2 乘法因子RCC_PLLMul_2RCC_PLLMul_16,之间参数连续 */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); / PLLCLK = 8MHz * 9 = 72 MHz /* 输入参数为ENABLE及DISABLE */ RCC_PLLCmd(ENABLE); / Enable PLL while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) ; / Wait till PLL is ready /* 选择系统时钟源,三个参数 RCC_SYSCLKSource_HSI 内部高速振荡器 RCC_SYSCLKSource_HSE 外部高速振荡器 RCC_SYSCLKSource_PLLCLK PLL时钟 */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); / Select PLL as system clock source /* 返回系统当前的时钟源,返回值有3种 0x00 HSI是当前时钟源 0x04 HSE是当前时钟源 0x08 PLL是当前时钟源 */ while (RCC_GetSYSCLKSource() != 0x08) / Wait till PLL is used as system clock source ; 随之函数库的不断升级,到3.0以上时,我们就不用再这样编写时钟设置了,我们只要做如下两部即可:第一个: system_stm32f10x.c 中 #define SYSCLK_FREQ_72MHz 72000000 第二个:调用SystemInit()说明:在stm32固件库3.0中对时钟频率的选择进行了大大的简化,原先的一大堆操作都在后台进行。系统给出的函数为SystemInit()。但在调用前还需要进行一些宏定义的设置,具体的设置在system_stm32f10x.c文件中。文件开头就有一个这样的定义: /#define SYSCLK_FREQ_HSE HSE_Value /#define SYSCLK_FREQ_20MHz 20000000 /#define SYSCLK_FREQ_36MHz 36000000 /#define SYSCLK_FREQ_48MHz 48000000 /#define SYSCLK_FREQ_56MHz 56000000 #define SYSCLK_FREQ_72MHz 72000000 ST 官方推荐的外接晶振是 8M,所以库函数的设置都是假定你的硬件已经接了 8M 晶振来运算的.以上东西就是默认晶振 8M 的时候,推荐的 CPU 频率选择.在这里选择了: #define SYSCLK_FREQ_72MHz 72000000 也就是103系列能跑到的最大值72M然后这个 C文件继续
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45965-2025碳酸钠(纯碱)行业碳减排技术指南
- 汉字猜字谜课件
- 贵州省贵阳市普通高中2024-2025学年高一下学期期末监测化学试题(含答案)
- 2024-2025学年江苏省南京市六合区苏教版四年级下册期末考试数学试卷(含部分答案)
- 0-3岁婴幼儿保育与教育(1+x幼儿照护)知到智慧树答案
- 餐饮行业市场潜力分析
- 2024年秋新北师大版数学一年级上册教学课件 第四单元 10以内数加与减 第8课时 挖红薯
- 永州消防知识培训课件
- 跨境电子商务双语教程 习题和答案Chapter 4
- 水表检定基础知识培训课件
- 2025年云南省高校大学《辅导员》招聘考试题库及答案
- 消费品市场2025年消费者对绿色包装认知及需求调研可行性研究报告
- 台球厅消防知识培训课件
- 充电桩运维服务协议
- 2025至2030中国防砸安全鞋行业运营态势与投资前景调查研究报告
- 2025年医疗器械仓库管理培训试题及答案
- 2024年湖南省古丈县事业单位公开招聘工作人员考试题含答案
- 工程项目成本核算制度
- um-joyo c2001跨平台监控防误一体化系统使用说明书
- 输液泵/微量注射泵使用技术操作考核评分标准
- 国家科学技术奖学科专业评审组评审范围简表
评论
0/150
提交评论