×
单片机 > 单片机程序设计 > 详情

stm32学习之四

发布时间:2020-06-01 发布时间:
|
systick(滴答定时器):

 系统的滴答定时器可以测试的例子是,将开发板上的LED等轮流点亮即可(我选择的是1s轮流点亮三个LED等)。
 首先,系统滴答定时器的特点是,设置开启定时器的话,会自动计数,这个时候,计数到0的时候,会触发中断。
 可以设置一个静态的变量,全局进行计数,从而延时。
 
 步骤:
 1、建立一个SysTick.h文件,代码如下:
  #ifndef _SYSTICK_H
  #define _SYSTICK_H

  #include "stm32f10x.h"
  void SysTick_Init(void);

  //void timeDecrement(void);

  void delay(__IO uint32_t count);

  #endif
 2、建立一个SysTick.c文件,代码如下:
  #include "SysTick.h"
  static  __IO uint32_t timeCount;

  void SysTick_Init(void)
  {
   if(SysTick_Config(SystemCoreClock/1000))//配置1ms的中断
   {
    while(1);
   }
   SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
  }

  void delay(__IO uint32_t count)
  {
     timeCount = count;
     SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
     while(timeCount!=0);
  }

  void timeDecrement(void)
  {
   if(timeCount!=0x00)
   {
    timeCount--;
   }
  }
 
 3、中断产生后,会执行stm32f10x_it.c文件:
  会自动执行这个函数:
   SysTick_Handler()
  那么在函数内部进行处理函数:
   void SysTick_Handler(void)
   {
    timeDecrement();
   } 
   
 4、LED的操作不变:
  led.c文件:
   #include "led.h"
   void LED_GPIO_Config(void)
   {
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    
    GPIO_Init(GPIOC,&GPIO_InitStructure);

    GPIO_SetBits(GPIOC,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5); 
   }
  led.h文件:
   #ifndef _LED_H
   #define _LED_H
   #include "stm32f10x.h"

   #define ON 1
   #define OFF 0

   #define LED1(a) if (a)\
    GPIO_ResetBits(GPIOC,GPIO_Pin_3);\
    else\
    GPIO_SetBits(GPIOC,GPIO_Pin_3)
   #define LED2(a) if (a)\
    GPIO_ResetBits(GPIOC,GPIO_Pin_4);\
    else\
    GPIO_SetBits(GPIOC,GPIO_Pin_4)
   #define LED3(a) if (a)\
    GPIO_ResetBits(GPIOC,GPIO_Pin_5);\
    else\
    GPIO_SetBits(GPIOC,GPIO_Pin_5)
   void LED_GPIO_Config(void);


   #endif

 主函数如下:
  /******************** (C) COPYRIGHT 2013**************************
   * 文件名  :main.c
   * 描述    :用3.5.0版本建的工程模板。         
   * 实验平台:野火STM32开发板
   * 库版本  :ST3.5.0
   *
   * 作者    :wit_yuan 
   * 版本    : v1.0
   * 时间    : 2013年4月27日
  **********************************************************************************/
  #include "stm32f10x.h"
  #include "led.h"
  #include "SysTick.h"

  /* 
   * 函数名:main
   * 描述  : 主函数
   * 输入  :无
   * 输出  : 无
   */
  int main(void)
  {
   LED_GPIO_Config();
   SysTick_Init();
   while(1)
   {
    LED1(ON); 
    delay(1000);
    LED1(OFF);
    delay(1000);
    LED2(ON); 
    delay(1000);
    LED2(OFF);
    delay(1000);
    LED3(ON); 
    delay(1000);
    LED3(OFF);
    delay(1000);


   }
   
  }

 整个实验过程完毕。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会