STM32学习007_Systick使用(二)

发布者:真诚的友谊最新更新时间:2017-10-26 来源: eefocus关键字:STM32  SysTick 手机看文章 扫描二维码
随时随地手机看文章

在"嵌入式学习006_Systick使用(一)"中,详细介绍了Systick中寄存器的使用方法,用到了很多函数,实际上到了3.5版本的标准固件库中,移除了相关驱动函数,用户必须调用CMSIS.h中定义的函数,其中CMSIS只提供了一个Systick设置的函数,替代了STM32原来有的所有的驱动函数,这样做的目的,可能是简化Systick 的设置,可是降低了用户对SysTick的可控性。

在CMSIS中提供的函数是  SysTick_Config(uint32_t ticks); 该函数设置了自动重载入计数器(LOAD)的值,SysTick IRQ的优先级,复位了计数器(VAL)的值,开始计数并打开SysTick IRQ中断。SysTick时钟默认使用系统时钟。

其中这个函数定义在Core_cm3.h中 ,源代码如下所示:

   static __INLINE uint32_t SysTick_Config(uint32_t ticks)

  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);                                                                                               
  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;              
  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);        
  SysTick->VAL   = 0;                                                                                        
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | 
                   SysTick_CTRL_TICKINT_Msk   | 
                   SysTick_CTRL_ENABLE_Msk;                                                
  return (0);                                                }

从上面的函数中可以看出,这个函数把Systick的初值,中断优先级,使能中断,开启定时器都完成了。大大简化了程序。

其中ticks 代表的是初值。例如系统时钟是72Mhz 那么要产生1ms的时基,那么我们可以这样去写。

SysTick_Config(SystemCoreClock/1000);  当然也可以写成:SysTick_Config(72000);

了解了这些,我们可以用它来做一个简单的延时函数delay_ms(u16 time);

        代码如下:

            void delay_ms(u16 time)

             {

                             nTime=time ;                      /nTime 是个全局变量 可设 extern u16 nTime;/

                          while(nTime);

             }

       在中断函数中直接  加入nTime--;

      在主函数 初始化过程中 加入  SysTick_Config(72000);


关键字:STM32  SysTick 引用地址:STM32学习007_Systick使用(二)

上一篇:STM32学习006_Systick使用(一)
下一篇:STM32学习008_ARM产品浅析

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

STM32里的基础配置(寄存器,库函数)
前言 所有IO口配置,芯片:STM32F103R8T6 一、配置LED /**************************** 函数名称:LED_Config 函数作用:LED初始化 管脚: LED1 PB0 LED2 PB1 ****************************/ LED.c 寄存器: #include led.h void LED_Config(void) { RCC- APB2ENR |= (1 3);//GPIOB GPIOB- CRL &= ~(0XF 0);//清零操作 GPIOB- CRL |= (0X3 0); GPIOB- CRL &=
[单片机]
<font color='red'>STM32</font>里的基础配置(寄存器,库函数)
stm32编程配置一个I/O为EXTI中断的步骤
配置一个I/O为EXTI中断的步骤: GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; //1.使能EXTIx线的时钟和第二功能AFIO时钟 RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA,ENABLE); // NVIC_CONFIG(); //2.配置EXTIx线的中断优先级 NVIC_Priority
[单片机]
stm32中关于读取状态标志位函数的自我理解
为了让程序能够读取多个状态标志位的状态。固件设计了一个通用的函数RCC_GetStatus(),来读取各标志位的状态。 下面是RCC的所有标志位: * - RCC_FLAG_HSIRDY: HSI oscillator clock ready * - RCC_FLAG_HSERDY: HSE oscillator clock ready * - RCC_FLAG_PLLRDY: PLL clock ready * - RCC_FLAG_LSERDY: LSE oscillator clock ready *
[单片机]
STM32 关于GPIO的问题集锦
1、关于GPIO 问:STM32的IO口初始化为输入浮空,那管脚是高电平还是低电平呢? 答:既不是高电平也不是低电平,悬空的意思是没有使用的状态。 2、有关stm32f103端口复用的问题? 问:在学习GPIO时,遇到到端口复用问题一直不能明白,我举个例子: PB6PB7默认情况下是做普通IO使用的,当我想用I2C1是,我开启RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); 当我要使用I2C1的重定义时,我要打开, RCC_APB1PeriphClockCm
[单片机]
STM32之内部FLASH原理
不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了 1024K 字节。市面上 STM32F1 开发板使用的芯片是 STM32F103系列,其 FLASH 容量一般为 512K 字节,属于大容量芯片。大容量产品的 Flash 模块组织结构如图 40.1.1 所示: STM32F1 的闪存(Flash)模块由:主存储器、信息块和闪存存储器接口寄存器等 3 部分组成。下面我们就来介绍下这些组成部分: ①主存储器。该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。从
[单片机]
<font color='red'>STM32</font>之内部FLASH原理
单片机STM32时钟详解
众所周知STM32有5个时钟源HSI、HSE、LSI、LSE、PLL,其实他只有四个,因为从上图中可以看到PLL都是由HSI或HSE提供的。 其中,高速时钟(HSE和HSI)提供给芯片主体的主时钟.低速时钟(LSE和LSI)只是提供给芯片中的RTC(实时时钟)及独立看门狗使用,图中可以看出高速时钟也可以提供给RTC。内部时钟是在芯片内部RC振荡器产生的,起振较快,所以时钟在芯片刚上电的时候,默认使用内部高速时钟。而外部时钟信号是由外部的晶振输入的,在精度和稳定性上都有很大优势,所以上电之后我们再通过软件配置,转而采用外部时钟信号. 高速外部时钟(HSE):以外部晶振作时钟源,晶振频率可取范围为4~16MHz,我们一般采用
[单片机]
单片机<font color='red'>STM32</font>时钟详解
ARM开发(10)基于STM32的通用定时器中断控制蜂鸣器响
一 通用定时器原理: 1.1 本实验实现通用定时器中断控制蜂鸣器1s鸣叫一次。 1.2 实验思路:理解中断控制寄存器,DMA/中断使能寄存器,预分频寄存器,初始化定时器参数,中断优先级设置,编写中断服务函数,中断服务函数里面我们实现蜂鸣器1s鸣叫一次 1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真 二 实验步骤: 2.1 timer.h代码: #ifndef __TIMER_H #define __TIMER_H #include sys.h void TIM3_Int_Init(u16 arr,u16 psc); #endif 1 2 3 4 5 2.2 timer.c代码(通用定时器参
[单片机]
认识STM32的复位与电源管理
复位功能是一个非常重要的功能,大到PC,小到单片机,每一台计算机系统都有。在我小时候,去网吧的时候,但凡是电脑出现任何一点小问题,网管的第一回答一定是重启。重启和复位就是同一个意思。 发展到现在PC已经很稳定了,复位按钮慢慢的淡出我们的视野,但是在主板上我们依然可以找到复位电路的存在。单片机上的复位功能也有着类似的变化,在我们学单片机那个年代,需要在单片机的外部一个复位电路,从专用引脚上接一个电阻和电容组成的复位电路。如果没有这个电路,单片机就没法工作。现在的新款单片机都把复位功能内置到单片机中。如果是开发项目要手动复位,我们可以在复位引脚上接一个按键用来手动复位。 复位 复位功能的作用是让RAM 中的数据清空,让所有连接
[单片机]
认识<font color='red'>STM32</font>的复位与电源管理
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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