stc32G库函数(二)——定时器
首先,我们要先向工程文件Driver中添加STC32G_Timer.c,STC32G_Timer_Isr.c和STC32G_NVIC.c这三个文件,其中STC32G_Timer.c中定义了定时器初始化函数Timer_Inilize();STC32G_NVIC.c文件中定义了定时器中断初始化的相关函数NVIC_Timer0_Init();STC32G_Timer_Isr.c文件中定义了各种的中断函数,我们主要将想要实现的操作写进它给的对应的函数中就行。
初始化定时器0(其他的定时器初始化操作也已经写出,删掉注释就可使用),EA=1是开总开关操作,可添加到主函数中:
//========================================================================
// 定时器配置
//========================================================================
void Timer_config(void)
{TIM_InitTypeDef TIM_InitStructure; //结构定义TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //指定工作模式, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMaskTIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_ExtTIM_InitStructure.TIM_ClkOut = DISABLE; //是否输出高速脉冲, ENABLE或DISABLETIM_InitStructure.TIM_Value = (u16)(65536UL - (MAIN_Fosc / 1000UL)); //中断频率, 1000次/秒TIM_InitStructure.TIM_Run = ENABLE; //是否初始化后启动定时器, ENABLE或DISABLETimer_Inilize(Timer0,&TIM_InitStructure); //初始化Timer0 Timer0,Timer1,Timer2,Timer3,Timer4NVIC_Timer0_Init(ENABLE,Priority_0); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3EA = 1;// //定时器1做16位自动重装, 中断频率为20000HZ,中断函数从P6.6取反输出10KHZ方波信号.
// TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //指定工作模式, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
// TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
// TIM_InitStructure.TIM_ClkOut = DISABLE; //是否输出高速脉冲, ENABLE或DISABLE
// TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 20000); //中断频率, 20000次/秒
// TIM_InitStructure.TIM_Run = ENABLE; //是否初始化后启动定时器, ENABLE或DISABLE
// Timer_Inilize(Timer1,&TIM_InitStructure); //初始化Timer1 Timer0,Timer1,Timer2,Timer3,Timer4
// NVIC_Timer1_Init(ENABLE,Priority_0); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3// //定时器2做16位自动重装, 中断频率为10000HZ,中断函数从P6.5取反输出5KHZ方波信号.
// TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
// TIM_InitStructure.TIM_ClkOut = DISABLE; //是否输出高速脉冲, ENABLE或DISABLE
// TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 10000); //初值
// TIM_InitStructure.TIM_Run = ENABLE; //是否初始化后启动定时器, ENABLE或DISABLE
// Timer_Inilize(Timer2,&TIM_InitStructure); //初始化Timer2 Timer0,Timer1,Timer2,Timer3,Timer4
// NVIC_Timer2_Init(ENABLE,NULL); //中断使能, ENABLE/DISABLE; 无优先级// //定时器3做16位自动重装, 中断频率为100HZ,中断函数从P6.4取反输出50HZ方波信号.
// TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
// TIM_InitStructure.TIM_ClkOut = ENABLE; //是否输出高速脉冲, ENABLE或DISABLE
// TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / (100*12)); //初值
// TIM_InitStructure.TIM_Run = ENABLE; //是否初始化后启动定时器, ENABLE或DISABLE
// Timer_Inilize(Timer3,&TIM_InitStructure); //初始化Timer3 Timer0,Timer1,Timer2,Timer3,Timer4
// NVIC_Timer3_Init(ENABLE,NULL); //中断使能, ENABLE/DISABLE; 无优先级// //定时器4做16位自动重装, 中断频率为50HZ,中断函数从P6.3取反输出25HZ方波信号.
// TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
// TIM_InitStructure.TIM_ClkOut = ENABLE; //是否输出高速脉冲, ENABLE或DISABLE
// TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / (50*12)); //初值
// TIM_InitStructure.TIM_Run = ENABLE; //是否初始化后启动定时器, ENABLE或DISABLE
// Timer_Inilize(Timer4,&TIM_InitStructure); //初始化Timer4 Timer0,Timer1,Timer2,Timer3,Timer4
// NVIC_Timer4_Init(ENABLE,NULL); //中断使能, ENABLE/DISABLE; 无优先级
}
以下是STC32G_Timer_Isr.c文件定时器0的中断调用函数,我的操作是实现led灯的亮灭,led灯接在P10上。
//========================================================================
// 函数: Timer0_ISR_Handler
// 描述: Timer0中断函数.
// 参数: none.
// 返回: none.
// 版本: V1.0, 2020-09-23
//========================================================================
void Timer0_ISR_Handler (void) interrupt TMR0_VECTOR //进中断时已经清除标志
{tt++;if(tt>=1000){P10=~P10;tt=0;}
}
除此之外,我们在开发过程中有时也会需要停止定时器,库函数也为我们提供了相应的宏定义可以直接调用:
//========================================================================
// 定时器0设置
//========================================================================/* 0,1: 定时器0用做定时器, 12T/1T; 2: 定时器0用做计数器 */
#define Timer0_CLK_Select(n) do{if(n == 0) T0x12 = 0, T0_CT = 0; \if(n == 1) T0x12 = 1, T0_CT = 0; \if(n == 2) T0_CT = 1; \}while(0)#define Timer0_CLK_Output(n) T0CLKO = n /* T0 溢出脉冲在T0脚输出使能 */
#define Timer0_Run(n) (n==0?(TR0 = 0):(TR0 = 1)) /* 定时器0计数使能 */
#define Timer0_Stop() TR0 = 0 /* 禁止定时器0计数 */
#define T0_Load(n) TH0 = (n) / 256, TL0 = (n) % 256//========================================================================
// 定时器1设置
//========================================================================/* 0,1: 定时器1用做定时器, 12T/1T; 2: 定时器1用做计数器 */
#define Timer1_CLK_Select(n) do{if(n == 0) T1x12 = 0, T1_CT = 0; \if(n == 1) T1x12 = 1, T1_CT = 0; \if(n == 2) T1_CT = 1; \}while(0)#define Timer1_CLK_Output(n) T1CLKO = n /* T1 溢出脉冲在T1脚输出使能 */
#define Timer1_Run(n) (n==0?(TR1 = 0):(TR1 = 1)) /* 定时器1计数使能 */
#define Timer1_Stop() TR1 = 0 /* 禁止定时器1计数 */
#define T1_Load(n) TH1 = (n) / 256, TL1 = (n) % 256//========================================================================
// 定时器2设置
//========================================================================/* 0,1: 定时器2用做定时器, 12T/1T; 2: 定时器2用做计数器 */
#define Timer2_CLK_Select(n) do{if(n == 0) T2x12 = 0, T2_CT = 0; \if(n == 1) T2x12 = 1, T2_CT = 0; \if(n == 2) T2_CT = 1; \}while(0)#define Timer2_CLK_Output(n) T2CLKO = n /* T2 溢出脉冲在T2脚输出使能 */
#define Timer2_Run(n) (n==0?(T2R = 0):(T2R = 1)) /* 定时器2计数使能 */
#define Timer2_Stop() T2R = 0 /* 禁止定时器2计数 */
#define T2_Load(n) T2H = (n) / 256, T2L = (n) % 256//========================================================================
// 定时器3设置
//========================================================================/* 0,1: 定时器3用做定时器, 12T/1T; 2: 定时器3用做计数器 */
#define Timer3_CLK_Select(n) do{if(n == 0) T3x12 = 0, T3_CT = 0; \if(n == 1) T3x12 = 1, T3_CT = 0; \if(n == 2) T3_CT = 1; \}while(0)#define Timer3_CLK_Output(n) T3CLKO = n /* T3 溢出脉冲在T3脚输出使能 */
#define Timer3_Run(n) (n==0?(T3R = 0):(T3R = 1)) /* 定时器3计数使能 */
#define Timer3_Stop() T3R = 0 /* 禁止定时器3计数 */
#define T3_Load(n) T3H = (n) / 256, T3L = (n) % 256//========================================================================
// 定时器4设置
//========================================================================/* 0,1: 定时器4用做定时器, 12T/1T; 2: 定时器4用做计数器 */
#define Timer4_CLK_Select(n) do{if(n == 0) T4x12 = 0, T4_CT = 0; \if(n == 1) T4x12 = 1, T4_CT = 0; \if(n == 2) T4_CT = 1; \}while(0)#define Timer4_CLK_Output(n) T4CLKO = n /* T4 溢出脉冲在T4脚输出使能 */
#define Timer4_Run(n) (n==0?(T4R = 0):(T4R = 1)) /* 定时器4计数使能 */
#define Timer4_Stop() T4R = 0 /* 禁止定时器4计数 */
#define T4_Load(n) T4H = (n) / 256, T4L = (n) % 256
以定时器0为例子,我们可以用Timer0_Run(0)或者Timer0_Stop()让定时器0停止计数,调用Timer0_Run(1)重新开始计数。相同的,关闭和开启中断也是一样的:
//========================================================================
// 定时器中断设置
//========================================================================#define Timer0_Interrupt(n) (n==0?(ET0 = 0):(ET0 = 1)) /* Timer0中断使能 */
#define Timer1_Interrupt(n) (n==0?(ET1 = 0):(ET1 = 1)) /* Timer1中断使能 */
#define Timer2_Interrupt(n) (n==0?(ET2 = 0):(ET2 = 1)) /* Timer2中断使能 */
#define Timer3_Interrupt(n) (n==0?(ET3 = 0):(ET3 = 1)) /* Timer3中断使能 */
#define Timer4_Interrupt(n) (n==0?(ET4 = 0):(ET4 = 1)) /* Timer4中断使能 */
因为这次的程序比较简单,例程就不放在资源了
stc32G库函数(二)——定时器相关推荐
- 【SDL】SDL学习笔记二 定时器
定时器相关API(SDL_timer.h): 1. Uint32 SDL_GetTicks(): 获取从SDL库初始化(定时器模块初始化)开始到当前的运行时间(ms); 2. Uint64 S ...
- STM32通用定时器(原理、结构体、库函数、定时器中断每秒闪烁一次灯) —— 时钟源、分频值、重装载值
参考:stm32定时器与定时器中断 作者:打酱油的 发布时间: 2021-04-11 01:04:09 网址:https://blog.csdn.net/weixin_46098612/article ...
- STC32G库函数(五)——ADC检测反推电源电压
首先先看一下STC32G系列单片机内部的ADC功能 STC32G系列的单片机有15条ADC测量通道,同时ADC_VRef+为外部电压参考电源,所以利用ADC测量电源电压有两种方案.第一是先利用稳压电源 ...
- stm8s 定时器1 延时_STM8S_库函数_定时器自动装载TIM1
大家好,我是单片机爱好者-MCU起航.这里说下使用库函数方式控制STM8S103F3P6片上的定时器1,也就是TIM1,这是个高级定时器. 首先,咱们看一下STM8S103F3P6上有几个定时器,打开 ...
- php常用库函数(二)
http://www.cnblogs.com/dreamhome/archive/2011/05/04/2037011.html <?php //======================== ...
- STM32 CubeMx(二)定时器中断和PWM呼吸灯
STM32 CubeMx(一)时钟树配置与GPIO输入输出 文章目录 1.定时器 1.1 定时器概念 1.2 定时器分类 1.3 定时器功能 1.4 配置过程和编写代码 1.5 代码分享 2.PWM产 ...
- 定时器计数器实验C语言程序,实验二 单片机定时器和计数器编程
仲恺农业工程学院实验报告纸 信息学院 (院.系)专业班组单片机原理及接口技术课实验二单片机定时器/计数器编程 一.实验目的 1.掌握单片机定时器/计数器的工作方式: 2.掌握单片机定时器/计数器的编程 ...
- STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)
目录 定时器 8个定时器 定时器功能 定时器中断 常用通用定时器的寄存器 定时器中断实验目的: 定时器库函数及步骤 实验程序讲解 PWM 简介 STM32 PWM工作过程 PWM模式1 与 PWM模式 ...
- STM32F103mini教程通用定时器
一.通用定时器的基本原理 1.三种STM32定时器区别 2.通用定时器功能特点描述 (1)STM32 的通用 TIMx (TIM2.TIM3.TIM4 和 TIM5)定时器功能特点包括: ①位于低速的 ...
最新文章
- springAOP的设计和实现(一)
- linux安装部署apache+subversion+jsvnadmin
- 币氪共识指数排行榜0910
- flume流程之http-memory-hdfs
- 常见RFID卡片介绍、破解思路 及 Proxmark3简介
- 西门子STEP7、博图里的数据块(DB)编址规则
- libiconv android编译,NDK编译经常使用开源库-libiconv
- 技术分析:细说3D投影机技术原理
- iView admin网站后台管理系统模板v2.5.0
- 华为m2青春版android7,7吋巨屏跨界之作 华为揽阅M2青春版评测
- 大数据技术技能分析大赛——第一章 python数据分析概述
- 嵌入式Linux热点分享网络(四)
- 国际多币种移动平台:换汇+支付(Wise/Revolut)
- 中国传媒大学计算机与网络安全,黄玮 - 中国传媒大学 - 计算机与网络空间安全学院...
- word破解文档保护
- 树莓派之DHT11传感器
- JAVA基础6.51——多态的概述(1)
- java中... 用法
- 网站多次切换服务器ip,站群多ip服务器怎么切换ip?
- AI聊天机器人接口制作php,使用图灵api创建微信聊天机器人_php技巧
热门文章
- 完全背包问题(师从yxc,闫氏Dp)
- python Exception happened during processing of request from( 127.0.0.1 xxx) error [10053]
- html轮播鼠标悬停效果,jQuery图片轮播加悬停效果
- 打卡赠书 | 养成一个思考习惯
- 一顿操作猛如虎,细说MySQL索引的区别
- iic的SDA引脚偶尔有毛刺(尖峰)是怎么回事。
- BUUCTF web(三)
- 批量识别PDF/OFD/PNG/JPG电子发票到EXCEL
- 有效学习的6个方法学习方法
- GSM Channel Mode Modify和Channel Mode Modify Acknowledge信令