STM32 Keil-调试时无法访问目标(AT Command UART)

问题描述 投票:1回答:1

我正在尝试通过UART通信与GSM模块进行通信。我可以按预期从模块中获取消息。但是,当谈到while循环(它为空)时,调试会话以“无法访问目标”错误结束。逐步,我将分享我的代码:

功能1为AT_Send。 (注意:有些变量是全局声明的。)

int AT_Send(UART_HandleTypeDef *huart, ATHandleTypedef *hat, unsigned char *sendBuffer, uint8_t ssize, unsigned char *responseBuffer, uint8_t rsize) {

    if (HAL_UART_Transmit_IT(huart,sendBuffer,ssize) != HAL_OK) {
        return -1;
    }

    while ((HAL_UART_GetState(huart) & HAL_UART_STATE_BUSY_TX) == HAL_UART_STATE_BUSY_TX) {
        continue;
    }

    //;HAL_Delay(1000);
    if (strstr((char*)receiveBuffer,(char*)responseBuffer) != NULL) {
     rxIndex = 0;
     memset(command, 0, sizeof(command));
     return 0;
   }
   rxIndex = 0;
   memset(command, 0, sizeof(command));

    return 1;
}

第二个功能是AT_Init功能。它发送AT以获得OK响应。在这一点上,如果我没记错的话,我正在打开接收中断,并尝试获取1个字节。

int AT_Init(UART_HandleTypeDef *huart, ATHandleTypedef *hat)
{
    HAL_UART_Receive_IT(huart,&rData,1);
    tx = AT_Send(huart,hat,"AT\r",sizeof("AT\r\n"),"OK\r\n",sizeof("OK\r\n"));

    return tx;
}

这两个功能之后,当总线上有数据时,我在回叫中调用接收IT功能。

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if (huart->Instance == USART1){
        command[rxIndex] = rData;
        rxIndex++;

        if((rxIndex == 2) && (strstr((char*)command,"\r\n") != NULL)) {
            rxIndex = 0;
        } else if (strstr((char*)command,"\r\n") != NULL) {
            memcpy(receiveBuffer, command, sizeof(command));
            rxIndex = 0;
            memset(command,0,sizeof(command));
        }
        HAL_UART_Receive_IT(&huart1,&rData,1);
    }

}

此外,如果可以解决这个问题,我将同时发送一些HTTP命令。谁能分享他/她的知识?

编辑:主要功能如下所示

  tx = AT_Init(&huart1,&hat);
  while (1)
  {
    HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_3);
    HAL_Delay(500);
  }

编辑2:我用USART2替换了uart通道,调试器工作了。我想这与硬件有关。不过,我对导致此问题的可能原因感到好奇。

stm32 uart at-command keil
1个回答
0
投票

您是否已从控制器中阅读了勘误表?您如何初始化中断(NVIC)?您使用哪种编译器优化?

© www.soinside.com 2019 - 2024. All rights reserved.