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

系统滴答的学习笔记

[复制链接]
wamcncn 发布时间:2015-1-8 11:43
本帖最后由 wambob 于 2015-1-8 12:09 编辑 8 {! E/ ]1 w8 q/ @% a! ]" Q/ M

. y: A) @6 h! z, O最近要用到系统滴答来做扫描键盘,看了一些资料.
1 g+ p: W4 I9 D系统滴答就是一个24位的倒计时定时器,而且能够自动装置。
7 f* r7 b+ c5 }3 M; s9 V" V$ j4 \提到计数器,想必都知道,系统滴答也不例外,也是个计数器.而且是倒计数,当为0时,会出现一个标志位:COUNTFLAG.  可以查询这个标志.用来延时./ R, k, V# b8 J( O8 c% i
系统CM0.H里的定义:
/ @  ?1 A8 v! L7 r__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)( A4 s4 R  W3 _. Q' R) G; q
{
6 b0 J& ^# }, j  if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);      /* Reload value impossible */
4 l! S; s/ x- f
  SysTick->LOAD  = ticks - 1;                                  /* set reload register */
& H" w1 i1 ]$ W. g- z  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */9 K# j0 H8 k+ M. W2 H% N
  SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */4 o- g' r* h) s9 m7 }, x: }2 L3 `7 f
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
( v* O9 T1 Q+ R% k, J6 @9 s* l                   SysTick_CTRL_TICKINT_Msk   |
$ P. R6 m5 A9 c3 F                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */
6 P3 R' _1 ]1 r! e/ q) Z, ~  return (0);                                                  /* Function successful */
$ S4 ]0 G: Z1 v% c}

; `1 y- a  [: d( j1.根据定义,可以写个延时函数1 _& C( v" M" Q7 }7 M0 R% A
Systick.c0 G- h0 U& i, V
#include "systick.h"
. x" v# p- b( f" Dvoid Delay_Nms(int16_tNms); o+ M: G2 o9 H6 ]
{% g- b% q! d7 t
      Syytem->LOAD=(int32_t)Nms*9000;   //装载初值
5 O, d3 ~5 U% e5 ^  n8 e      SysTick->CTRL|=0x01;                    //开始计时$ ]; V9 g) W4 b, v3 D
      while(!(SysTick->CTRL&(1<<16)));   
5 h# `  j; `2 V7 M  }0 o      SysTick->CTRL=0X00000000; 0 L4 D4 e$ Z9 p* g6 s4 `% s
      SysTick->VAL=0X00000000;) X0 Q% N& P. I) a
}% }7 X5 E# `4 n( }; q7 g

& X: |- Z1 e9 N; S, t  Ssystick.h
  V) @" r: z3 Y8 o+ F5 \4 Z* B) \#ifndef  _SYSTICK_H
! Z2 ]+ s9 P1 _0 y, D. f#define  _SYSTICK_H' @$ B6 S: t/ i5 V2 M0 _
#include "stm32f0xx_conf.h"" `/ i9 T; E' \) g8 e, C5 ]
void Delay_Nms(uint16_t Nms);- k  f! D) I9 i3 c+ t% E) g8 l
#endif
& Q' ~$ ~4 O3 A$ k" C8 H4 K# n0 w; c8 a2 D! J1 P% Z& B- {% `- a
2.扫描键盘用中断的方法  B6 z1 I5 w! O) `, S( T1 r. p' y
程序调用core_cm0.c里的SysTick_Config的函数9 r9 K: E6 Y3 ~  D3 e# X6 ]3 x
if(SysTick_Config(SystemCoreClock/100)    //配置滴答频率  1秒/100= 10MS9 L! M% s& {# a1 Q2 a8 y3 h5 ^
{
1 h1 w+ O9 u9 A! \$ W7 V   KeyScan(void);
& e/ E+ X" {/ z}5 k& s3 D- R7 E3 x7 ^

  B8 x- {' n* j0 s1 R1 e2 F) ~SystemCoreClock 在 system_stm32f0xx.c 中定义为 uint32_t SystemCoreClock =48000000;, p) R7 x9 a$ f2 O, R

1 ^& }9 x, \& x3 ?( r  ?
9 @+ `5 H2 _4 D- ^* u6 h1 s- [/ T  
4 M1 H5 H1 K: P! g9 I# p0 [: V8 K  J+ S& n

. B4 G% w5 w5 o' G8 Z! }9 @+ D4 S( u( Y2 \

' |! E' D* z7 @
收藏 评论3 发布时间:2015-1-8 11:43

举报

3个回答
天天晓宇 回答时间:2015-1-8 12:32:16
这个大家几乎都是这么用的
wamcncn 回答时间:2015-1-8 12:33:59
天天晓宇 发表于 2015-1-8 12:32
. T- \" k/ {- P! g" H8 c这个大家几乎都是这么用的

0 E) J6 T- W; A* l" r必须的,刚学习,自己的体会
lovewyufeng 回答时间:2015-1-8 13:00:03
SysTick 不建议用于延时  SysTick 在ARM中有特殊用途

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版