2

我正在尝试从Nordic NRF52执行 AT 命令。我正在使用带有内置函数的Nordic UART 模块app_uart_put(uint8_t byte),该函数调用将 AT 命令放在 UART 上。接收 AT 命令的节点是一个EE-NBIoT 模块,它在 postfix 上触发\r\n。当我运行以下代码时,我得到了确定。

while (app_uart_put('A') != NRF_SUCCESS);
while (app_uart_put('T') != NRF_SUCCESS);
while (app_uart_put('+') != NRF_SUCCESS);
while (app_uart_put('C') != NRF_SUCCESS);
while (app_uart_put('F') != NRF_SUCCESS);
while (app_uart_put('U') != NRF_SUCCESS);
while (app_uart_put('N') != NRF_SUCCESS);
while (app_uart_put('=') != NRF_SUCCESS);
while (app_uart_put('1') != NRF_SUCCESS);
while (app_uart_put('\r') != NRF_SUCCESS);
while (app_uart_put('\n') != NRF_SUCCESS);

但是我想做一个更可重用的代码,所以我写了下面的writeCommand函数。

void writeCommand(char cmd[])
{   
 while (app_uart_put('A') != NRF_SUCCESS);
 while (app_uart_put('T') != NRF_SUCCESS);
 while (app_uart_put('+') != NRF_SUCCESS);

 uint8_t i;
 for(i = 0; cmd[i] != '\0'; i++){
     while (app_uart_put(cmd[i]) != NRF_SUCCESS);
 }

 while (app_uart_put('\r') != NRF_SUCCESS);
 while (app_uart_put('\n') != NRF_SUCCESS);
 nrf_delay_ms(100);
}

当我如下所示运行这个函数时,我得到了错误。

char cmd[] = "CFUN=1";
nrf_delay_ms(1000);
writeCommand(cmd);

为什么这不起作用?当我查看传出命令时,它们是相等的。

4

1 回答 1

0

从准备一张大 A3 纸开始,找一支红笔写 1000 次

我永远不会用nrf_delay_ms它来代替读取解析来自调制解调器的响应。

我永远不会用nrf_delay_ms它来代替读取解析来自调制解调器的响应。

我永远不会用nrf_delay_ms它来代替读取解析来自调制解调器的响应。

我永远不会用nrf_delay_ms它来代替读取解析来自调制解调器的响应。

我永远不会用nrf_delay_ms它来代替读取解析来自调制解调器的响应。

...

我简要查看了U-Blox Sara N210 的 AT 命令文档,虽然在介绍部分有点简短,但它看起来不错。我建议先阅读 V.250 规范,因为它更彻底。所以在写完你的 1000 句之后,阅读这个答案,首先按照关于 V.250 的说明,然后按照给定的代码结构实现一些东西,如何正确处理 AT 命令命令/响应文本。


当然,第一部分是为了搞笑,但我对其余部分非常认真;您有一些必须填补的巨大 AT 命令知识“漏洞”。除非您这样做,否则您将无法进行可靠的通信。这应该不是很困难,但需要一些努力。

于 2018-07-05T17:54:37.067 回答