![STM32延时函数分析_第1页](http://file4.renrendoc.com/view/328481686efaf01b396e28e838797477/328481686efaf01b396e28e8387974771.gif)
![STM32延时函数分析_第2页](http://file4.renrendoc.com/view/328481686efaf01b396e28e838797477/328481686efaf01b396e28e8387974772.gif)
![STM32延时函数分析_第3页](http://file4.renrendoc.com/view/328481686efaf01b396e28e838797477/328481686efaf01b396e28e8387974773.gif)
![STM32延时函数分析_第4页](http://file4.renrendoc.com/view/328481686efaf01b396e28e838797477/328481686efaf01b396e28e8387974774.gif)
![STM32延时函数分析_第5页](http://file4.renrendoc.com/view/328481686efaf01b396e28e838797477/328481686efaf01b396e28e8387974775.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.z.STM32延时函数分析Corte*-M3内核处理器有个systick24位倒计时定时器,当计数到0时,重新装载初值.delay_init(u8SYSCLK)//定时初始化函数分析{Systick->;CTRL&=0*fffffffb;//bit2清空,选择外部时钟HCLK/8fac_us=SYSCLK/8;fac_ms=(u16)fac_us*1000;}摘自STM32手册6.2.6系统时钟(SYSCLK)选择系统复位后,HSI振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它将不能被停顿。只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时钟源的切换才会发生。在被选择时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟源就绪,才发生切换。在时钟控制存放器(RCC_CR)里的状态位指示哪个时钟已经准备好了,哪个时钟目前被用作系统时钟。Systick时钟那里来?Systick时钟由系统时钟8分频后决定.解析delay_us(u32nus)函数voiddelay_us(u32nus){u32temp;Systick->;LOAD=nus*fac_us;//装入定时值Systick->;VAL=0*00;//清空计数器值Systick->;CTRL=0*01;//开启倒计时定时器do{temp=Systick->;CTRL;//定时器状态赋给变量}while((temp&0*01)&&(temp&(1;CTRL=0*00;//关闭定时Systick->;VAL=0*00;//清空计数值}定时1us分析:由于Systick时钟设置为是系统时钟的8分频,假设SYSCLK=72M则Systick=9MHZ因为fac_us是基数无单位fac_us=SYSCLK/8;即72/8=9则Systick->;LOAD=nus*fac_us,假设定时1us则Systick->;LOAD=9.因为Systick是9M的速度倒计时所以9个计数时间为9*(1/9M)就是1us必须保证nus;#include"sys.h"#include"delay.h"#include"usart.h"#defineLED0PBout(0)#defineLED1PBout(1)voidled_init(void){RCC->;APB2ENR|=1;CRL&=0*ffffff00;GPIOB->;CRL|=0*00000033;//推挽输出GPIOB->;ODR|=0*ffff;}intmain(void){Stm32_Clock_Init(9);delay_init(72);led_init();while(1){LED0=0;delay_us(500);LED0=1;delay_us(500);}}delay_ms(u16nms)函数分析:voiddelay_ms(u16nms){u32temp;SysTick->;LOAD=(u32)nms*fac_ms;//时间加载(SysTick->;LOAD为24bit)SysTick->;VAL=0*00;//清空计数器SysTick->;CTRL=0*01;//开场倒数do{temp=SysTick->;CTRL;}while(temp&0*01&&!(temp&(1;CTRL=0*00;//关闭计数器SysTick->;VAL=0*00;//清空计数器}由于fac_ms基数为9000所以假设nms=1则倒计时时间9000/9M=0.001s=1ms就是延时1ms所以最大定时时间T=2^24/9000=1864ms延时实例:while(1){LED0=0;delay_ms(500);LED0=1;delay_ms(500);}改变最大延时方法:降低PLL倍频,计算得到系统新频率.intmain(void){Stm32_Clock_Init(4);delay_init(32);led_init();while(1){LED0=0;delay_ms(3000);LED0=1;delay_ms(3000);}}此时最大延时由于SYSCLK=32M所以Systick=4M既fac_ms=4000Tma*=2^24/4000=4194ms如果设置超过4194发生溢出,定时就不准了例子:intmain(void){Stm32_Clock_Init(4);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗器械物流配送协议
- 医疗器械物流合同无菌模板
- 海上货运合同化工品出口
- 游戏中心装修合同
- 保安公司维修服务协议
- 宣城小区化粪池施工方案
- 龙门吊卸船装车施工方案
- 浙江金属波纹涵管施工方案
- 汕尾专业油罐清洗施工方案
- 无废学校建设的策略与实施路径
- 现代通信原理与技术(第五版)PPT全套完整教学课件
- 社区获得性肺炎教学查房
- 病例展示(皮肤科)
- GB/T 39750-2021光伏发电系统直流电弧保护技术要求
- DB31T 685-2019 养老机构设施与服务要求
- 燕子山风电场项目安全预评价报告
- 高一英语课本必修1各单元重点短语
- 糖尿病运动指导课件
- 完整版金属学与热处理课件
- T∕CSTM 00640-2022 烤炉用耐高温粉末涂料
- 心脑血管病的危害教学课件
评论
0/150
提交评论