STM32初学笔记2之Systick

发布者:MindfulBeing最新更新时间:2016-10-10 来源: eefocus关键字:STM32  Systick 手机看文章 扫描二维码
随时随地手机看文章
前面花了近一周的时间完成了STM32中关于复位与系统时钟的学习,终于,现在可以开始下一个任务了:SysTick。也不知道接着学这个对不对,但是感觉全都是跟时钟有关的东东,就放一起来学学,应该没什么问题吧。

        好吧,我不得不承认自己水平还不够,在第一个板子(金牛STM32F107VCT6)上跑了一个程序,但是没能成功,继续找原因吧。

        接下来,我还是不死心,在另外一块板子(ALIENTEK STM32F103RBT6)上面写了一个使用SysTick定时的代码,结果运行成功,在这里分享出来,以作以后复习只用。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

               Delay_SysTick.H

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/**
 ** 文件名称:Delay_SysTick.H
 ** 功能描述:系统滴答及其延时的使用声明
 ** 硬件平台:STM32F10x
 ** 编译环境:Keil uversion4 IDE
 ** 库版本  :v3.5.0
 ** 版本信息:v0.0
 ** 编写作者:
 ** 编写时间:2011-11-26
 ** 附加说明:无
 ** 修改记录:无
 **/
#ifndef _DELAY_SYSTICK_H
#define _DELAY_SYSTICK_H
#include "stm32f10x.h"
/* Private function prototypes -----------------------------------------------*/
void SysTick_Configuration(void);
void SysTickDelay(__IO uint32_t nTime);
void TimingDelay_Decrement(void);
void SysTick_Handler(void);
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

               Delay_SysTick.C

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/**
 ** 文件名称:Delay_SysTick.C
 ** 功能描述:系统滴答及其延时的使用
 ** 硬件平台:STM32F10x
 ** 编译环境:Keil uversion4 IDE
 ** 库版本  :v3.5.0
 ** 版本信息:v0.0
 ** 编写作者:
 ** 编写时间:2011-11-26
 ** 附加说明:无
 ** 修改记录:2011-11-26 将TimingDelay数据类型改为volatile
 **/
 /* Includes ------------------------------------------------------------------*/
//#include "main.h"
#include "delay_systick.h"
#include "stm32f10x.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
volatile uint32_t TimingDelay;
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/* Setup SysTick Timer for 1 msec interrupts.
 ------------------------------------------
1. The SysTick_Config() function is a CMSIS function which configure:
   - The SysTick Reload register with value passed as function parameter.
   - Configure the SysTick IRQ priority to the lowest value (0x0F).
   - Reset the SysTick Counter register.
   - Configure the SysTick Counter clock source to be Core Clock Source (HCLK).
   - Enable the SysTick Interrupt.
   - Start the SysTick Counter.

2. You can change the SysTick Clock source to be HCLK_Div8 by calling the
   SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8) just after the
   SysTick_Config() function call. The SysTick_CLKSourceConfig() is defined
   inside the misc.c file.

3. You can change the SysTick IRQ priority by calling the
   NVIC_SetPriority(SysTick_IRQn,...) just after the SysTick_Config() function 
   call. The NVIC_SetPriority() is defined inside the core_cm3.h file.

4. To adjust the SysTick time base, use the following formula:
                        
     Reload Value = SysTick Counter Clock (Hz) x  Desired Time base (s)

   - Reload Value is the parameter to be passed for SysTick_Config() function
   - Reload Value should not exceed 0xFFFFFF
*/

/**              
  * @brief  Configure the SysTick clock.
  * @param  None
  * @retval None
  */
void SysTick_Configuration(void)
{
 /*SysTick clock source select*/
 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
 /*Initialize and start systick clock and its interrupt*/
 if (SysTick_Config(SystemCoreClock / 1000))
   { 
     /* Capture error */ 
     while (1);
   }
}


/**              
  * @brief  Inserts a delay time.
  * @param  nTime: specifies the delay time length, in milliseconds.
  * @retval None
  */
void SysTickDelay(__IO uint32_t nTime)

   TimingDelay = nTime;

   while(TimingDelay != 0);
}

/**
  * @brief  Decrements the TimingDelay variable.
  * @param  None
  * @retval None
  */
void TimingDelay_Decrement(void)
{
   if (TimingDelay != 0x00)
   { 
     TimingDelay--;
   }
}

/**
  * @brief  This function handles SysTick Handler.
  * @param  None
  * @retval None
  */
void SysTick_Handler(void)
{
   TimingDelay_Decrement();
}

说明:本次没有直接对寄存器操作,因为是入门,所以没那么深入,先让板子跑起来再说吧,下面给出的参考资料中有对寄存器的讲解,很有价值,希望能帮上大家。

关键字:STM32  Systick 引用地址:STM32初学笔记2之Systick

上一篇:STM32初学笔记3之外部中断
下一篇:STM32初学笔记1之RCC(下)

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

