0
我有一个关于我的stm32f10控制器的定时器中断的问题。 当我启用状态寄存器设置为 0x1F的,因为以下标志设置定时器的计数器:UIF,CC1IF,CC2IF,CC3IF,CC4IFSTM32F10X定时器
这里是我做的:
#include <Compiler.h>
#include <Debug.h>
#include <STM32F10xxx.h>
#include <Reset.h>
#include "Example.h"
#include <HW_TIM.h>
#include <HW_NVIC.h>
#include <HW_RCC.h>
#include <RegBit.h>
unsigned volatile int sr =0;
static void SetBASEPRI(WORD const basepriVal) {
register WORD basepriReg __asm("basepri");
basepriReg = basepriVal;
}
static void SetCONTROL(WORD const controlVal) {
register WORD controlReg __asm("control");
controlReg = controlVal;
}
static void MainInit(void) {
STM32F10xxx_Config();
SetBASEPRI(0U);
PeripheryEnable(RCC_TIM2);
SET_RBINDEX_REG_BIT(TIM, 2, DIER, UIE);
SET_RBINDEX_REG_BIT(TIM, 2, DIER, CC1IE);
SET_RBINDEX_REG_BIT(TIM, 2, DIER, CC2IE);
SET_RBINDEX_REG_BIT(TIM, 2, DIER, CC3IE);
SET_RBINDEX_REG_BIT(TIM, 2, DIER, CC4IE);
InterruptEnable(NVIC_TIM2);
SetCONTROL(1U);
}
void timInit(void){
TIM2.PSC = 0x0024;
TIM2.ARR = 0xFFFF;
TIM2.CCR[0] = 0x00FF;
TIM2.CCR[1] = 0x0A00;
TIM2.CCR[2] = 0x0F00;
TIM2.CCR[3] = 0xF000;
SET_RBINDEX_REG_BIT(TIM, 2, CR1, CEN);
}
__declspec(noreturn) int main() {
MainInit();
timInit();
while(1);
}
void IRQ_TIM2(void){
//Delet IFs in SR
//trying to clear SR by reading the register
sr = TIM2.SR;
sr= GET_RBINDEX_REG_BIT(TIM,2,SR,UIF);
//trying to clear SR by resetting the single bits
RES_RBINDEX_REG_BIT(TIM, 2, SR, CC1IF);
RES_RBINDEX_REG_BIT(TIM, 2, SR, CC2IF);
RES_RBINDEX_REG_BIT(TIM, 2, SR, CC3IF);
RES_RBINDEX_REG_BIT(TIM, 2, SR, CC4IF);
RES_RBINDEX_REG_BIT(TIM, 2, SR, UIF);
//trying to clear SR bei assigning 0 to SR
TIM2.SR=0;
}
void IRQ_SysTick(void){
}
void IRQ_HrdFault(void) { for (;;) DEBUG_BREAK(1); }
void IRQ_UsgFault(void) { for (;;) DEBUG_BREAK(1); }
void IRQ_BusFault(void) { for (;;) DEBUG_BREAK(1); }
void IRQ_MemFault(void) { for (;;) DEBUG_BREAK(1); }
void IRQ_NMI(void) { for (;;) DEBUG_BREAK(1); }
正如我所说的,问题在于,当计数器使能位(CEN)被置位时,所有的标志都被置位。我不能在子程序中删除它们。