你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

系统滴答的学习笔记

[复制链接]
wamcncn 发布时间:2015-1-8 11:43
本帖最后由 wambob 于 2015-1-8 12:09 编辑
1 l6 I6 h7 ^4 d) i* J* I4 Y: W2 t) h$ K- u9 v+ B
最近要用到系统滴答来做扫描键盘,看了一些资料.
* M2 J* O. `. ^+ E& ~系统滴答就是一个24位的倒计时定时器,而且能够自动装置。* L( c2 q. B! B: q3 l# ^/ `
提到计数器,想必都知道,系统滴答也不例外,也是个计数器.而且是倒计数,当为0时,会出现一个标志位:COUNTFLAG.  可以查询这个标志.用来延时.
: e* @4 z  ^0 f; d0 J系统CM0.H里的定义:5 V7 S0 q2 u7 I2 z
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)7 L" Q* G( T, U8 [
{
0 Q$ C( W% Y0 W/ _& U: i3 Y! M  if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);      /* Reload value impossible */

6 E: ?0 i" |0 a- U9 J  SysTick->LOAD  = ticks - 1;                                  /* set reload register */
6 S& b! ?- L1 S; S( L' ?. l& A  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */8 ~) e; N: E; \6 L3 Y5 B9 A) _9 B- h
  SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */( O" K1 B+ A- w
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |- a: |6 {, i8 ]/ ]- u  T
                   SysTick_CTRL_TICKINT_Msk   |# P- E/ m8 @6 N; q# |
                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */  ]  Z0 [3 K" o! K( l& }
  return (0);                                                  /* Function successful */  ~1 A  p- V) _2 w. T5 B
}
# t1 r  b2 [. u7 P8 d) z7 p& ~  [
1.根据定义,可以写个延时函数1 |9 w; \6 [$ m
Systick.c1 H/ i7 [- V3 {9 v, d
#include "systick.h". |: H' w( ], [8 u
void Delay_Nms(int16_tNms)# `! `- L* [! l/ ?4 ^
{
* Q* f5 @8 p: q1 ]# N" V3 Q      Syytem->LOAD=(int32_t)Nms*9000;   //装载初值  y1 z) N" O- z( `
      SysTick->CTRL|=0x01;                    //开始计时
2 t( M& m) ~. a& w      while(!(SysTick->CTRL&(1<<16)));   
6 ^! s2 X& U2 E! y) d* X      SysTick->CTRL=0X00000000;
: t3 R  G6 u. h      SysTick->VAL=0X00000000;2 L$ k+ c  j  w" a3 i
}
! ]! u. R" X% p& Z+ b2 f
; r' k6 a2 V' j9 E& s" a0 W, Usystick.h2 X$ R' n  x2 ]
#ifndef  _SYSTICK_H
( F7 P& J- M4 B#define  _SYSTICK_H
0 o2 d7 r  w) ~6 n8 Q#include "stm32f0xx_conf.h"
4 n4 m3 L  u& d3 ~void Delay_Nms(uint16_t Nms);0 p1 v. i. a% \2 w8 o- }
#endif/ p; \. l/ k' {0 \
2 G, T$ U8 p2 C  f  A
2.扫描键盘用中断的方法6 f$ T2 X& _# D3 `
程序调用core_cm0.c里的SysTick_Config的函数
; t' D& m5 j% o- D7 f) Tif(SysTick_Config(SystemCoreClock/100)    //配置滴答频率  1秒/100= 10MS
7 F! M! J$ \5 }' ^! m$ r  j/ i. f{7 }+ f  M, S* J1 L3 f7 s
   KeyScan(void);* r0 ^5 G' m: Q+ T5 D0 w
}
0 g2 n  b2 R% R* Z4 L+ |0 c/ g' _8 x
SystemCoreClock 在 system_stm32f0xx.c 中定义为 uint32_t SystemCoreClock =48000000;, {& C* f7 y  `' W$ t6 ~
9 B6 \9 A: w: L/ h
2 ]; p4 H9 _1 v2 Y( U
  
/ G7 ]9 A0 o$ a8 s/ z2 |3 u7 @4 h: Q' @/ T  V: ^! j4 ~6 ?9 j4 ^

5 P. u, M! A! M6 J; e0 a: T* @
: n% B$ y( K! [( U7 j  [- q6 ?& c5 C# t& l) b
赞 收藏 评论3 发布时间:2015-1-8 11:43

举报

3个回答
天天晓宇 回答时间:2015-1-8 12:32:16
这个大家几乎都是这么用的
wamcncn 回答时间:2015-1-8 12:33:59
天天晓宇 发表于 2015-1-8 12:323 `% u7 ]4 h( B- {% B5 _
这个大家几乎都是这么用的

% M, ?' ?' ]+ {9 e' s8 D7 B必须的,刚学习,自己的体会
lovewyufeng 回答时间:2015-1-8 13:00:03
SysTick 不建议用于延时  SysTick 在ARM中有特殊用途
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版