例程里是用CCR1得到电容充电值,我想在TIM2的中断里得到这个值,现在的情况是不进TIM2中断,原子哥帮我看看问题出在哪里,是不是思路不行?
main函数:
int main()
{
Stm32_Clock_Init(336,8,2,7); //设置时钟,168Mhz
NVIC_SetPriorityGrouping(7 - 2);//
usart1_init(115200);
Tpad_Init(21, 0xffffffff);
while(1);
}
tpad.c文件:
u8 wait;
u8 start = 0xff;
u32 CNT[10];
void Tpad_Init(u16 psc, u32 arr)
{
u8 i;
u32 sum = 0;
//TIM2初始化
RCC->APB1ENR |= 0x01; //TIM2时钟使能
TIM2->DIER |= 0x01 << 1; //使能捕获中断
TIM2->CCMR1 |= 0x01; //输入,IC1映射到TI1上面
TIM2->CCER |= 0x01; //使能捕获模式
TIM2->PSC = psc; //设置分频
TIM2->ARR = arr; //设置计数
NVIC_SetPriority(TIM2_IRQn, NVIC_EncodePriority(7 - 2, 3, 3));
NVIC_EnableIRQ(TIM2_IRQn);
for(i = 0; i < 10; i++)
{
TIM2->CR1 &= ~0x01; //关闭定时器
wait = 1; //置等待下一次开始标志
RCC->AHB1ENR |= 0x01 << 5; //GPIOA时钟使能
GPIOA->MODER |= 0x01 << 10; //PA5通用输出
GPIOA->PUPDR |= 0x02 << 10; //PA5下拉电阻
GPIOA->BSRRH |= 0X01 << 5; //将PA5内部接地
systick_delayms(10); //等待放电完成
//PA5配置为复用,推挽,2MHZ,下拉电阻
GPIOA->MODER |= 0x02 << 10; //复用功能
GPIOA->AFR[0] &= 0xff0fffff;
GPIOA->AFR[0] |= 0xff1fffff; //配置为复用功能
TIM2->EGR |= 0x01; //重新初始化计数器
TIM2->CR1 |= 0x01; //使能计数器
while(wait);
}
start = 0;
Sort_Number(CNT);
for(i = 1; i < 9; i++)
{
sum = sum + CNT[i++] / 8;
}
printf("sum = %d
", sum);
}
TIM2中断函数
static u8 num = 0;
void TIM2_IRQHandler(void)
{
if(start == 0xff)
{
CNT[num++] = TIM2->CNT;
wait = 0;
}
TIM2->SR &= ~(0x01 << 1); //清中断
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>