STM32高级开发(16)-CMSIS DAP调试工程
最近公司的项目在等供应商的设备有点空闲的时间了,就折腾了下ARM官方开源的CMSIS DAP调试器的方案,用的是X893大神的方案,下面附上他的个人主页和在GitHub上的项目链接(我是用的是其中stlinkv2.1的软硬件方案): (http://akb77.com/g/stm32/cmsis-dap-adapter/) (https://github.com/x893/CMSIS-DAP) 这个调试器方案可以说极具性价比,SWD接口速度可以达到10M的全速,还附带一个最高支持到115200bps的串口,而且连接一根线就可以识别为两个设备,既可以单独的作为一个调试器使用,也可以集成到其他项目的PCB板上作为板载调试器和
[单片机]
<font color='red'>STM32</font>高级开发(16)-CMSIS DAP调试工程
STM32基础实验3(串口通信)
一、实验原理 简单串口通信实例 1、串口设置的一般步骤可以总结为如下几个步骤: 1) 串口时钟使能,GPIO时钟使能 2) 串口复位 3) GPIO端口模式设置 4) 串口参数初始化 5) 开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤) 6) 使能串口 7) 编写中断处理函数 2、具体函数实现 1)串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd(); //①串口时钟使能,GPIO时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIOA时钟使能 RCC_APB2PeriphC
[单片机]
<font color='red'>STM32</font>基础实验3(串口通信)
STM32--HAL库IIC
hal库已封装函数 输入输出函数: 阻塞模式: HAL_I2C_Master_Transmit(); HAL_I2C_Master_Receive(); HAL_I2C_Slave_Transmit(); HAL_I2C_Slave_Receive() HAL_I2C_Mem_Write(); HAL_I2C_Mem_Read(); HAL_I2C_IsDeviceReady() 带中断非阻塞模式: HAL_I2C_Master_Transmit_IT(); HAL_I2C_Master_Receive_IT(); HAL_I2C_Slave_Transmit_IT() HAL_I2C_Sl
[单片机]
经典STM32 ADC多通道转换
STM32 ADC多通道转换 描述:用ADC连续采集11路模拟信号,并由DMA传输到内存。ADC配置为扫描并且连续转换模式,ADC的时钟配置为12MHZ。在每次转换结束后,由DMA循环将转换的数据传输到内存中。ADC可以连续采集N次求平均值。最后通过串口传输出最后转换的结果。 程序如下: #i nclude stm32f10x.h //这个头文件包括STM32F10x所有外围寄存器、位、内存映射的定义 #i nclude eval.h //头文件(包括串口、按键、LED的函数声明) #i nclude SysTickDelay.h #i nclude UART_INTERFACE.h #i ncl
[单片机]
STM32_IAP详解
  Iap,全名为in applacation programming,即在应用编程,与之相对应的叫做isp,in system programming,在系统编程,两者的不同是isp需要依靠烧写器在单片机复位离线的情况下编程,需要人工的干预,而iap则是用户自己的程序在运行过程中对User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。在工程应用中经常会出现我们的产品被安装在某个特定的机械结构中,更新程序的时候拆机很不方便,使用iap技术能很好地降低工作量.   实现iap有两个很重要的前提,首先,单片机程序能对自身的内部flash进行擦写,第二,单片机要有能够和
[单片机]
STM32_IAP详解
stm32 .icf文件.map文件,汇编文件对照
(1) 从汇编语句中可以看出中断向量表的位置处于0x08004000。对应.ICF文件中的 define symbol __ICFEDIT_intvec_start__ = 0x08004000; 补充一点:中断向量表就是2条语句做为一个单元,里面存储的就是中断函数的入口地址。我们平时写的中断函数,就可以在某个中断的入口地址下面看到。 (2) define symbol __ICFEDIT_SYS_FUNC_start__ = 0x08004200; //functab 此部分是在0x08004200后插入一段代码,从矢量表中我们可以看出矢量表的最后的地址是0x0800412e。所以从0x08004200开始插入一
[单片机]
<font color='red'>stm32</font> .icf文件.map文件,汇编文件对照
STM32 Cubemax(三)——时序读写完成称重传感器+HX711的使用
前言 因为在一个项目中使用到了称重传感器,在此记录一下其使用方法还有一些需要注意的地方。 首先介绍一下使用的传感器 HX711——一款专用于电子秤的A/D转换芯片 称重传感器(使用的这一款量程200KG) 一、接线 买到传感器后,可以看到后面尾巴引出了5条线 **其中黄线在单片机处理里面是不需要的,不需要接。 ** 如果大家买的是我上图的那一款HX711,那么可以直接按照上面的英文指示接线。 照着颜色接就完事了,RED接红线,BLK接黑线。 但还有几款HX711上面没有这个颜色提示,那也没有关系。 一般如下 接完了HX711和称重传感器,下一步就是接HX711和单片机 这里 DAT和CLK为自己
[单片机]
<font color='red'>STM32</font> Cubemax(三)——时序读写完成称重传感器+HX711的使用
STM32复位来源 以及系统和内核复位区别
1STM32的复位和时钟控制 RCC:Reset and Clock Control 每一块STM32中都有这么一个RCC复位和时钟控制模块。 STM32的复位为三类:系统复位、电源复位和后备域复位。 系统复位: 1. NRST引脚上的低电平(外部复位) 2. 窗口看门狗计数终止(WWDG复位) 3. 独立看门狗计数终止(IWDG复位) 4. 软件复位(SW复位) 5. 低功耗管理复位 电源复位: 1. 上电/掉电复位(POR/PDR复位) 2. 从待机模式中返回 备份区域复位: 1. 软件复位,备份区域复位可由设置备份域控制寄存器(RCC_BDCR)中的BDRST位产生。 2. 在VDD和VBAT两者掉电的前提下, VDD或VB
[单片机]
<font color='red'>STM32</font>复位来源 以及系统和内核复位区别
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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