您的位置 首页 分销

SysTick定时器完成走马灯的功用

SysTick定时器实现走马灯的功能-SysTick定时器非常简答,只有四个寄存器。这四个寄存器的含义在《Cortex-M3权威指南》那本书中讲的非常的清楚,这里不复述了,下面只讲讲在STM32上SysTick有什么特殊之处。

SysTIck定时器被集成在NVIC中。因而,只要是Cortex-M3内核的单片机,就都有它。这个学习笔记就用SysTIck定时器来完成走马灯的功用。

SysTIck定时器十分简答,只要四个寄存器。这四个寄存器的意义在《Cortex-M3威望攻略》那本书中讲的十分的清楚,这儿不复述了,下面只讲讲在STM32上SysTIck有什么特别之处。依照CMSIS规范,用C言语拜访这四个寄存器时运用的寄存器称号别离如下:

SysTick-》CTRL

SysTick-》LOAD

SysTick-》VAL

SysTick-》CALIB

SysTick-》CALIB的值固定为9000,因而,只要当体系嘀嗒时钟设定为9MHz(HCLK/8的最大值),发生1ms时刻基准。

STM32供给了2个时钟源:

0:AHB/8

1:Processorclock(AHB)

因而,SysTick-》CTRL=7表明运用处理器时钟作为时钟源,使能SysTick,而且使能SysTick中止。SysTick-》CTRL=3时频率降为本来的1/8。

我的开发板上有四个LED,别离对应的GPIO端口D的PD2、PD3、PD4和PD7。

下面是比如程序,依然先是直接设置寄存器。

#include“stm32f10x.h”

#defineRCC_GPIO_LEDRCC_APB2Periph_GPIOD

#defineGPIO_LED_PORTGPIOD

#defineGPIO_LED1GPIO_Pin_2

#defineGPIO_LED2GPIO_Pin_3

#defineGPIO_LED3GPIO_Pin_4

#defineGPIO_LED4GPIO_Pin_7

#defineGPIO_LED_ALLGPIO_LED1|GPIO_LED2|GPIO_LED3|GPIO_LED4

voidLED_Spark(void)

{

staticintstate=0;

switch(state)

{

case0:

GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);

GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED1);

state++;

break;

case1:

GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);

GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED2);

state++;

break;

case2:

GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);

GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED3);

state++;

break;

case3:

GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);

GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED4);

state=0;

break;

default:

state=0;

break;

}

}

intmain(void)

{

SystemInit();

RCC-》APB2ENR|=0x00000020;

GPIOD-》CRL=0x24422244;//PD2PD3PD4PD7SettoOutputmode

SysTick-》LOAD=24000000/200;

SysTick-》CTRL=3;

for(;;)

{

}

}

/**

*@briefThisfunctionhandlesSysTickHandler.

*@paramNone

*@retvalNone

*/

voidSysTick_Handler(void)

{

staticintcount=0;

count++;

if(count==100)

{

LED_Spark();

count=0;

}

}

然后是使用STM32 固件函数库供给的函数的比如。

#include“stm32f10x.h”

#defineRCC_GPIO_LEDRCC_APB2Periph_GPIOD

#defineGPIO_LED_PORTGPIOD

#defineGPIO_LED1GPIO_Pin_2

#defineGPIO_LED2GPIO_Pin_3

#defineGPIO_LED3GPIO_Pin_4

#defineGPIO_LED4GPIO_Pin_7

#defineGPIO_LED_ALLGPIO_LED1|GPIO_LED2|GPIO_LED3|GPIO_LED4

voidLED_Spark(void)

{

staticintstate=0;

switch(state)

{

case0:

GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);

GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED1);

state++;

break;

case1:

GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);

GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED2);

state++;

break;

case2:

GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);

GPIO_ResetBits(GPIO_LED_PORT, GPIO_LED3

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/fenxiao/346820.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部