实验2通用Timer
通用定时器秒表实验报告三

33
一、实验目的
学会编写中断程序 学会应用LM3S9b92的通用定时器 比较通用定时器和systick的特性
二、实验设备
计算机、LM3S9B92开发板、USB A型公II转Mini B型5Pin数据线1条
三、实验原理
在Stellaris系列ARM内部通常集成有4个通用定时器模块(General-Purpose Timer Module, GPTM),分别称为TimerO.Timerl. Timer2和Timer3°它们的用法是相同的:每 个Timer模块都可以配置为一个32位定时器或一个32位RTC定时器;也可以拆分为两个16位的定时/计数器TimerA和TimerB,它们可以被配置为独立运行的定时器、事件计数器 或PWM等。
}
}
int main(void)
{
//jtagWait));//防止JTAG失效,重要!
clocklnit();〃时钟初始化:晶振,6MHz
SysCtlPeriEnable(LED_PERIPH);//使能LED所在的GPIO端I I GPIOPinTypeOut(LED_PORT LED_PIN);//设置LED所在的管脚为输出SysCtlPeriEnable(KEY_PERIPH); //使能KEY所在的GPIO端I I GPIOPinTypeln(KEY_POR7;KEY_PIN);〃设置KEY所在管脚为输入
lntMasterEnable();//使能处理器中断Βιβλιοθήκη for(;;){}
}
11SysTick计数器的中断服务函数
void TimerOAJSR(void)
{
unsigned long ulStatus;
两位数定时器实训报告

一、实训目的本次实训旨在通过实际操作,掌握两位数定时器的原理、电路组成和调试方法,提高学生对电子技术实践操作的能力,培养学生的动手能力和创新意识。
二、实训内容1. 定时器原理及电路分析定时器是一种能够实现时间控制的电子元件,根据其工作原理可分为机械式和电子式两种。
本次实训主要研究电子式定时器。
电子式定时器主要由以下几个部分组成:(1)定时元件:如电阻、电容等,用于产生时间延迟。
(2)比较器:将定时元件的输出信号与设定的时间进行比较,当达到设定时间时,输出控制信号。
(3)触发电路:根据比较器的输出信号,产生相应的触发信号,控制后续电路的动作。
(4)执行电路:根据触发电路的输出信号,执行相应的动作,如控制继电器、开关等。
2. 定时器电路设计本次实训要求设计一个能够实现1-99秒定时功能的两位数定时器电路。
电路设计如下:(1)定时元件:选用电阻和电容串联电路,通过改变电阻和电容的值,实现不同时间的延迟。
(2)比较器:选用LM393比较器,将定时元件的输出信号与设定的时间进行比较。
(3)触发电路:当比较器输出高电平时,触发电路输出高电平,控制后续电路的动作。
(4)执行电路:选用继电器,当触发电路输出高电平时,继电器吸合,实现控制功能。
3. 定时器电路调试(1)搭建电路:按照电路设计,连接电阻、电容、比较器、触发电路和执行电路。
(2)调试电路:通过调整电阻和电容的值,实现1-99秒的定时功能。
(3)测试电路:使用秒表测量定时器电路的定时时间,确保其符合要求。
三、实训过程1. 查阅资料:了解定时器的原理、电路组成和调试方法。
2. 设计电路:根据实训要求,设计一个能够实现1-99秒定时功能的两位数定时器电路。
3. 搭建电路:按照电路设计,连接电阻、电容、比较器、触发电路和执行电路。
4. 调试电路:通过调整电阻和电容的值,实现1-99秒的定时功能。
5. 测试电路:使用秒表测量定时器电路的定时时间,确保其符合要求。
实验2:CC2530 定时器实验

计算机科学与技术学院实验报告课程名称:无线传感器网络原理与应用实验二:CC2530定时器实验一、实验目的了解并学会使用 CC2530 芯片的定时器。
二、实验内容用定时器 1 和定时器 3 采用中断方式实现定时,分别控制红绿灯的状态翻转。
定时器 1 自由运行模式,8 分频;定时器 3 自由运行,128 分频。
定时器1 为16 位定时器,在自由运行模式下,从 0x0000 到 0xFFFF 反复计数;定时器 3 为 8位定时器,在自由运行模式下,从 0x00 到 0xFF 反复计数。
当到达计时值时,定时器会产生中断,中断函数就是处理相应定时器产生的中断。
三、实验环境硬件:鼎轩 WSN 实验箱(汇聚网关、烧录线),PC 机;软件:IAR 软件。
四、实验步骤CC2530 芯片包含四个定时器(Timer1、Timer2、Timer3、Timer4)和一个休眠定时器(Sleep Timer)。
Timer1 是 16 位的定时器,支持典型的定时/计数功能以及 PWM 功能,该定时器共有三个捕捉/比较通道,每个通道使用一个单独的 I/O 引脚。
Timer1 的时钟频率是由系统时钟分频得到,首先由寄存器中的 CLKON.TICKSPD 分频,系统时钟是32MHz的情况下, CLKON.TICKSPD可以将该时钟频率分频到32MHz (TICKSPD为 000)、16MHz(TICKSPD 为 001)、 8MHz (TICKSPD 为 010)、4MHz(TICKSPD为 011)、 2MHz (TICKSPD 为 100)、 1MHz (TICKSPD 为101)、 0.5MHz (TICKSPD为 110)、 0.25MHz (TICKSPD 为 111);分频后的时钟频率可以被 T1CTL.DIV 分频,分频数为 1、8、32、128。
因此,在 32MHz 的系统频率下,Timer1 的最小时钟频率为 1953.125Hz,最大时钟频率为 32MHz。
定时器的实验报告

定时器的实验报告1. 实验目的本实验旨在通过使用定时器,了解定时器的基本原理和应用。
2. 实验原理定时器是一种重要的计时工具,其基本原理是通过一个稳定的时钟信号,计算经过的时间并进行相应的操作。
定时器通常由一个计数器和一个时钟源组成。
定时器的计数器可以根据预设的值不断自增,当计数器达到设定值时,就会触发相应的中断或输出信号。
时钟源为定时器提供稳定的时钟脉冲,可以通过外部晶振、振荡器等方式提供。
3. 实验材料•单片机开发板•电脑•USB 数据线4. 实验步骤步骤1:准备工作连接开发板和电脑,确保开发板正常工作,并具备编程的能力。
步骤2:编写代码使用编程软件打开官方提供的开发工具,创建一个新项目。
在代码文件中添加定时器相关的代码,设置计数器的初始值和触发中断的条件。
步骤3:编译和烧录编译代码,并将生成的目标文件烧录到开发板中。
确保烧录成功,无误后进行下一步。
步骤4:实验测试将开发板连接到示波器或其他外设,观察定时器中断或输出信号的波形和频率。
根据需要,可以调整定时器的计数器初始值、触发条件等参数,观察不同的实验结果。
5. 实验结果与分析经过实验测试,可以观察到定时器正常工作,并且在达到预设值时触发中断或输出信号。
根据预先设定的参数,可以得到不同的定时器工作效果。
通过观察波形和频率,可以验证定时器的准确性和稳定性。
6. 实验总结本实验通过使用定时器,掌握了定时器的基本原理和应用。
定时器在嵌入式系统和计时器等领域具有重要的作用。
掌握定时器的使用,可以为后续的实验和项目开发提供参考和基础。
在实验过程中,需要注意定时器参数的设置和调整,以达到预期的结果。
定时器的使用还需要考虑中断优先级、占用资源等相关因素,并根据实际需求进行适当的优化。
7. 参考资料•数据手册,XX单片机系列。
•XX单片机开发手册。
以上是关于定时器的实验报告的基本结构,根据实际情况和实验过程,可以进行合理的扩展和修改。
在实验报告中,需要包含相关材料、步骤、结果和分析,以便于他人理解和参考。
用TIMER实现精密定时

实验4. 用TIMER实现精密定时一、实验目的了解S12单片机定时器结构,掌握定时器的精密定时方法二、实验任务1、使用定时器,使B口小灯以1秒的速度进行跑马灯。
2、使用定时器产生10ms中断,点亮动态扫描数码管,使数码管依次显示1234三、硬件资源4位8段数码管显示电路,D111为4位8段数码管模块,4个三极管为4个位选的驱动,由于段选段都连接在一起,因此要显示不同的数字,只能采用动态扫描的方式实现,QA~QH端可以通过跳线端子JP2连接到单片机的P口,而位选端直接连接到单片机的PK0~PK3,如图4-1所示。
图4-1 数码管显示电路四、预习要求1、参考教材明确定时器各寄存器的作用,查找定时器的中断向量是多少?定时器系统控制寄存器1,TSCR1 是定时器模块的总开关,它决定模块是否启动以及在中断等待、BDM 方式下的行为,还包括标志的管理方式。
定时器系统控制寄存器2,TSCR2 可在任何时候读或写。
定时器计数寄存器TCNT TCNT是递增计数器,它不停地对内部时钟信号计数、程序可随时读取,但在普通模式下禁止写入。
TCNT 应按字访问,分别访问高、低字节可能得到错误的结果。
主定时器中断标志寄存器2,TFLG2TOF:主定时器溢出标志,溢出时1,允许中断(TOI=1),则引发溢出中断。
Bit6~bit0=0。
PIT0、PIT1、PIT2、PIT3 对应的中断向量号分别为66、67、68、69。
2、如何计算定时时间长度time-out period = (PITMTLD + 1) * (PITLD + 1) / fBUS.3、考虑软件定时和硬件定时的优缺点硬件定时比较准确,软件定时不太准备,主要用在不需要精确定时的地方,而且软件定时比较浪费单片机资源。
4、编写相关程序#include <hidef.h>#include "derivative.h"#define LEDCPU PORTK_PK4#define LEDCPU_dir DDRK_DDRK4unsigned int temp;void initialize_ect(void){TSCR1_TFFCA = 1;TSCR1_TEN = 1;TIOS = 0xff;TCTL1 = 0x00;TCTL2 = 0x00;TIE = 0xff;TSCR2 = 0x87;TFLG1 = 0xff;TFLG2 = 0xff;}#pragma CODE_SEG __NEAR_SEG NON_BANKEDvoid interrupt VectorNumber_Vtimovf overflow(void){if(TFLG2_TOF ==1){temp=TCNT;LEDCPU = ~LEDCPU ;}}void interrupt VectorNumber_Vtimch0 OutComper(void){if(TFLG1_C0F ==1){TC0 = TCNT + 6250;PORTB_PB0 = ~ PORTB_PB0;}}void interrupt 9 OutComper1(void){if(TFLG1_C1F ==1){TC1 = TCNT + 1250;PORTB_PB1 = ~ PORTB_PB1;}void interrupt 10 OutComper2(void) {if(TFLG1_C2F ==1){TC2 = TCNT + 2500;PORTB_PB2 = ~ PORTB_PB2; }}void interrupt 11 OutComper3(void) {if(TFLG1_C3F ==1){TC3 = TCNT + 5000;PORTB_PB3 = ~ PORTB_PB3; }}void interrupt 12 OutComper4(void) {if(TFLG1_C4F ==1){temp=TCNT;TC4 = TCNT + 10000;PORTB_PB4 = ~ PORTB_PB4; }}void interrupt 13 OutComper5(void) {if(TFLG1_C5F ==1){temp=TCNT;TC5 = TCNT + 20000;PORTB_PB5 = ~ PORTB_PB5; }}void interrupt 14 OutComper6(void) {if(TFLG1_C6F ==1){temp=TCNT;TC6 = TCNT + 40000;PORTB_PB6 = ~ PORTB_PB6; }void interrupt 15 OutComper7(void) {TC7 = TCNT + 60000;PORTB_PB7 = ~ PORTB_PB7;}#pragma CODE_SEG DEFAULTvoid main(void){DisableInterrupts;initialize_ect();LEDCPU_dir = 1;LEDCPU = 0; EnableInterrupts;DDRB = 0xff;PORTB = 0xff;for(;;){}}。
通用定时器-定时实验

通用定时器-定时实验二、预备知识STM32中一共有11个定时器,其中2个高级控制定时器,4个通用定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。
编程步骤:1、配置系统时钟;2、配置NVIC;3、配置GPIO;4、配置TIMER;第4项配置TIMER有如下配置:(1)利用TIM_DeInit()函数将Timer设置为默认缺省值;(2)TIM_InternalClockConfig()选择TIMx来设置内部时钟源;(3)TIM_Perscaler来设置预分频系数;(4)TIM_ClockDivision来设置时钟分割;(5)TIM_CounterMode来设置计数器模式;(6)TIM_Period来设置自动装入的值(7)TIM_ARRPerloadConfig()来设置是否使用预装载缓冲器(8)TIM_ITConfig()来开启TIMx的中断其中(3)-(6)步骤中的参数由TIM_TimerBaseInitTypeDef结构体给出。
步骤(3)中的预分频系数用来确定TIMx所使用的时钟频率,具体计算方法为:CK_INT/(TIM_Perscaler+1)。
CK_INT是内部时钟源的频率,是根据2.1中所描述的APB1的倍频器送出的时钟,TIM_Perscaler是用户设定的预分频系数,其值范围是从0–65535。
步骤(4)中的时钟分割定义的是在定时器时钟频率(CK_INT)与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例。
TIM_ClockDivision的参数如下表:数字滤波器(ETR,TIx)是为了将ETR进来的分频后的信号滤波,保证通过信号频率不超过某个限定。
步骤(7)中需要禁止使用预装载缓冲器。
当预装载缓冲器被禁止时,写入自动装入的值(TIMx_ARR)的数值会直接传送到对应的影子寄存器;如果使能预加载寄存器,则写入ARR的数值会在更新事件时,才会从预加载寄存器传送到对应的影子寄存器。
单片机实验二 定时器实验程序
sbit L3=P0^7;
unsigned char keynum;
unsigned int lasttime=100;
bit bset=0;
unsigned char keyscan();
void display();
unsigned char getkey();
void set();
code unsigned char table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
sbit H1=P3^6;
sbit H2=P3^7;
sbit L1=P0^5;
void main()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
P1M1=0x00;
P1M0=0xff;
while(1)
{
keynum=keyscan();
display();
set();
}
}
void timer0() interrupt 1
{
P1=0X00;
W1=1;
W2=0;W3=1;W4=1;
P1=table[(unsigned char)(lasttime%1000/100)]|a;
}
else if(ct1<60)
{
P1=0X00;
W2=1;
W3=0;W4=1;W1=1;
P1=table[(unsigned char)(lasttime%1000%100/10)]|a;
st语言timer案例
st语言timer案例Timer是一种用于计时的设备,它可以在特定的时间间隔内执行特定的任务。
在ST语言中,Timer被广泛应用于工业自动化领域,用于控制各种设备的运行时间和周期。
下面是关于ST语言中Timer 的一些实际案例。
1. 控制机器人的运行时间在工业生产线上,机器人通常需要按照特定的时间间隔运行。
通过使用Timer,可以设置机器人的运行时间,并在时间到达后停止机器人的运行。
这样可以保证机器人的工作效率,并且避免机器人长时间无效运行。
2. 控制灯光的闪烁间隔在舞台灯光控制系统中,常常需要设置灯光的闪烁间隔。
通过使用Timer,可以设置灯光的闪烁时间和停止时间,并在时间到达后控制灯光的开关,实现灯光的闪烁效果。
3. 控制电梯的开关门时间在大楼电梯系统中,电梯的开关门时间需要精确控制。
通过使用Timer,可以设置电梯的开门时间和关门时间,并在时间到达后控制电梯门的开关,确保电梯运行的安全和顺畅。
4. 控制输送带的运行时间在物流系统中,输送带通常需要按照特定的时间间隔运行。
通过使用Timer,可以设置输送带的运行时间和停止时间,并在时间到达后控制输送带的开关,实现物品的顺利运输。
5. 控制空调的运行时间在办公室和家庭中,空调的运行时间需要合理控制,以节省能源并提供舒适的环境。
通过使用Timer,可以设置空调的开启时间和关闭时间,并在时间到达后控制空调的开关,实现节能和舒适度的平衡。
6. 控制喷淋系统的喷水时间在农业灌溉系统中,喷淋系统需要按照特定的时间间隔进行喷水。
通过使用Timer,可以设置喷淋系统的喷水时间和停止时间,并在时间到达后控制喷淋系统的开关,实现农作物的合理灌溉。
7. 控制家用电器的定时开关在家庭中,一些家用电器需要按照特定的时间进行定时开关。
通过使用Timer,可以设置家用电器的开启时间和关闭时间,并在时间到达后控制家用电器的开关,实现家庭生活的便利和舒适。
8. 控制交通信号灯的切换时间在城市交通系统中,交通信号灯需要按照特定的时间间隔进行切换。
定时器指令实验报告
定时器指令实验报告定时器指令实验报告一、引言定时器指令是计算机科学中常用的一种指令类型,用于实现时间控制和计时功能。
在本次实验中,我们将学习并掌握定时器指令的使用方法,并通过实验验证其正确性和有效性。
二、实验目的1. 理解定时器指令的原理和功能。
2. 学习定时器指令的编程方法。
3. 掌握定时器指令在实际应用中的使用。
三、实验器材和方法1. 实验器材:计算机、编程软件。
2. 实验方法:通过编写程序,使用定时器指令进行计时和时间控制。
四、实验过程1. 初始化定时器:在程序开始时,需要对定时器进行初始化设置。
通过设定计时周期和工作模式等参数,确保定时器能够按照预定的时间间隔工作。
2. 编写定时器指令程序:根据实际需求,编写程序,使用定时器指令实现计时和时间控制功能。
例如,可以编写一个简单的程序,通过定时器指令实现每隔一秒钟在屏幕上显示一次当前时间。
3. 运行程序并观察结果:将编写好的程序在计算机上运行,并观察定时器指令的效果。
确保程序能够按照预期的时间间隔进行计时和时间显示。
五、实验结果与分析经过实验,我们成功使用定时器指令实现了计时和时间控制的功能。
每隔一秒钟,程序会在屏幕上显示一次当前时间,实现了时间的自动更新和显示。
这在实际应用中非常有用,比如在科学实验中需要精确计时,或者在工业自动化控制中需要按照一定时间间隔进行操作等。
六、实验总结通过本次实验,我们深入了解了定时器指令的原理和功能,并学会了如何使用定时器指令进行时间控制和计时。
定时器指令在计算机科学和工程技术中具有广泛的应用,可以用于实现各种时间相关的功能。
掌握定时器指令的使用方法对于我们提高编程能力和解决实际问题具有重要意义。
七、存在的问题与改进方向在本次实验中,我们成功实现了定时器指令的功能,但仍存在一些问题。
首先,定时器指令的精度可能受到计算机硬件和操作系统等因素的影响,需要进行更精确的测试和调整。
其次,定时器指令的编程方法可能较为复杂,需要更深入地学习和理解。
通用计时器的使用 timer实验
句柄 handle
Eg本例程中使用到的句柄相关的API操作: 做为返回值:
做为函数参数传递:
Timer的寄存器
2个计数寄存器 PSC TIM 主计数寄存器 2个周期寄存器 TDDR PRD 主周期计数器 计时器控制寄存器 TCR
Timer寄存器配置
通用配置模板 TIMER_Config Config1 = {
XF引脚输出的LED: 0101010101….. 全局变量xfchange控制输出方向 timer0_cnt控制次数
TCR
TIMER_TCR_ARB_RESET, /* ARB == 1 */ 自动重新装入位: ARB=1,主计数器(TIM)一旦减少为0,计数寄存器自动从周期寄存器 重新装入 PRD-》TIM TDDR-》PSCTim源自r的速率计时器发出信号的速率:
TDDR=0x0 PRD=0x3400= 13312(十进制) 输入时钟12M(HX-5509开发板12M晶体)
通用计时器 Timer
通用计时器 Timer
详细资料:光盘目录\DSP5509开发板\应用资料\官方手册\ TMS320VC5509 DSP Timers Reference Guide.pdf Chapter 1 General−Purpose Timer
句柄 handle
通常句柄的概念: 在windows中,是一个数字,通常为32位,作用类似于一个索引,在 windows中用以代表一个对象。 windows中的句柄类似于传统C或者MS_DOS所使用的文件句柄。 windows程序总是通过调研windows函数以获取句柄。句柄本身的值实 际并不重要,重要的是很多windows函数需要通过句柄来引用它所代 表的对象。
句柄 handle
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验2、TIMER
【实验目的】
1、学习用Keil软件开发ARM程序方法和步骤(包括环境搭建和具体配置)。
2、学习STM32系列处理器TIMER的结构及工作原理。
3、理解基于Cortex-M3内核的STM32实验开发平台的管脚链接及原理。
4、掌握使用J—LINK下载程序的方法。
【实验要求】
1、掌握STM32系列处理器TIMER以及NVIC的功能原理;
2、TIMER端口的寄存器配置情况?各个端口引脚通过软件可以进行哪些模式配置?怎样配
置?
3、在Keil中设计ARM程序,实现定时器触发中断对流水灯的控制;
4、下载到实验平台,并成功运行。
5、附加要求:修改源程序,实现定时器触发中断对LED的各种不同移动、闪烁效果。
6、附加要求:用汇编编程直接实现定时器触发中断对流水灯的控制。
【实验原理】
1、STM32系列处理器的时钟树:
2、STM32高级定时器结构图:
STM32F10x系列单片机有8个定时器:高级定时器(Timer1和Timer8);通用定时器(TIM2、TIM3、TIM4和TIM5)和基本定时器(TIM6和TIM7)。
3、TIMER寄存器地址映像和复位值
4、固件函数库(见附件文档固件函数库)
5、实验电路原理图
实验电路的连接如下图,4个LED是利用STM32的GPIO口的PD.8到PD.11来控制的。
引脚输出高电平则LED点亮,输出低电平则LED熄灭(因为LED的另一端接地)。
对管脚的操作实际上就是对控制管脚寄存器的操作,所以可以通过对管脚寄存器的操作,实现管脚的不同输出(即高低电平),从而控制LED的状态(亮、灭)。
C程序如下:
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_rcc.h"
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); TIM_BaseInitStructure.TIM_Period=20000;
TIM_BaseInitStructure.TIM_Prescaler=3599;
TIM_BaseInitStructure.TIM_ClockDivision=0 ;
TIM_BaseInitStructure.TIM_CounterMode=TIM_CounterMode_Down; TIM_TimeBaseInit(TIM1,&TIM_BaseInitStructure);
TIM_ClearFlag(TIM1,TIM_FLAG_Update);
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM1, ENABLE);
}
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
VECT_TAB_RAM
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel= TIM1_UP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void TIM1_UP_IRQHandler(void)
{
u8 ReadValue;
if(TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) {
TIM_ClearITPendingBit(TIM1 , TIM_FLAG_Update);
ReadValue = GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_8 | GPIO_Pin_9 |
GPIO_Pin_10 | GPIO_Pin_11);
if(ReadValue == 0)
{
GPIO_SetBits(GPIOD,GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11);
}
else
{ GPIO_ResetBits(GPIOD,GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11);
}
}
}
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD , ENABLE );
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
}
int main()
{
RCC_Configuration();
GPIO_Configuration();
NVIC_Configuration();
TIM_Configuration();
while(1)
{
}
}。