stm32stm32 滴答定时器器的tix是什么意思

21ic官方微信-->
后使用快捷导航没有帐号?
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
请完成以下验证码
查看: 2668|回复: 6
关于STM32 ETR计脉冲数的问题
&&已结帖(10)
主题帖子积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
#include &stm32f10x.h&
#include &stm32f10x_conf.h &
void Delay(__IO u32 nCount);
void TIM4_EIR_Init(void);
uint16_t COUNT = 0;
int main(void)
{& & & &
& & & & TIM4_EIR_Init();
& & & & while (1)
& & & & {& & & &
& & & & & & & & TIM_SetCounter(TIM4, 0); // CLEAR
& & & & & & & & COUNT=TIM_GetCounter(TIM4);
& & & & & & & & TIM_SetCounter(TIM4, 0); // CLEAR
& & & & & & & & COUNT=TIM_GetCounter(TIM4);
& & & & & & & & TIM_SetCounter(TIM4, 0); // CLEAR& & & &
& & & & }
}
void Delay(__IO u32 nCount)& & & &&&//简单的延时函数
{
& & & & for(; nCount != 0; nCount--);
}
void TIM4_EIR_Init(void)
{
& && &&&GPIO_InitTypeDef GPIO_InitS
& && &&&TIM_TimeBaseInitTypeDef&&TIM_TimeBaseS
& &
& && &&&RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
& && &&&/* GPIOE clock enable */
& && &&&RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
& & & & & & & & & & & & & & & & & & & & & & & & & & & & //Config PE0 为浮空输入
& & & & & & & & & & & & & & & & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
& & & & & & & & & & & & & & & & GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
& & & & & & & & & & & & & & & & GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
& & & & & & & & & & & & & & & & GPIO_Init(GPIOE, &GPIO_InitStructure);
& & & & & & & & & & & & & & & & TIM_DeInit(TIM4);
& & & & & & & & & & & & & & & & TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
& & & & & & & & & & & & & & & & TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
& & & & & & & & & & & & & & & & TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
& & & & & & & & & & & & & & & & TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
& & & & & & & & & & & & & & & & TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);&&// Time base configuration
& &
& & & & & & & & & & & & & & & & TIM_ETRClockMode2Config(TIM4, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);& &
& & & & & & & & & & & & & & & & TIM_SetCounter(TIM4, 0);& &
& & & & & & & & & & & & & & & & TIM_Cmd(TIM4, ENABLE);
& && &&&
}
}复制代码这是代码,编译正常。
用的是STM32F103VET的片子,TIM4的 ETR ,输入引脚为PE0
在主函数单步运行的时,没有脉冲输入的情况下,TIM_GetCounter(TIM4) 的值会变化,虽然能被IM_SetCounter(TIM4, 0)函数清零,但是单步到下一步又会计数,好像是自己在计数,而不是计外部脉冲数,求指点函数配置哪里有问题,刚开始使用STM32,非常感谢。
主题帖子积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
希望有人解答一下,谢谢了
主题帖子积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:43.00
主题帖子积分
改成这样看看(换下触犯模式):
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
TIM_CounterModeConfig(TIM3,TIM_CounterMode_Up);
TIM_SetAutoreload(TIM4,9);
TIM_TIxExternalClockConfig(TIM4,TIM_TIxExternalCLK1Source_TI2,TIM_ICPolarity_Rising,0);
TIM_Cmd(TIM4,ENABLE);
TIM_ITConfig(TIM4,TIM_IT_CC2|TIM_IT_Update,ENABLE);
欢迎进入21IC论坛
电子工程师技术交流群:4545085;
主题帖子积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
mmuuss586 发表于
改成这样看看(换下触犯模式):
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
是把哪部分改成这样呢?
主题帖子积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:43.00
主题帖子积分
mengyu139 发表于
是把哪部分改成这样呢?
程序都已经贴上来了,你按照我发的,先改改看;
欢迎进入21IC论坛
电子工程师技术交流群:4545085;
主题帖子积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
mmuuss586 发表于
程序都已经贴上来了,你按照我发的,先改改看;
你好,我最近开始了解STM32,不是太熟练,请问把你发的程序,替换掉我的程序的哪几行呢?
主题帖子积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 171, 距离下一级还需 129 积分
中级技术员, 积分 171, 距离下一级还需 129 积分
问题解决的,上述程序是没问题的,是我仿真的时候,设置成软件仿真了,重新设置成硬件仿真就可以了
技术奇才奖章
人才类勋章
时间类勋章
技术领袖奖章
人才类勋章
时间类勋章
坚毅之洋流
发帖类勋章
荣誉元老奖章
等级类勋章STM32入门篇之通用定时器彻底研究_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
STM32入门篇之通用定时器彻底研究
&&STM32入门篇之通用定时器彻底研究
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢STM32定时器定时时间配置总结_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
STM32定时器定时时间配置总结
定时器 定时时间
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢哪位知道stm32定时器配置是什么?
输入手机号码,报价结果将发送到您手机
装修顾问-馨馨
4年行业经验,24h可咨询
10秒闪电通过好友
报价短信已发送到您的手机
因材料品牌及工程量不同,具体报价以量房实测为准
稍候装修管家将回电您,免费提供装修咨询服务
您的装修预算约
*装修管家将回电您,免费提供装修咨询服务
*装修管家将回电您,免费提供装修咨询服务
*因材料品牌及工程量不同,具体报价以量房实测为准
装修顾问 -馨馨
(四年装修行业经验)
微信扫一扫
3.&您家小区名称 :&&
请选择您家的装修时间
哪位知道stm32定时器配置是什么?
提问者:贝德容| 地点:
| 浏览次数:
609| 时间:
我来帮他解答
还可以输入1500字
已有3条回答
回答数:8345
| 被采纳数:25
定义在定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例。
在TIMx_CR1中的CKD[1:0]可以由用户设置对输入信号的采样频率基准,有三种选择:
1)采样频率基准fDTS=定时器输入频率fCK_INT
2)采样频率基准fDTS=定时器输入频率fCK_INT/2
3)采样频率基准fDTS=定时器输入频率fCK_INT/4
回答数:5701
| 被采纳数:18
STM32的通用定时器是一个通过可编程预分频器(PSC)驱动的16 位自动装载计数器(CNT)构成。其中STM32F10X系列有高级控制定时器(TIM1和TIM8)、通用定时器(TIMx)、基本定时器(TIM6和TIM7)。定时器对我来说有三个用途:普通的定时器中断、产生PWM波、输入捕获。这一笔记主要讲普通定时器中 一、首先打开相应的时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 二、设置定时器TIM_TimeBaseInit初始化定时器的时间基数 void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct) 第一个参数用于选择TIM外设,可以是TIM3、TIM4、TIM5。 第二个参数是一个指向TIM_TimeBaseInitTypeDef的结构体指针,他包含了时间基数的配置信息。 typedef struct { u16 TIM_P u16 TIM_P u8 TIM_ClockD u16 TIM_CounterM } TIM_TimeBaseInitTypeD TIM_Period:设置自动重装载寄存器周期的值,0x0000到0xFFFF; TIM_Prescaler: 设置定时器的预分频系数, 0x0000到0xFFFF; TIM_ClockDivision:设置时钟分频系数,TIM_CKD_DIVx (x = 1、2、4); TIM_CounterMode:定时器计数方式,因人而异,我一般使用向上计数
回答数:11230
| 被采纳数:13
2V-3.6V供电
容忍5V的I/O管脚
优异的安全时钟模式
带唤醒功能的低功耗模式
内部RC振荡器
内嵌复位电路
工作温度范围:
-40°C至+85°C或105°C
36MHz CPU 多达16K字节SRAM 1x12位ADC温度传感器
内核:ARM32位Cortex-M3 CPU,最高工作频率72MHz,1.25DMIPS/MHz。单周期乘法和硬件除法。
存储器:片上集成32-512KB的Flash存储器。6-64KB的SRAM存储器。
时钟、复位和电源管理:2.0-3.6V的电源供电和I/O接口的驱动电压。POR、PDR和可编程的电压探测器(PVD)。4-16MHz的晶振。内嵌出厂前调校的8MHz RC振荡电路。内部40 kHz的RC振荡电路。用于CPU时钟的PLL。带校准用于RTC的32kHz的晶振。
低功耗:3种低功耗模式:休眠,停止,待机模式。为RTC和备份寄存器供电的VBAT。
调试模式:串行调试(SWD)和JTAG接口。
DMA:12通道DMA控制器。支持的外设:定时器,ADC,DAC,SPI,IIC和UART。
3个12位的us级的A/D转换器(16通道):A/D测量范围:0-3.6 V。双采样和保持能力。片上集成一个温度传感器。
2通道12位D/A转换器:STM32F103xC,STM32F103xD,STM32F103xE独有。
最多高达112个的快速I/O端口:根据型号的不同,有26,37,51,80,和112的I/O端口,所有的端口都可以映射到16个外部中断向量。除了模拟输入,所有的都可以接受5V以内的输入。
最多多达11个定时器:4个16位定时器,每个定时器有4个IC/OC/PWM或者脉冲计数器。2个16位的6通道高级控制定时器:最多6个通道可用于PWM输出。2个看门狗定时器(独立看门狗和窗口看门狗)。Systick定时器:24位倒计数器。2个16位基本定时器用于驱动DAC。跟着项目走很多东西学的都都点混乱,基本上是用什么看什么,也没有个基本的章法,今天用了定时器,看到个说的比较不错的,转载如下:
原文地址:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
1.&&&&&STM32的Timer简介
STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的8个定时器。
计数器分辨率
计数器类型
预分频系数
产生DMA请求
捕获/比较通道
向上,向下,向上/向下
1-65536之间的任意数
向上,向下,向上/向下
1-65536之间的任意数
1-65536之间的任意数
其中TIM1和TIM8是能够产生3对PWM互补输出的高级登时其,常用于三相电机的驱动,时钟由APB2的输出产生。TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。由于STM32的TIMER功能太复杂了,所以只能一点一点的学习。因此今天就从最简单的开始学习起,也就是TIM2-TIM5普通定时器的定时功能。
2.&&&&&普通定时器TIM2-TIM5
2.1&&&&时钟来源
计数器时钟可以由下列时钟源提供:
&内部时钟(CK_INT)
&外部时钟模式1:外部输入脚(TIx)
&外部时钟模式2:外部触发输入(ETR)
&&&&&&&&内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。
&&&&由于今天的学习是最基本的定时功能,所以采用内部时钟。TIM2-TIM5的时钟不是直接来自于APB1,而是来自于输入为APB1的一个倍频器。这个倍频器的作用是:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其他数值时(即预分频系数为2、4、8或16),这个倍频器起作用,定时器的时钟频率等于APB1的频率的2倍。APB1的分频在STM32_SYSTICK的学习笔记中有详细描述。通过倍频器给定时器时钟的好处是:APB1不但要给TIM2-TIM5提供时钟,还要为其他的外设提供时钟;设置这个倍频器可以保证在其他外设使用较低时钟频率时,TIM2-TIM5仍然可以得到较高的时钟频率。
2.2&&&&计数器模式
TIM2-TIM5可以由向上计数、向下计数、向上向下双向计数。向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器内容),然后重新从0开始计数并且产生一个计数器溢出事件。在向下模式中,计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。而中央对齐模式(向上/向下计数)是计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。
2.3&&&&编程步骤
1.&&&&&&&配置系统时钟;
2.&&&&&&&配置NVIC;
3.&&&&&&&配置GPIO;
4.&&&&&&&配置TIMER;
其中,前3项在前面的笔记中已经给出,在此就不再赘述了。第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的参数如下表:
TIM_ClockDivision
TIM_CKD_DIV1
tDTS = Tck_tim
TIM_CKD_DIV2
tDTS = 2 * Tck_tim
TIM_CKD_DIV4
tDTS = 4 * Tck_tim
数字滤波器(ETR,TIx)是为了将ETR进来的分频后的信号滤波,保证通过信号频率不超过某个限定。
步骤(7)中需要禁止使用预装载缓冲器。当预装载缓冲器被禁止时,写入自动装入的值(TIMx_ARR)的数值会直接传送到对应的影子寄存器;如果使能预加载寄存器,则写入ARR的数值会在更新事件时,才会从预加载寄存器传送到对应的影子寄存器。
ARM中,有的逻辑寄存器在物理上对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器);设计preload register和shadow register的好处是,所有真正需要起作用的寄存器(shadow register)可以在同一个时间(发生更新事件时)被更新为所对应的preload register的内容,这样可以保证多个通道的操作能够准确地同步。如果没有shadow register,或者preload register和shadow register是直通的,即软件更新preload register时,同时更新了shadow register,因为软件不可能在一个相同的时刻同时更新多个寄存器,结果造成多个通道的时序不能同步,如果再加上其它因素(例如中断),多个通道的时序关系有可能是不可预知的。
3.&&&&&程序源代码
本例实现的是通过TIM2的定时功能,使得LED灯按照1s的时间间隔来闪烁
#include "stm32f10x_lib.h"
void RCC_cfg();
void TIMER_cfg();
void NVIC_cfg();
void GPIO_cfg();
int main()
&&&&&&&RCC_cfg();
&&&&&&&NVIC_cfg();
&&&&&&&GPIO_cfg();
&&&&&&&TIMER_cfg();
&&&&&&&//开启定时器2
&&&&&&&TIM_Cmd(TIM2,ENABLE);
&&&&&&&while(1);
void RCC_cfg()
&&&&&&&//定义错误状态变量
&&&&&&&ErrorStatus HSEStartUpS
&&&&&&&//将RCC寄存器重新设置为默认值
&&&&&&&RCC_DeInit();
&&&&&&&//打开外部高速时钟晶振
&&&&&&&RCC_HSEConfig(RCC_HSE_ON);
&&&&&&&//等待外部高速时钟晶振工作
&&&&&&&HSEStartUpStatus = RCC_WaitForHSEStartUp();
&&&&&&&if(HSEStartUpStatus == SUCCESS)
&&&&&&&&&&&&&&//设置AHB时钟(HCLK)为系统时钟
&&&&&&&&&&&&&&RCC_HCLKConfig(RCC_SYSCLK_Div1);
&&&&&&&&&&&&&&//设置高速AHB时钟(APB2)为HCLK时钟
&&&&&&&&&&&&&&RCC_PCLK2Config(RCC_HCLK_Div1);
&&&&&&&&&&&&&&//设置低速AHB时钟(APB1)为HCLK的2分频
&&&&&&&&&&&&&&RCC_PCLK1Config(RCC_HCLK_Div2);
&&&&&&&&&&&&&
&&&&&&&&&&&&&&//设置FLASH代码延时
&&&&&&&&&&&&&&FLASH_SetLatency(FLASH_Latency_2);
&&&&&&&&&&&&&&//使能预取指缓存
&&&&&&&&&&&&&&FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
&&&&&&&&&&&&&&//设置PLL时钟,为HSE的9倍频&8MHz * 9 = 72MHz
&&&&&&&&&&&&&&RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
&&&&&&&&&&&&&&//使能PLL
&&&&&&&&&&&&&&RCC_PLLCmd(ENABLE);
&&&&&&&&&&&&&&//等待PLL准备就绪
&&&&&&&&&&&&&&while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
&&&&&&&&&&&&&&//设置PLL为系统时钟源
&&&&&&&&&&&&&&RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
&&&&&&&&&&&&&&//判断PLL是否是系统时钟
&&&&&&&&&&&&&&while(RCC_GetSYSCLKSource() != 0x08);
&&&&&&&//允许TIM2的时钟
&&&&&&&RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
&&&&&&&//允许GPIO的时钟
&&&&&&&RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
void TIMER_cfg()
&&&&&&&TIM_TimeBaseInitTypeDef TIM_TimeBaseS
&&&&&&&//重新将Timer设置为缺省值
&&&&&&&TIM_DeInit(TIM2);
&&&&&&&//采用内部时钟给TIM2提供时钟源
&&&&&&&TIM_InternalClockConfig(TIM2);
&&&&&&&//预分频系数为36000-1,这样计数器时钟为72MHz/36000 = 2kHz
&&&&&&&TIM_TimeBaseStructure.TIM_Prescaler = 36000 - 1;
&&&&&&&//设置时钟分割
&&&&&&&TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
&&&&&&&//设置计数器模式为向上计数模式
&&&&&&&TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
&&&&&&&//设置计数溢出大小,每计2000个数就产生一个更新事件
&&&&&&&TIM_TimeBaseStructure.TIM_Period = 2000 - 1;
&&&&&&&//将配置应用到TIM2中
&&&&&&&TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
&&&&&&&//清除溢出中断标志
&&&&&&&TIM_ClearFlag(TIM2, TIM_FLAG_Update);
&&&&&&&//禁止ARR预装载缓冲器
&&&&&&&TIM_ARRPreloadConfig(TIM2, DISABLE);
&&&&&&&//开启TIM2的中断
&&&&&&&TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
void NVIC_cfg()
&&&&&&&NVIC_InitTypeDef NVIC_InitS
&&&&&&&&//选择中断分组1
&&&&&&&&NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
&&&&&&&&//选择TIM2的中断通道
&&&&&&&&NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQC&&&&&&
&&&&&&&&//抢占式中断优先级设置为0
&&&&&&&&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
&&&&&&&//响应式中断优先级设置为0
&&&&&&&&NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
&&&&&&&&//使能中断
&&&&&&&&NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
&&&&&&&&NVIC_Init(&NVIC_InitStructure);
void GPIO_cfg()
&&&&&&&GPIO_InitTypeDef GPIO_InitS
&&&&&&&GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;&&&&&&&&&&&&&&&&&//选择引脚5
&&&&&&&GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50MHz
&&&&&&GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //带上拉电阻输出
&&&&&&&GPIO_Init(GPIOB,&GPIO_InitStructure);
在stm32f10x_it.c中,我们找到函数TIM2_IRQHandler(),并向其中添加代码
void TIM2_IRQHandler(void)
&&&&&&&u8 ReadV
&&&&&&&//检测是否发生溢出更新事件
&&&&&&&if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
&&&&&&&&&&&&&&//清除TIM2的中断待处理位
&&&&&&&&&&&&&&TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);
&&&&&&&&&&&&&&//将PB.5管脚输出数值写入ReadValue
&&&&&&&&&&&&&&ReadValue = GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5);
&&&&&&&&&&&&&
&&&&&&&&&&&&&&if(ReadValue == 0)
&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&GPIO_SetBits(GPIOB,GPIO_Pin_5);
&&&&&&&&&&&&&&}&&&&
&&&&&&&&&&&&&&else
&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&GPIO_ResetBits(GPIOB,GPIO_Pin_5);&&&&&&
&&&&&&&&&&&&&&}
阅读(...) 评论()

我要回帖

更多关于 stm32定时器中断 的文章

 

随机推荐