STM32的TIM_ClearFlag TIM_ClearITPendingBit 区别

作者&投稿:怀范 (若有异议请与网页底部的电邮联系)
stm32通用定时器中TIM5和TIM2、TIM3、TIM4的区别??~

stm32具体哪个型号的ARM,有些型号是只有TIM1~TIM4的,你用TIM5肯定不能咯!

实际上两个函数实现的功能是一样的,都是清除相对应的标志位,只是标志位和中断位含义不一样,是标志位但是不一定会产生中断。例如:
#define ADC_IT_EOC ((uint16_t)0x0220)
#define ADC_IT_AWD ((uint16_t)0x0140)
#define ADC_IT_JEOC ((uint16_t)0x0480)
这是中断位,可以产生中断
#define ADC_FLAG_AWD ((uint8_t)0x01)
#define ADC_FLAG_EOC ((uint8_t)0x02)
#define ADC_FLAG_JEOC ((uint8_t)0x04)
#define ADC_FLAG_JSTRT ((uint8_t)0x08)
#define ADC_FLAG_STRT ((uint8_t)0x10)
这是标志位,有的标志位不能产生中断
标志位在程序中可以作为判定条件,支持程序的运行,中断则是跳转到中断函数执行。两个函数实现的功能是一样的,在中断程序中可以用两个中的任一个。我想区分两个函数是为了更清晰吧。
还有
#define ADC_IT_EOC ((uint16_t)0x0220)
#define ADC_FLAG_EOC ((uint8_t)0x02)
这两个数值不同是因为标志位只是为了清除标志位而设的,而中断位设置成这个值是因为在其他函数中这一位还有其他用途。而且还要注意:
void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)
{
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_CLEAR_FLAG(ADC_FLAG));
/* Clear the selected ADC flags */
ADCx->SR = ~(uint32_t)ADC_FLAG;
}
这一步 ADCx->SR = ~(uint32_t)ADC_FLAG;似乎应该是 ADCx->SR &= ~(uint32_t)ADC_FLAG;
其实状态位只能有硬件置位,软件只能读和清零,所以这样写也是正确的。
OK,问题总是越辩越清晰的。

参考了一下源代码
****************************************************************************************
02600 void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)
02601 {
02602 /* Check the parameters */
02603 assert_param(IS_TIM_ALL_PERIPH(TIMx));
02604 assert_param(IS_TIM_CLEAR_FLAG(TIM_FLAG));
02605
02606 /* Clear the flags */
02607 TIMx->SR = (uint16_t)~TIM_FLAG;
****************************************************************************************

02676 void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)
02677 {
02678 /* Check the parameters */
02679 assert_param(IS_TIM_ALL_PERIPH(TIMx));
02680 assert_param(IS_TIM_IT(TIM_IT));
02681 /* Clear the IT pending Bit */
02682 TIMx->SR = (uint16_t)~TIM_IT;
02683 }
****************************************************************************************
都是对同一个寄存器进行相同操作。。完全一样的……
就是说。。两个函数实现的功能是一样的。。
大概是为了适应不同的编程风格写成了两个函数吧。。我的理解……

TIM_TimeBaseStructure.TIM_Period = 0xFFFF; TIM_TimeBaseStructure.TIM_今天才开始学习STM32 请高手指教下 定时初值应该怎么算呀?中断里面应该怎么

hicZZ说的没错,一模一样的两个函数,本质上无任何区别。


stm32 TIM2中断为啥进不去??? 求大虾帮忙!!!
TIM_ClearFlag(TIM2, TIM_FLAG_Update);\/* 清除溢出中断标志 *\/ TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);\/\/使能 TIM2 中断源 TIM_Cmd(TIM2, ENABLE);\/\/总开关 TM2 开启 \/* 开启时钟 *\/ 参考资料:你是不是没有使能中断源? TIM_ITConfig ...

在STM32的RTC程序中, tm->tm_mday = day + 1; 这个日期为什么要加一呢...
tim 是一个时间计数,是从1900年0分0秒到现在的时间。所以转化从我们日常用的表示一般年要加上1900,月要加上1,而你这里for (i = 1; day >= days_in_month(i); i++) 表示月的i是从1开始的,tm_mon不是从0开始,所以day也要+1. 因为日常表示中没有0月0号,只有1月1号 ...

stm32跟普通的51单片机在程序编写方面有什么区别?
1、库函数不同。由ST厂商推出的STM32系列单片机,ST厂商给了丰富的函数库,可以直接使用库函数,所以比起普通的51单片机在程序编写方面要更加的省时。2、运行速度不同。普通的51单片机运行速度较慢,特别是双数据指针,而STM32系列单片机最高工作频率可达72MHz。3、便利程度不同。51单片机的任何器件只...

timplatform
还有~C:\\WINDOWS\\system32\\drivers\\usbine.sys是伪timplatform.exe是木马~usbine.sys病毒专杀,用这个办法很有效 http:\/\/soft.onexin.com\/soft\/4920.html

NBA历届MVP得主及其数据?
1958-1959 鲍勃-佩蒂特 圣路易斯鹰队 29.2分\/16.4板\/3.1助 1959-1960 维尔特-张伯伦 费城武士队 37.6分\/26.9板\/2.3助 1960-1961 比尔-拉塞尔 波士顿凯尔特人队 16.9分\/23.9板\/3.4助 1961-1962 比尔-拉塞尔 波士顿凯尔特人队 18.9分\/23.5板\/4.5助...

元素周期表怎么读?
51 Sb 锑 梯 121.8 5s2 5p3 主\/类 Antimony ['æntiməni] 52 Te 碲 帝 127.6 5s2 5p4 主\/类 Tellurium [te'ljuəriəm] 53 I 碘 典 126.9 5s2 5p5 -1 主\/非\/卤 Iodine ['aiəudi:n] 活泼 54 Xe 氙 仙 131.3 5s2 5p6 主\/非\/稀 Xenon ['zenɔn] 55 Cs 铯 色 ...

好听的日文歌
♬★05.我爱你---TIM★♬ http:\/\/210.124.186.184\/2\/HIGH_MP3\/362\/362023.mp3 ♬★06.藏在眼泪里的天空--기후(气候)★♬ http:\/\/210.124.186.184\/0\/HIGH_MP3\/352\/352429.mp3 ♬★07.我要爱你---玻璃箱子★♬ http:\/\/210.124.186.184\/0\/HIGH_MP3\/372\/372191.mp3 ♬★08.黑白照片-...

会东县15776794039: 已知STM32系统时钟为72MHz,采用定时器TIM产生周期为100ms的定时时间间隔并 -
国路复方: //定时100毫秒,在定时中断中将LED的相应管脚依次拉低或置高就可以了,这里是定时器配置, //中断函数应该会写吧*_* void Timer_Config(void) {RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);TIM_DeInit(TIM2);TIM_...

会东县15776794039: 怎样做到stm32 定时器 定时时间可调,(又不用初始化) -
国路复方: 设置一个变量,然后给定时器的计数器幅值的时候,把变量的高低字节赋给计数寄存器.而这个变量可以在程序中,通过按键改变(增减).这样就可以把时间可调.

会东县15776794039: 请问步进电机直接停还是需要先减速后停止吗 -
国路复方: 先减速后停好

会东县15776794039: 怎样停止stm32 tim中断 -
国路复方: TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //初始化TIM的时间计数数据 TIM_ClearFlag(TIM2, TIM_FLAG_Update); /* 清除溢出中断标志 */ TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //使能 TIM2 中断源 TIM_Cmd(TIM2, ENABLE); //总开关 ...

会东县15776794039: STM32如何读写芯片内部FLASH,要存几个变量? -
国路复方: 需要三个变量,程序如下所示:void write_buf(u32 addr,u8 *p,u16 n) { u32 r1; n=n/4;//擦除并写flash FLASH_Unlock();//FLASH解锁 FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_...

会东县15776794039: stm32如何在中断服务程序里关闭EXTI中断? -
国路复方: 那个中断已经被触发了,你要做的只有是清中断标志位: EXTI_ClearITPendingBit(EXTI_Line14); EXTI_ClearFlag(EXTI_Line14); 非要关的话,我觉得这样就关了 EXTI_InitStructure.EXTI_Line = EXTI_Line14; EXTI_InitStructure.EXTI_Mode = ...

会东县15776794039: stm32的flash如何进行读写操作最好是有例程 -
国路复方: void Flash_Erase(u32 StartAddr,u32 Size) { u32 Page=Size/FLASH_PAGE_SIZE; FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); FLASHStatus = FLASH_COMPLETE; ...

会东县15776794039: stm32 usart怎么发送一个数据包
国路复方: 在USART的发送端有2个寄存器,一个是程序可以看到的USART_DR寄存器,另一个是程序看不到的移位寄存器,对应USART数据发送有两个标志,一个是TXE=发送数据寄存器空,另一个是TC=发送结束. 当USART_DR中的数据传送到移位...

会东县15776794039: 请教香版和各位大侠STM32 定时捕获中断中溢出中断问题 -
国路复方: 溢出中断和更新中断是不同的中断,应该可以进溢出中断吧.两个中断都要使能,楼主试试.

会东县15776794039: 使用jlink调试一直运行不到断点,一般会是什么问题 -
国路复方: 你在中断里设一个断点,看看是不是进了中断后一直重复出不来,如果是的话,应该是定时中断标识没有清除TIM_ClearFlag(TIM2, TIM_FLAG_Update);一般来说,你设置完单定器和中断后,单片要过一段时间才能进入中断,所以你单步调试时...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网