两种方式:
查看datasheet,明确哪些定时器是存在的。
查看stm32f1xx.h之类的头文件,里面针对每个型号,有对应的IRQn定义,没有出现的就是不支持的。随便给你截个图,你可以看一下
之所以你说设置定时器5的寄存器没报错,那是因为f1系列都是用的同一套库函数,直接操作寄存器肯定是可以的。
不知道你要用什么来定时,我平常用内核定时器Systick
//----设置Systick的时钟,时钟源为HCLK/8 = 72MHz,开启中断------------------------------
const unsigned long System_Clock = 72MHz
SysTick-LOAD = System_Clock /8000;
SysTick-VAL = 0;
SysTick-CTRL = 0x00000003;
这里面,System_Clock不一定要72MHz,要根据你的实际的运行情况来定.
后面那个 8000是固定的,当然,你还可以这样写:
SysTick-LOAD = System_Clock /1000;
SysTick-VAL = 0;
SysTick-CTRL = 0x00000007;
配置完成后,中断处理函数在Stm32f10x_it.c的
SysTick_Handler()
以STM32F103VB系列为例,100pin, 一般我们通常使用的IO对应外部中断线如下: PA0,PB0,PC0,PD0,PE0 对应的是EXTI0中断线; 以此类推 到PA15,PB15,PC15,PD15,PE15对应EXTI5中断线。
STM32里面EXTI0 – EXTI4这5个外部中断有着自己的单独的中断就表示哪个中断被触发。
你打开stm32的启动文件,例如startup_stm32f10x_hd.s 里面有很多中断跳转的入口。用白话说就是固件库帮你写好了发生什么中断时跳转到哪里,这些名字是一个函数名,你要把这些函数写出来,然后中断来了stm32就跳到这样函数名的函数里面来。
STM32 定时器是16位的吧 按你的晶振 和分频 最大65536*0.1ms=6.5536s 单个的话怎么整。。达到8s应该也是可以的,不过分频得增加,但是那样就没72的倍数啦 可能有点误差,你这思路很简单啊,开俩个定时器,第一个定时器在初始化的时候就给他使能,即开始计数,在该定时器的中断函数里面把该定时器关了 并对另一个定时器使能,在另一个定时器的中断函数里同样,对第一个定时器使能,并关闭自己,每个定时器的时间根据你要亮灭来调ARR寄存器的值,
void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET){
TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
LED1=~LED1;
TIM_Cmd(TIM4,DISABLE);
TIM_Cmd(TIM3,ENABLE);
}
}
中断函数大概就这么写,其他的初始化都是直接调库就是了 没必要贴了 主函数里面一开始直接给灯点亮,再吊用俩个初始化就可以了
打开103的启动文件starup_stm32f10x_md.s,
DCD TIM1_BRK_IRQHandler ; TIM1 Break
DCD TIM1_UP_IRQHandler ; TIM1 Update
DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation
DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
DCD TIM2_IRQHandler ; TIM2
DCD TIM3_IRQHandler ; TIM3
DCD TIM4_IRQHandler ; TIM4
这里面只有TIM1-TIM4的定时器中断事件,TIM6是没有中断响应这个功能的。
上面的 NVIC中断事件,要从starup_stm32f10x_md.s这里面找的,不能自己定义这上面没有的中断事件。
如果对你有帮助的话,给分吧。。。
你好,我在贴吧看到你提的同样问题,很高兴为你解答;
@arg RTC_IT_TS: Time Stamp interrupt
* @arg RTC_IT_WUT: WakeUp Timer interrupt
* @arg RTC_IT_ALRB: Alarm B interrupt
* @arg RTC_IT_ALRA: Alarm A interrupt
* @arg RTC_IT_TAMP: Tamper event interrupt
你可以用TS中断,参考库中TimeStamp例程。
希望我的回答对你的问题有帮助。
不明白的继续问我,如果可以请采纳,非常感谢。满意请采纳,谢谢。
本文标签:stm32f1秒中断