你好,
我想计算GPIO引脚上的输入频率(输入频率约为50-150kHz)
我计划在上升沿使用GPIO中断,并对systick定时器进行计数以获得频率值。
但是,我无法从systick计时器获得正确的值,并且我不确定是否正确设置了GPIO中断
有人能帮我调试这个问题吗
一些乐趣()
{
//启动systick计时器
systick\u usec\u单位(假);
系统停止();
系统启动(90000,错误);
//启用GPIO
GPIO\ U重置IRQ(GPIO1\ U IRQn);
GPIO_EnableIRQ(GPIO_PORT_1,GPIO_PIN_1,GPIO1_IRQn,false,true,0);//要在上升沿信号上触发
GPIO_RegisterCallback(GPIO1_IRQn,app_btn_callback();
...
}
void app\u btn\u回调(void)
{
if(firstEdge==0)
{
firstEdge=1;
freqCount=SysTick->VAL;
}
其他的
{
freqCount=freqCount SysTick->VAL;
系统停止();
NVIC\u DisableIRQ(GPIO1\u IRQn);
}
NVIC\u ClearPendingIRQ(GPIO1\u IRQn);
}
设备:
嗨mharthikote,
错误的值是什么意思?期望值的误差是什么?
您是否考虑过轮询GPIO并启动systick,而不是等待中断发生,看看会发生什么?
谢谢你的对话
当输入频率大于100kHz时,我从systick定时器得到的值不正确….我是否正确设置了GPIO中断??
嗨mharthikote
似乎中断设置正确。
我认为不能正常工作的原因是你在使用中断,试试看查询pin码,看看会发生什么。
谢谢你的对话