stm32学习之四

发布者:pi26最新更新时间:2016-10-05 来源: eefocus关键字:STM32  systick 手机看文章 扫描二维码
随时随地手机看文章
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);


   }
   
  }

 整个实验过程完毕。

关键字:STM32  systick 引用地址:stm32学习之四

上一篇:stm32学习之五
下一篇:stm32学习之三

推荐阅读最新更新时间:2024-03-16 15:13

工程师笔记|带有空片检测功能的STM32需注意的GPIO设计
引言 从STM32F0部分型号开始,比如STM32F04x和STM32F09x,STM32越来越多的型号具有了空片检测(Empty Check)功能。以前,STM32的启动由BOOT0和BOOT1来决定,在引入了空片检测功能之后,则在BOOT0=0的情况下,还需要分两种情况: 一是内部已经存在代码,则从用户存储区启动; 二是如果是空片,则从系统存储区启动,执行内部Bootloader。 它带来什么好处呢?客户如果是空片上板,无需对BOOT0引脚进行跳线,就可以直接使用内部Bootloader进行串口或其他通讯口进行代码烧录了,可以说非常地方便。但是,这同时为GPIO的设计带来一个非常大的风险,在电路设计时需要引起注意,做好
[单片机]
STM32基础9--串口通信(UART)
UART传输方式 UART(Universal Asynchronous Receiver Transmitter),异步串口没有时钟信号,也没有硬件控制流信号。只有Tx(串行输出信号)与Rx(串行输入信号)。 在STM32F407中,串口数据传输有两种方式:阻塞与非阻塞。 1)阻塞:轮询的方式,就是发送缓冲器的数据,直到数据传输完成或者超时后,函数才返回; 2)非阻塞:启动发送缓冲区数据后,立即返回,传输完成后可以触发中断。 注:在51单片机中的UART通方式类似,也是通常使用阻塞发送数据, 而非阻塞通常用来接收数据。 PC端与STM32进行串口通讯 在当前的PC(个人电脑),基本上已将不支持串口了。因此需
[单片机]
<font color='red'>STM32</font>基础9--串口通信(UART)
STM32的Cortex-M3中断异常处理
前段时间用STM32F103VBT6写了一个中断的函数,借此机会想了解下STM32的中断机制,用过之后发现STM32的中断配置相当灵活,稳定行很高,测试发现几乎没出过什么差错。我在程序里开了三个中断,一个计数器用于精确延时用,另外两个为外部事件处理中断,下面一一详细介绍,方便初学者入门。 在进行STM32中断配置之前首先需要了解下它的中断部分: 一、Cortex-M3中断机制 在STM32处理器中有43个可屏蔽中断通道(不包含 16个 Cortex?-M3的中断线)。共设置了16个可编程的优先等级(使用了 4位中断优先级);它的嵌套向量中断控制器(NVIC)和处理器核的接口紧密相连,可以实现低延迟的中断处理和有效处理地处理
[单片机]
<font color='red'>STM32</font>的Cortex-M3中断异常处理
STM32】4—UART串口(查询模式)
0 实验预期效果 完成串口数据的接收和发送 1 相关原理图 2 硬件配置 DAPLINK、STM32F407VET6: TXD —— PA10 注意!!!!一定要看清!!!不要接错!!TXD是接PA10!!! RXD —— PA9 注意!!!!一定要看清!!!不要接错!!RXD是接PA9!!! GND —— GND 5V —— 5V 3 软件配置 USART相关知识 USART 简介、功能说明、框图见博客:【STM32】基于STM32F407实现串口通信_Max_Shy的博客-CSDN博客_stm3
[单片机]
【<font color='red'>STM32</font>】4—UART串口(查询模式)
如何构建STM32单片机keil的开发环境
新建工程 工程名设为stm32_demo,选择芯片型号为STM32F103B,如图, 因为下载的STM32库中有启动代码,所以这里选择“否”,不拷贝启动代码。 在工程文件下,新建Startup、Headers、User、Libraries、CMSIS、Lists、Output文件夹。 文件夹 用途 Startup 启动文件,Flash在16~32Kb小容量,64~128Kb中容量,256~512Kb大容量 CMSIS Cortex微控制器软件接口标准文件,该目录下文件适用所有Cortex系列 Libraries 存放STM32的驱动库文件 Headers 自定义的全局头文件 User 用户文件,我们把main.c放在该目录
[单片机]
如何构建<font color='red'>STM32</font>单片机keil的开发环境
stm32专题三十七:自动分配变量到指定 SRAM 空间
当有多个内存块时,MDK 优先使用空间更大的内存。 使用 sct 文件来进行内存管理: 编程要点: 1 取消勾选Use Memory Layout from Target Dialog,然后直接点击 edit 来编辑工程的 sct 文件: sct 文件的默认配置如下所示: 看一下此时的 map 文件。可以看到,HEAP 和 STACK 都位于IRAM1 区域。 接下来,我们将64 KB的内存空间分成两块,如下所示(直接复制,然后修改): 我们将 64 KB 的内部SRAM,人为的分成了 20 + 28 KB,按照 MDK 优先使用大容量的空间进行存储,我们预计结果会是保存在ERAM1中,map文件证实
[单片机]
<font color='red'>stm32</font>专题三十七:自动分配变量到指定 SRAM 空间
STM32库函数中GPIO_Init的理解
STM32中GPIO的配置风格和以往研究的MCU有很大的不同,研究了好一段时间才搞通。 typedef enum { GPIO_Mode_AIN = 0x0, GPIO_Mode_IN_FLOATING = 0x04, GPIO_Mode_IPD = 0x28, GPIO_Mode_IPU = 0x48, GPIO_Mode_Out_OD = 0x14, GPIO_Mode_Out_PP = 0x10, GPIO_Mode_AF_OD = 0x1C, GPIO_Mode_AF_PP = 0x18 }GPIOMode_TypeDef; 配置一个引脚只需要4位寄存器,而上面却定义了8位,仔细研究GPIO_Init()
[单片机]
一文详解STM32的嘀嗒时钟(SysTick)
简要说明 1概述 嘀嗒时钟(SysTick)是一个简单的系统时钟节拍计数器,它属于Cortex-M4内核嵌套向量中断控制器(NVIC)里的一个功能单元。他是一个24位的倒计时定时器(在NVIC中),当systick计数值到0的时候,SysTick重装载寄存器就会自动重新装载初值。只要SysTick控制和状态寄存器(CTRL)中的使能位没有ENABLE清除掉,那么就会永远的执行下去。 SysTick定时器被捆绑在NVIC中,可产生SysTick异常(异常号:15),属于Cortex-M4内核里的一个功能单元。 SysTick常作为系统节拍定时器用于操作系统(如mCOS-Ⅱ、FreeRTOS等)的系统节拍定时,从而推动任务和时间的
[单片机]
一文详解<font color='red'>STM32</font>的嘀嗒时钟(<font color='red'>SysTick</font>)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved