STM32F103ve定时器时间算法

合集下载

STM32F103系列单片机中的定时器工作原理解析

STM32F103系列单片机中的定时器工作原理解析

STM32F103系列单片机中的定时器工作原理解析
STM32F103系列的单片机一共有11个定时器,其中:
2个高级定时器
4个普通定时器
2个基本定时器
2个看门狗定时器
1个系统嘀嗒定时器
出去看门狗定时器和系统滴答定时器的八个定时器列表;
8个定时器分成3个组;
TIM1和TIM8是高级定时器
TIM2-TIM5是通用定时器
TIM6和TIM7是基本的定时器
这8个定时器都是16位的,它们的计数器的类型除了基本定时器TIM6和TIM7都支持向上,向下,向上/向下这3种计数模式
计数器三种计数模式
向上计数模式:从0开始,计到arr预设值,产生溢出事件,返回重新计时
向下计数模式:从arr预设值开始,计到0,产生溢出事件,返回重新计时
中央对齐模式:从0开始向上计数,计到arr产生溢出事件,然后向下计数,计数到1以后,又产生溢出,然后再从0开始向上计数。

(此种技术方法也可叫向上/向下计数)
基本定时器(TIM6,TIM7)的主要功能:
只有最基本的定时功能,。

基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动
通用定时器(TIM2~TIM5)的主要功能:
除了基本的定时器的功能外,还具有测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。

STM32F103VE-中文

STM32F103VE-中文

− 2个16位6通道高级控制定时器,多达6路 PWM输出,带死区控制
− 2个看门狗定时器(独立的和窗口型的) − 系统时间定时器:24位自减型计数 − 2个16位基本定时器用于驱动DAC
■ 多达13个通信接口 − 多达2个I2C接口(支持SMBus/PMBus) − 多达5个USART接口(支持ISO7816,LIN, IrDA接口和调制解调控制)
■ 低功耗 − 睡眠、停机和待机模式 − VBAT为RTC和后备寄存器供电
■ 3个12位模数转换器,1μs转换时间(多达21个 输入通道) − 转换范围:0至3.6V − 三倍采样和保持功能 − 温度传感器
■ 2 通道 12 位 D/A 转换器
■ DMA − 12通道DMA控制器 − 支持的外设:定时器、ADC、DAC、SDIO、 I2S、SPI、I2C和USART
■ 多达112个快速I/O口 − 51/80/112个多功能双向的I/O口 − 所有I/O口可以映像到16个外部中断 − 除了模拟输入口以外的IO口可容忍5V信号 输入
■ 调试模式 − 串行单线调试(SWD)和JTAG接口 − Cortex-M3内嵌跟踪模块(ETM)
■ 多达11个定时器
− 多达4个16位定时器,每个定时器有多达4个 用于输入捕获/输出比较/PWM或脉冲计数的 通道
STM32F103xC、STM32F103xD和STM32F103xE增强型系列拥有内置的ARM核心,因此它与
所有的ARM工具和软件兼容。
图一是该系列产品的功能框图。
内置闪存存储器
高达512K字节的内置闪存存储器,用于存放程序和数据。
CRC(循环冗余校验)计算单元
CRC(循环冗余校验)计算单元使用一个固定的多项式发生器,从一个32位的数据字产生一个CRC码。 在众多的应用中,基于CRC的技术被用于验证数据传输或存储的一致性。在EN/IEC 60335-1标准的范 围内,它提供了一种检测闪存存储器错误的手段,CRC计算单元可以用于实时地计算软件的签名, 并与在链接和生成该软件时产生的签名对比。

stm32f103电子琴课设报告 终极版(1)

stm32f103电子琴课设报告 终极版(1)

单片机课程设计题目:实现简易电子琴院(系):专业:班级:学生:学号:指导教师:2016年6月26日简易电子琴的设计与实现摘要:本次设计是利用单片机设计简易电子琴。

其主要功能为:按下不同按键,发出不同1 、2 、3、4 、5 、6 、7 七个音符并且用LED 或LCD显示当前按键。

选用stm32f103VE,它有8个定时器,部分定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入。

利用芯片内部相关定时器来输出PWM,从而来驱动蜂鸣器。

通过读取外部按键输入的值来相应改变定时器相关寄存器的值,从而来改变PWM的输出频率来达到发出不同音调。

关键词: STM32f103VE;蜂鸣器;定时器The Design of the Keyboard Abstract:This design is the professional direction of biomedical engineering design. Using Single Chip Microcomputer to achieve a simple Keyboard. Its main function is: While a user press the different keys, it will make different sounds from the buzzer and display different numbers which corresponded to the sounds. Using stm32f103- -C8T6 as control chip. It has16-bit timers. Some of them with up to 4 IC/OC/PWM or pulse counter. Making use of the Timers to generate driving signal .By reading the state of the external key to change the frequency of output . Different frequency of the PWM will control buzzer makes different sounds.Key words: STM32f103; signal; Timer一、设计目的:通过本次综合设计,旨在运用已经学过的知识,根据题目的要求进行软硬件系统的设计和调试,对在《单片机的原理及应用》课程中涉及的芯片结构、控制原理、硬件和编程等方面有一定的感性认识和实践操作能力。

stm32f103工作原理

stm32f103工作原理

stm32f103工作原理(最新版)目录一、STM32F103 简介二、STM32F103 的电路原理三、STM32F103 的定时器工作原理四、STM32F103 的串口中断及其配置五、STM32F103 的应用案例六、总结正文一、STM32F103 简介STM32F103 是一种基于 ARM Cortex-M3 内核的微控制器,由STMicroelectronics 公司推出。

它具有高性能、低功耗、多功能、易扩展等特点,广泛应用于各种嵌入式系统中,如智能家居、自动控制、智能穿戴等。

二、STM32F103 的电路原理STM32F103 微控制器的内部电路主要包括 CPU 核心、存储器、定时器、串口、GPIO 等模块。

其中,CPU 核心是整个微控制器的核心,负责程序的执行;存储器用于存储程序和数据;定时器用于计时和控制;串口用于与外部设备进行通信;GPIO 用于与外部设备进行接口。

三、STM32F103 的定时器工作原理STM32F103 系列微控制器共有 11 个定时器,分为高级定时器、普通定时器和基本定时器三类。

这些定时器可以实现多种功能,如计时、测量、控制等。

定时器的工作原理主要基于计数器和时钟脉冲,通过计数器计数时钟脉冲来实现定时功能。

四、STM32F103 的串口中断及其配置STM32F103 的串口模块可以配置为中断模式,当接收到一定数量的字符时,会产生中断信号。

串口中断的配置主要包括使能串口时钟、配置GPIO(TX、RX)以及初始化 NVIC 等步骤。

通过串口中断,可以实现异步通信和实时响应等功能。

五、STM32F103 的应用案例STM32F103 微控制器广泛应用于各种嵌入式系统中,如智能家居、自动控制、智能穿戴等。

例如,在智能家居系统中,可以使用 STM32F103 控制灯光、家电等设备;在自动控制系统中,可以使用 STM32F103 实现传感器数据采集和控制策略执行;在智能穿戴设备中,可以使用 STM32F103 实现运动数据监测和健康管理等功能。

STM32之TIM通用定时器

STM32之TIM通用定时器

STM32之TIM通⽤定时器本⽂介绍如何使⽤STM32标准外设库配置并使⽤定时器,定时器就是设置⼀个计时器,待计时时间到之后产⽣⼀个中断,程序接收到中断之后可以执⾏特定的程序,跟现实中的闹钟功能类似。

与延时功能不同,定时器计时过程中程序可以执⾏其他程序。

最简单直观的应⽤为定时翻转指定IO引脚。

本例程使⽤通⽤定时器TIM3,每100ms翻转GPIOB的Pin5输出,如果该引脚外接有LED灯,可以看到LED灯周期性的闪烁。

STM32F103VE系列共有8个定时器,分为基本定时器、通⽤定时器和⾼级定时器,其中通⽤定时器包括TIM2/3/4/5共4个,如果⼀个定时器不够⽤,可以启动其他⼏个定时器。

本⽂适合对单⽚机及C语⾔有⼀定基础的开发⼈员阅读,MCU使⽤STM32F103VE系列。

TIM通⽤定时器分为两部分,初始化和控制。

1. 初始化分两步:通⽤中断、TIM。

1.1. 通⽤中断:优先级分组、中断源、优先级、使能优先级分组:设定合适的优先级分组中断源:选择指定的TIM中断源:TIM3_IRQn优先级:设定合适的优先级使能:调⽤库函数即可1.2. TIM:时钟、预分频器、定时器周期、分频因⼦、计数模式、初始化定时器、开启定时器中断、使能计数器。

结构体:typedef struct{uint16_t TIM_Prescaler;uint16_t TIM_CounterMode;uint16_t TIM_Period;uint16_t TIM_ClockDivision;uint8_t TIM_RepetitionCounter;} TIM_TimeBaseInitTypeDef;时钟:需要使能定时器时钟//开启定时器时钟,即内部时钟CK_INT=72MRCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);预分频器:默认定时器时钟频率为72M,那么预分频器设置为71,那么⼀次计数为1us//时钟预分频数为71,则计数器计数⼀次时间为1usTIM_TimeBaseStructure.TIM_Prescaler = 71;定时器周期:设置为999,那么产⽣⼀次定时器中断的时间为1ms//⾃动重装载寄存器为999,则产⽣⼀次中断时间为1msTIM_TimeBaseStructure.TIM_Period = 1000 - 1;计数模式:⼀般选择向上计数模式// 计数器计数模式,选择向上计数模式TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;时钟分频因⼦:⼀般选择1分频// 时钟分频因⼦,选择1分频TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;重复计数器的值:仅对⾼级定时器有效,⽆需设置初始化定时器:调⽤库函数即可//初始化定时器TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);开启定时器中断//开启计数器中断TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);使能计数器//使能计数器TIM_Cmd(TIM3, ENABLE);2. 处理2.1. 中断服务函数定时器TIM3的中断服务函数名称为TIM3_IRQHandler ()。

stm32f103的HSI设置

stm32f103的HSI设置

stm32f103的HSI设置HSI基本知识  HSI是8MRC震荡电路,精度1%。

PLL的设置必须在其被激活前完成,输出必须被设置温48M或者72M LSE:通过在备份域控制寄存器(RCC_BDCR)⾥的LSEON位启动和关闭。

如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率⼀致。

否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍 HSI + PLL 最⾼为64M(HSI / 2 * 16)。

寄存器的作⽤ 时钟控制寄存器RCC_CR:HSI/HSE/PLL使能和就绪,HSI时钟校准。

时钟配置寄存器(RCC_CFGR):时钟切换和切换状态标志,各种分频器 时钟中断寄存器 (RCC_CIR):各种时钟中断和时钟中断标志。

APB2 外设复位寄存器 (RCC_APB2RSTR);APB1 外设复位寄存器 (RCC_APB1RSTR):各个外设接⼝的复位 AHB外设时钟使能寄存器 (RCC_AHBENR);APB2 外设时钟使能寄存器(RCC_APB2ENR);APB1 外设时钟使能寄存器(RCC_APB1ENR):各个外设的使能。

HSI的配置,我这⾥⽤的是原库,直接将 system_stm32f10x.c 中的 void SystemInit (void) 函数改成下边的就可以了void SystemInit (void){ RCC_DeInit();//将外设 RCC寄存器重设为缺省值RCC_HSICmd(ENABLE);//使能HSIwhile(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待HSI使能成功FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能或者失能预取指缓存(参数⾥是使能) -----加上这两句才能到64MFLASH_SetLatency(FLASH_Latency_2); //设置代码延时值(参数⾥的是指2延时周期)RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟 HCLK = SYSCLK/1RCC_PCLK1Config(RCC_HCLK_Div4); //设置低速速AHB时钟 -----这⾥频率是48/4 = 12M 定时器2~7频率是24MRCC_PCLK2Config(RCC_HCLK_Div1); //设置⾼速AHB时钟 -----这⾥频率是48/1 = 48M//设置 PLL 时钟源及倍频系数RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);//使能或者失能 PLL,这个参数可以取:ENABLE或者DISABLE RCC_PLLCmd(ENABLE);//如果PLL被⽤于系统时钟,那么它不能被失能//等待指定的 RCC 标志位设置成功等待PLL初始化成功while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);//设置系统时钟(SYSCLK)设置PLL为系统时钟源RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择想要的系统时钟//等待PLL成功⽤作于系统时钟的时钟源// 0x00:HSI 作为系统时钟// 0x04:HSE作为系统时钟// 0x08:PLL作为系统时钟while(RCC_GetSYSCLKSource() != 0x08);//需与被选择的系统时钟对应起来,RCC_SYSCLKSource_PLL} 配置之后,不确定是否配置成功,可以只⽤库函数中的时钟频率结构体,来查看系统各个时钟频率,在主函数中使⽤int main( void ){ RCC_ClocksTypeDef RCC_Clocks; //时钟频率结构体RCC_GetClocksFreq(&RCC_Clocks); //获取各个时钟频率printf("SYSCLK_Frequency is %d \r\n",RCC_Clocks.SYSCLK_Frequency); //SYSCLK_Frequency is 48000000printf("HCLK_Frequency is %d \r\n",RCC_Clocks.HCLK_Frequency); //HCLK_Frequency is 48000000printf("PCLK1_Frequency is %d \r\n",RCC_Clocks.PCLK1_Frequency); //PCLK1_Frequency is 12000000printf("PCLK2_Frequency is %d \r\n",RCC_Clocks.PCLK2_Frequency); //PCLK2_Frequency is 48000000printf("ADCCLK_Frequency is %d \r\n",RCC_Clocks.ADCCLK_Frequency); //ADCCLK_Frequency is 24000000 }。

STM32F103ZET6通用定时器

STM32F103ZET6通用定时器

STM32F103ZET6通⽤定时器1、通⽤定时器简介  通⽤定时器是由⼀个可编程预分频器驱动的16位⾃动装载计数器构成。

通⽤定时器可以应⽤于多种场合,如测量输⼊信号的脉冲长度(输⼊捕获)或者产⽣输出波形(输出⽐较和PWM)。

使⽤通⽤定时器的预分频器和RCC时钟控制器的预分频器,脉冲长度和输出波形周期可以在⼏个微秒到⼏个毫秒间调整。

STM32内有多个通⽤定时器,每个通⽤定时器都是完全独⽴的,没有互相共享任何资源。

通⽤定时器的主要功能包括: 16位向上、向下、向上/向下⾃动装载计数器。

16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值。

4个独⽴通道可以实现4路:输⼊捕获、输出⽐较、PWM输出、单脉冲模式输出。

使⽤外部信号控制定时器和定时器互连的同步电路。

⽀持针对定位的增量(正交)编码器和霍尔传感器电路。

通⽤定时器框图如下:2、通⽤定时器的时基单元 通⽤定时器的时基单元主要由⼀个16位计数器和与其相关的⾃动装载寄存器。

这个计数器可以向上计数、向下计数或者向上向下双向计数。

通⽤定时器的计数器的时钟由预分频器分频得到,⾄于预分频器之前的时钟在时钟选择的时候回说到。

通⽤定时器的计数器、⾃动装载寄存器和预分频器寄存器可以由软件读写,在计数器运⾏时仍可以读写。

如下图红⾊框部分就是通⽤定时器的时基部分: 时基单元包含: CNT计数器(TIMx_CNT)。

PSC预分频器(TIMx_PSC)。

⾃动重装载寄存器(TIMx_ARR)。

CNT 计数器和⾃动重装载寄存器: TIMx_ARR寄存器是预先装载的,写或读TIMX_ARR寄存器将访问预装载寄存器。

通⽤定时器根据TIMx_CR1寄存器中的ARPE 位,来决定写⼊TIMx_ARR寄存器的值是⽴即⽣效还是要等到更新事件(溢出)后才⽣效。

在计数器运⾏的过程中,ARPE位的作⽤如下: 当ARPE = 0时,写⼊TIMx_ARR寄存器的值⽴即⽣效,即TIMx_CNT计数器的计数范围⽴马更新。

STM32F103RC系统时钟配置

STM32F103RC系统时钟配置

地址:安徽省、合肥市、肥东县、店埠镇,合肥市福来德电子科技有限公司 STM32F103RC 系统时钟配置1、打开D:\program\KEL_MDT_ARM\STM32_Template\USER 目录,找到STM32-DEMO 文件,双击打开,KEIL-uVision4就开始运行了,得到下图:2、双击“STARTCODE ”下面的“start_stm32f10x_hd.s ”打开STM32F103RC 的启动文件,找“SystemInit ”,得到下图:地址:安徽省、合肥市、肥东县、店埠镇,合肥市福来德电子科技有限公司3、点击当前的行,右击鼠标,将光标移动到“Go To Definition Of SystemInit”,见下图:4、点击“Go To Definition Of SystemInit ”,会跳转到system_stm32f10x.c 文件,见下图:地址:安徽省、合肥市、肥东县、店埠镇,合肥市福来德电子科技有限公司5、在“system_stm32f10x.c ”文件中,在“void SystemInit (void)”函数体内找到“SetSysClock();”,见下图:6、点击“SetSysClock()”,右击鼠标,将光标移动到“Go To Definition Of SystemClock”,见下图:地址:安徽省、合肥市、肥东县、店埠镇,合肥市福来德电子科技有限公司 7、点击“Go To Definition Of SystemClock”,会跳转到system_stm32f10x.c 文件,见下图:8、点击“defined SYSCLK_FREQ_72MHz ”,右击鼠标,将光标移到到“Go To Definition Of SYSCLK_FREQ_72MHz ”,见下图:地址:安徽省、合肥市、肥东县、店埠镇,合肥市福来德电子科技有限公司9、点击“Go To Definition Of SYSCLK_FREQ_72MHz ”,会跳转到下图:10、在上图中,我们可以设置所需要的系统时钟,这里设置系统时钟是SYSCLK_FREQ_72MHz ,见下面粘贴的部分#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) /* #define SYSCLK_FREQ_HSE HSE_VALUE */#define SYSCLK_FREQ_24MHz 24000000#else/* #define SYSCLK_FREQ_HSE HSE_VALUE *//* #define SYSCLK_FREQ_24MHz 24000000 *//* #define SYSCLK_FREQ_36MHz 36000000 *//* #define SYSCLK_FREQ_48MHz 48000000 *//* #define SYSCLK_FREQ_56MHz 56000000 */#define SYSCLK_FREQ_72MHz 72000000 //这是我们要设置的系统时钟#endif。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

S TM32 定时器定时时间的计算2010-11-18 14:12:18| 分类:资料引用| 标签:|字号大中小订阅引用mxpopstar 的STM32 定时器定时时间的计算假设系统时钟是72Mhz,TIM1 是由PCLK2 (72MHz)得到,TIM2-7是由PCLK1 得到关键是设定时钟预分频数,自动重装载寄存器周期的值/*每1秒发生一次更新事件(进入中断服务程序)。

RCC_Configuration()的SystemInit()的RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2表明TIM3CLK为72MHz。

因此,每次进入中断服务程序间隔时间为((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1 +9999)=1秒*/定时器的基本设置1、TIM_TimeBaseStructure.TIM_Prescaler = 7199;//时钟预分频数例如:时钟频率=72/(时钟预分频+1)2、TIM_TimeBaseStructure.TIM_Period = 9999; // 自动重装载寄存器周期的值(定时时间) 累计0xFFFF个频率后产生个更新或者中断(也是说定时时间到)3、TIM_TimeBaseStructure.TIM_CounterMode =TIM1_CounterMode_Up; //定时器模式向上计数4、TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时间分割值5、TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);//初始化定时器26、TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //打开中断溢出中断7、TIM_Cmd(TIM2, ENABLE);//打开定时器或者:TIM_TimeBaseStructure.TIM_Prescaler = 35999;//分频35999 72M/(35999+1)/2=1Hz 1秒中断溢出一次TIM_TimeBaseStructure.TIM_Period = 2000; //计数值2000 ((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+35999)/72M)*( 1+2000)=1秒*/STM32通用定时器的基本定时器功能实现灯闪烁/blog/static/12003725820091023451 51281/?fromdm&isFromSearchEngine=yes/*MAIN.C*//* Includes ------------------------------------------------------------------*/#include "stm32f10x.h"#include "misc.h"/* Private function prototypes -----------------------------------------------*/ void RCC_Configuration(void);void NVIC_Configuration(void);void GPIO_Configuration(void);void TIM3_Configuration(void);/* Private functions ---------------------------------------------------------*/ /*** @brief Main program* @param None* @retval : None*/int main(void){RCC_Configuration();NVIC_Configuration();GPIO_Configuration();TIM3_Configuration();TIM_ClearFlag(TIM3, TIM_FLAG_Update);/*清除更新标志位*/ TIM_ARRPreloadConfig(TIM3, DISABLE);/*预装载寄存器的内容被立即传送到影子寄存器*/TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);TIM_Cmd(TIM3, ENABLE);while (1) {;}}/*** @brief Configures TIM3* @param None* @retval : None*/void TIM3_Configuration(void){/*每1秒发生一次更新事件(进入中断服务程序)。

RCC_Configuration()的SystemInit()的RCC->CFGR |=(uint32_t)RCC_CFGR_PPRE1_DIV2表明TIM3CLK为72MHz。

因此,每次进入中断服务程序间隔时间为((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+99 99)=1秒*/TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Period = 9999;TIM_TimeBaseStructure.TIM_Prescaler = 7199;TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);/*此函数的语句"TIMx->EGR = TIM_PSCReloadMode_Immediate;"以软件方式产生更新事件(注:当发生一个更新事件时,所有的寄存器都被更新,硬件同时(依据URS位)设置更新标志位(TIMx_SR寄存器中的UIF 位)。

)。

*/}/*** @brief Configures the different system clocks.* @param None* @retval : None*/void RCC_Configuration(void){SystemInit();/* TIM3 clock enable */RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);/* GPIOC clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);}/*** @brief Configures NVIC.* @param None* @retval : None*/void NVIC_Configuration(void){NVIC_InitTypeDef NVIC_InitStructure;/* Enable the TIM3 gloabal Interrupt*/NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);}/*** @brief Configure the TIM3 Ouput Channels.* @param None* @retval : None*/void GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure);/*注:不用为实现通用定时器的基本定时器功能配置Pin*/}/*stm32f10x_it.c*//* Includes ------------------------------------------------------------------*/#include "stm32f10x_it.h"void TIM3_IRQHandler(void){if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) { /* Clear TIM3 update interrupt */TIM_ClearITPendingBit(TIM3, TIM_IT_Update);GPIO_WriteBit(GPIOC, GPIO_Pin_7, (BitAction)(1 -GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_7)));}}/*注:stm32f10x_stdperiph_lib_v3.0.0 编译器:MDK3.24A*//*软件仿真:首次进入中断Sec为1.00016507,第二次进入中断Sec 为2.00016507,因此2.00016507-1.00016507。

相关文档
最新文档