3736|6

60

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

sw笨笨的STM32笔记之十二:时钟不息工作不止,systic时钟应 [复制链接]

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("");函数将停止工作,这个现象很奇怪。
此帖出自stm32/stm8论坛

最新回复

                                     详情 回复 发表于 2009-3-12 21:22
点赞 关注
 

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

事实证明,叫“笨笨”的未必真笨。欧耶!

                                  
此帖出自stm32/stm8论坛
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

友情提示:不能工作,请用volatile

                                  
此帖出自stm32/stm8论坛
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

4
 

友情提示:出手就搞个ST_REG~~~

 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

5
 

谢谢McuIsp

感谢感谢,这很重要。看来应该大量使用V字头变量定义了,因为都是来自硬件的变量更改。这是我的注意事项里面的最后一个疑问,感谢为我解决了这个问题!!

volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。
此帖出自stm32/stm8论坛
 
 
 

回复

123

帖子

0

TA的资源

一粒金砂(初级)

6
 

路过

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

7
 

比较欣赏这些用心钻研的工程师

                                  
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表