问题描述
我正在为一种单线通信协议编写底层驱动程序。该线连接到内部时钟为8Mhz的STM32F0 micro的Tx引脚和Rx引脚。在定时器中断中设置Tx引脚状态,在外部GPIO中断中读取Rx引脚。
为了进行测试,我将Tx引脚切换为416µs(自动重载值为3333,没有预分频器),在GPIO中断中,我读取了两个连续中断之间的时序差异。从“高到低”转换中断到“低到高”转换中断的测量时间大约为500µs,从“低到高”转换中断到“高到低”转换中断的测量时间大约为300µs。为什么会有这样的差异?以及如何摆脱它?
我已经检查了示波器上的信号,它是脉冲宽度为416µs的完美方波。我还使用htim->Instance->CNT = 0;
和time = htim->Instance->CNT;
来包装代码的不同部分,以找出差异的出处,但无济于事。
这是中断句柄,测量的时间保存在tim3_value
变量中:
void TIM2_IRQHandler(void)
{
if (__HAL_TIM_GET_FLAG(&htim2,TIM_FLAG_UPDATE) != RESET)
{
if (__HAL_TIM_GET_IT_SOURCE(&htim2,TIM_IT_UPDATE) != RESET)
{
__HAL_TIM_CLEAR_FLAG(&htim2,TIM_FLAG_UPDATE);
HAL_GPIO_TogglePin(TX_GPIO_Port,TX_Pin);
htim2.Instance->ARR = 3333;
}
}
return;
}
void EXTI4_15_IRQHandler(void)
{
if(__HAL_GPIO_EXTI_GET_IT(RX_Pin) != 0x00u)
{
__HAL_GPIO_EXTI_CLEAR_IT(RX_Pin);
tim3_value = htim3.Instance->CNT;
htim3.Instance->CNT = 0;
}
return;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)