STM32
直播中

小峰

12年用户 897经验值
私信 关注
[问答]

stm8s105k4用硬件示波器量,没有收到任何数据,但是一直进入到接收中断里去,为什么?

芯片是stm8s105k4,开发工具IAR
用硬件示波器量,没有收到任何数据,但是一直进入到接收中断里去,接收中断的代码如下

  • INTERRUPT_HANDLER(UART2_RX_IRQHandler, 21)
  • {
  •      UART2_ClearITPendingBit(UART2_IT_RXNE);
  •      g_s8ReceiveData[g_u8Index1] = UART2_ReceiveData8();
  •      //UART2_SendData8(UART2_ReceiveData8());

  •      /* 校验包 */
  •      DealReceiveData(g_s8ReceiveData[g_u8Index1], g_u8Index1);

  •          /* 获取下一个字符 */
  •      g_u8Index1++;

  • }

奇怪的现象是在DealReceiveData这个函数增加断点后,按F10单步执行,会走到g_u8Index1++;,但在下一步就会直接跳回DealReceiveData,上面的内容都没有被执行,这是为什么?

回帖(1)

张秀兰

2024-5-14 16:55:55
根据您提供的信息,您使用的是STM8S105K4芯片,开发工具为IAR。您遇到的问题是在硬件示波器上没有收到任何数据,但是接收中断(UART2_RX_IRQHandler)一直被触发。为了解决这个问题,我们可以按照以下步骤进行排查:

1. 检查硬件连接:首先,请确保您的硬件连接正确,包括UART2的TX和RX引脚是否正确连接到发送和接收设备。

2. 检查波特率设置:请检查您的UART2波特率设置是否与发送设备的波特率相匹配。波特率不匹配可能导致接收到的数据不正确或无法接收到数据。

3. 检查中断使能:请确保您已经正确配置了UART2的接收中断使能。在您的代码中,您已经清除了接收中断标志(UART2_ClearITPendingBit(UART2_IT_RXNE)),但是在中断触发之前,请确保已经使能了接收中断。

4. 检查中断优先级:请检查您的中断优先级设置是否正确。如果中断优先级设置不当,可能会导致中断服务例程(ISR)无法正确执行。

5. 检查接收缓冲区:请检查您的接收缓冲区(g_s8ReceiveData)是否足够大,以存储接收到的数据。如果缓冲区太小,可能会导致数据丢失。

6. 检查数据校验:您提到了“校验包”的代码被注释掉了,请确保您的数据校验逻辑是正确的,以便在接收到数据时能够正确处理。

7. 检查其他中断:请检查是否有其他中断可能会影响UART2_RX_IRQHandler的执行。如果有,请确保这些中断的优先级和触发条件设置正确。

8. 使用调试器:如果以上步骤都无法解决问题,建议您使用IAR的调试器逐步执行代码,以便更好地了解中断服务例程的执行情况。

通过以上步骤,您应该能够找到导致接收中断一直被触发的原因,并采取相应的措施解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分