完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
a) 目的:使用系统时钟来进行两项实验——周期执行代码与精确定时延迟。 b) 初始化函数定义: void Systick_Configuration(void); c) 初始化函数调用: SysTick_Configuration(); d) 初始化函数: void SysTick_Configuration(void) {
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//时钟除8 SysTick_SetReload(250000); //计数周期长度 SysTick_CounterCmd(SysTick_Counter_Enable); //启动计时器 SysTick_ITConfig(ENABLE); //打开中断 } e) 在NVIC的初始化函数里面增加以下代码打开相关中断: NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 1, 0);//中断等级设置,一般设置的高一些会少受其他影响 f) 在STM32f10x_it.c文件中找到void SysTickHandler 函数 void SysTickHandler(void) { 执行代码 } g) 简单应用:精确延迟函数,因为systic中断往往被用来执行周期循环代码,所以一些例程中使用其中断的启动和禁止来编写的精确延时函数实际上不实用,我自己编写了精确计时函数反而代码更精简,思路更简单。思路是调用后,变量清零,然后使用时钟来的曾变量,不断比较变量与延迟的数值,相等则退出函数。代码和步骤如下: i. 定义通用变量:u16 Tic_Val=0; //变量用于精确计时 ii. 在stm32f10x_it.c文件中相应定义: extern u16 Tic_Val;//在本文件引用MAIN.c定义的精确计时变量 iii. 定义函数名称:void Tic_Delay(u16 Tic_Count);//精确延迟函数 iv. 精确延时函数: void Tic_Delay(u16 Tic_Count) //精确延时函数 { Tic_Val=0; //变量清零 while(Tic_Val != Tic_Count){printf("");}//计时 } v. 在stm32f10x_it.c文件中void SysTickHandler 函数里面添加 Tic_Val++;//变量递增 vi. 调用代码:Tic_Delay(10); //精确延时 vii. 疑问:如果去掉计时行那个没用的printf("");函数将停止工作,这个现象很奇 怪 |
|
相关推荐 |
|
277 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
368 浏览 0 评论
766 浏览 2 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
592 浏览 0 评论
879 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12034 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 20:49 , Processed in 0.346279 second(s), Total 31, Slave 25 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号