用户工具

站点工具


systick定时器实验_定时点亮led

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
systick定时器实验_定时点亮led [2020/07/04 09:09]
zgf
systick定时器实验_定时点亮led [2022/03/22 10:17] (当前版本)
sean
行 3: 行 3:
 |技术支持电话|**0379-69926675-801**||| |技术支持电话|**0379-69926675-801**|||
 |技术支持邮件|Gingko@vip.163.com||| |技术支持邮件|Gingko@vip.163.com|||
-|技术论坛|http://​www.eeschool.org||| 
 ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^ ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^
 |  V1.0  |  2020-07-04 ​ |  gingko ​ |  初次建立 ​ |  |  V1.0  |  2020-07-04 ​ |  gingko ​ |  初次建立 ​ | 
行 60: 行 59:
 |2 |CLKSOURCE |R/​W |0 |时钟源选择位:| |2 |CLKSOURCE |R/​W |0 |时钟源选择位:|
 |:::​|:::​|:::​|:::​|0 = AHB/8| |:::​|:::​|:::​|:::​|0 = AHB/8|
-|||||1 = 处理器时钟AHB| +|:::|:::|:::|:::|1 = 处理器时钟AHB| 
-|1 |TICKINT |R/​W |0 |启用SysTick异常请求:| +|1|TICKINT|R/​W |0 |启用SysTick异常请求:| 
-|||||0 = 计时器数到0时没有异常请求。| +|:::|:::|:::|:::|0 = 计时器数到0时没有异常请求。| 
-|||||1 = 计时器数到0时产生SysTick异常请求| +|:::|:::|:::|:::|1 = 计时器数到0时产生SysTick异常请求| 
-|||||通过读取COUNTFLAG位可以确定计数器是否递减到0| +|:::|:::|:::|:::|通过读取COUNTFLAG位可以确定计数器是否递减到0| 
-|0 |ENABLE |R/​W |0 |SysTick定时器的使能位|+|0|ENABLE|R/​W|0 |SysTick定时器的使能位|
  
 (2)LOAD重装载值寄存器 (2)LOAD重装载值寄存器
行 74: 行 73:
   * RELOAD值可以是0x00000001 - 0x00FFFFFF范围内的任何值。起始值可以为0,但是没有效果,因为SysTick异常请求和COUNTFLAG在从1到0计数时才被激活。重新装载值是根据其使用情况计算的。例如,要生成周期为N个处理器时钟周期的多次触发定时器,可以配置RELOAD值为N-1。如果每100个时钟脉冲需要SysTick中断,则将RELOAD设置为99。   * RELOAD值可以是0x00000001 - 0x00FFFFFF范围内的任何值。起始值可以为0,但是没有效果,因为SysTick异常请求和COUNTFLAG在从1到0计数时才被激活。重新装载值是根据其使用情况计算的。例如,要生成周期为N个处理器时钟周期的多次触发定时器,可以配置RELOAD值为N-1。如果每100个时钟脉冲需要SysTick中断,则将RELOAD设置为99。
 (3)VAL当前数值寄存器 (3)VAL当前数值寄存器
- 
  
 |位段 |名称 |类型 |复位值 |描述| |位段 |名称 |类型 |复位值 |描述|
行 84: 行 82:
 |位段 |名称 |类型 |复位值 |描述| |位段 |名称 |类型 |复位值 |描述|
 |31 |NOREF |R |0 |指示是否有参考时钟提供给处理器| |31 |NOREF |R |0 |指示是否有参考时钟提供给处理器|
-|||||0:提供参考时钟| +|:::|:::|:::|:::|0:提供参考时钟| 
-|||||1:不提供参考时钟| +|:::|:::|:::|:::|1:不提供参考时钟| 
-|||||如果器件不提供参考时钟,SYST_CSR.CLKSOURCE标志位为1,不可改写。|+|:::|:::|:::|:::|如果器件不提供参考时钟,SYST_CSR.CLKSOURCE标志位为1,不可改写。|
 |30 |SKEW |R |1 |S指示TENMS的值是否精确| |30 |SKEW |R |1 |S指示TENMS的值是否精确|
-|||||0:TENMS是精确值| +|:::|:::|:::|:::|0:TENMS是精确值| 
-|||||1:TENMS不是精确值或者不提供| +|:::|:::|:::|:::|1:TENMS不是精确值或者不提供| 
-|||||不精确的TENMS值可以影响作为软件实时时钟节拍器的适用性。| +|:::|:::|:::|:::|不精确的TENMS值可以影响作为软件实时时钟节拍器的适用性。| 
-|||||23:​0 |TENMS |R |0 |重新加载 10ms (100Hz) 计时的值,​ 受系统时钟偏差的错误。如果值读取为零,​ 校准值未知。|+|23:​0 |TENMS |R |0 |重新加载 10ms (100Hz) 计时的值,​ 受系统时钟偏差的错误。如果值读取为零,​ 校准值未知。|
 ==== 四、 实验程序 ==== ==== 四、 实验程序 ====
  
行 209: 行 207:
   * 以下是系统滴答定时器中断回调函数,每发生一次滴答定时器中断进入该回调函数一次,主要实现定时1s,​改变一次标志位,使用LED显色状态变换一次。   * 以下是系统滴答定时器中断回调函数,每发生一次滴答定时器中断进入该回调函数一次,主要实现定时1s,​改变一次标志位,使用LED显色状态变换一次。
 <code c> <code c>
 +void HAL_SYSTICK_Callback(void)  ​
 +{  ​
 +    // 中断时间1ms,每1ms进入中断一次
 +    static int counter = 0;  ​
 +      ​
 +    if((counter ++ % 1000) == 0){  ​
 +        systick.second_flag = 1;      ​
 +    }  ​
 +}  ​
  
 </​code>​ </​code>​
systick定时器实验_定时点亮led.1593824980.txt.gz · 最后更改: 2020/07/04 09:09 由 zgf