STM32F10XXXX---SysTick滴答定时器
来源:互联网 发布:mac口红玫红色 编辑:程序博客网 时间:2024/04/27 20:21
关于SysTick滴答定时器详细说明《STM32F10xxx的Cortex-M3编程手册英文文档》:如下图
网上流传的汉化寄存器说明如下:
参考:http://blog.sina.com.cn/s/blog_4f09c0b501015fq8.html
基础应用实例:
/** ****************************************************************************** * @file SysTick/main.c * @author guo * @version V3.5.0 * @date 03-February-2015 * @brief GPIO_Pin_10 引脚输出周期2s的方波 ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/#include "stm32f10x.h"/** @addtogroup STM32F10x_StdPeriph_Examples * @{ *//** @addtogroup SysTick_TimeBase * @{ */ /* Private typedef -----------------------------------------------------------*//* Private define ------------------------------------------------------------*//* Private macro -------------------------------------------------------------*//* Private variables ---------------------------------------------------------*///static u8 us_value=0;//us延时倍乘数static u16 ms_value=0;//ms延时倍乘数/* Private function prototypes -----------------------------------------------*/void Delay_ms(uint32_t nms);void RCC_Configuration(void);void GPIO_Configuration(void);void SysTick_init(void);/* Private functions ---------------------------------------------------------*//** * @brief Main program. * @param None * @retval None */int main(void){/* Initialize Leds mounted on STM3210X-EVAL board */RCC_Configuration(); //LED 输出配置GPIO_Configuration(); //使用的资源时钟配置 SysTick_init(); //初始配置while (1) { /* 引脚置低 */GPIO_ResetBits(GPIOC, GPIO_Pin_10); /* Insert 1000 ms delay */Delay_ms(1000); /* 引脚置高*/GPIO_SetBits(GPIOC, GPIO_Pin_10); /* Insert 100 ms delay */Delay_ms(100);}}void RCC_Configuration(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);}void GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOC,&GPIO_InitStructure);}void SysTick_init(void) { SysTick->CTRL = 0x01; //选择外部时钟9MHz(HCLK/8),并使能定时器ms_value = 9000; //数据手册:系统嘀嗒校准值固定为9000,当系统嘀嗒时钟设定为9MHz(HCLK/8的最大值),产生1ms时间基准。} void Delay_ms(uint32_t nms) { uint32_t temp; SysTick->LOAD = (uint32_t)nms*ms_value - 1; //时间加载(SysTick->LOAD为32 bit) SysTick->VAL = 0x00; //清空计数器 do { temp = SysTick->CTRL; } while(temp&0x01&&!(temp&(1<<16))); //等待时间到达,COUNTFLAG 标志位会置位--> 读值清零} /*******************END OF FILE *******************************************/
中断实例:
文件:main.c
/** ****************************************************************************** * @file SysTick\SysTick_IT\main.c * @author guo * @version V3.5.0 * @date 04-February-2015 * @brief GPIO_Pin_10 引脚输出周期2s的方波 ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/#include "stm32f10x.h"/** @addtogroup STM32F10x_StdPeriph_Examples * @{ *//** @addtogroup SysTick_TimeBase * @{ */ /* Private typedef -----------------------------------------------------------*//* Private define ------------------------------------------------------------*//* Private macro -------------------------------------------------------------*//* Private variables ---------------------------------------------------------*//* Private function prototypes -----------------------------------------------*/void Delay_ms(uint32_t nms);void RCC_Configuration(void);void GPIO_Configuration(void);void SysTick_init(void);/* Private functions ---------------------------------------------------------*//** * @brief Main program. * @param None * @retval None */int main(void){/* Initialize Leds mounted on STM3210X-EVAL board */RCC_Configuration(); //LED 输出配置GPIO_Configuration(); //使用的资源时钟配置 SysTick_init(); //初始配置while(1) {}}void RCC_Configuration(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);}void GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOC,&GPIO_InitStructure);}void SysTick_init(void) { SysTick->CTRL = 0x00; //失能SysTick->LOAD = (uint32_t)(9000000-1); //数据手册:系统嘀嗒校准值固定为9000,当系统嘀嗒时钟设定为9MHz(HCLK/8的最大值),产生1ms时间基准。SysTick->VAL =0x00; //清空计数器SysTick->CTRL = 0x03; //选择外部时钟9MHz(HCLK/8),并使能定时器+中断} /*******************END OF FILE *******************************************/
................extern void GPIO_Configuration(void);................/** * @brief This function handles SysTick Handler. * @param None * @retval None */void SysTick_Handler(void){static char flag = 0;//uint32_t temp;//SysTick->VAL = 0x00; //清空计数器//temp = SysTick->CTRL; //清除标志位if(flag == 0){GPIO_ResetBits(GPIOC, GPIO_Pin_10);flag = 1;}else{GPIO_SetBits(GPIOC, GPIO_Pin_10);flag = 0;}}
注.....:
1、如何设置它的优先级?-----默认最低优先级------ http://blog.csdn.net/sunjiajiang/article/details/7741715
2、systick的中断服务函数里,是否需要清除中断标志位?
《STM32F10xxx的Cortex-M3编程手册英文文档》 寄存器STK_VAL中提到“A write of any value clears the field to 0, and also clears the COUNTFLAG bit in the STK_CTRL register to 0.”,
实际上不写SysTick->VAL貌似也没什么问题 (//SysTick->VAL = 0x00;),目测工作正常。
Cortex-M3中断机制及SysTick 简介:http://blog.sina.com.cn/s/blog_6ebd49350100q85c.html
0 0
- STM32F10XXXX---SysTick滴答定时器
- Cortex-M4 Systick滴答定时器
- Systick滴答定时器-延时函数
- stm32 系统滴答定时器Systick
- 系统滴答定时器——SysTick
- 系统滴答定时器(systick)的应用
- stm32笔记:Systick系统滴答定时器
- STM32---系统滴答定时器(systick)应用
- STM32-------系统滴答定时器(systick)应用
- 系统滴答定时器(systick)应用
- STM32---系统滴答定时器(systick)应用
- 系统滴答定时器(systick)应用
- STM32之SysTick(系统滴答定时器)
- stm32笔记:Systick系统滴答定时器
- stm32的systick(系统滴答定时器)
- STM32的系统滴答定时器(Systick)
- STM32 SysTick 滴答定时器原理及应用
- STM32菜鸟成长记录---系统滴答定时器(systick)应用
- 集合框架的认识
- linux虚拟文件系统VFS 的相关数据结构
- 本机不安装Oracle客户端就可使用PL/SQL Developer连接远程数据库
- 斯巴达Python搜索爬虫抓取的学习笔记
- Java的clone()用法实例解析
- STM32F10XXXX---SysTick滴答定时器
- 在文件指定位置读取和写入内容RandomAccessFile
- cocos2dx之抽奖界面与获奖概率的设计(一)
- Bluetooth 蓝牙知识点
- jquery实现页面离开时检测当前页面是否被修改,修改则提示
- java 泛型详解
- 双链表操作
- Java4Android学习二 - Java变量类型及命名
- UIWebview中 js 的执行结果返回给OC ,js 回传OC