我将如何使一个新的AT命令在无代码改变到BLE uart的波特率。
嗨ant777222,
无代码参考应用程序代码的开发是为了快速评估或执行一些基本的BLE功能,而不必深入到代码中。您需要实现的是可以实现的,但是您需要自己做一些工作并调试一些用户应用程序功能。看一看user_codeless.c中的函数void user_execute_commands(char* cmd)。这个函数接受一串分号分隔的AT命令,并逐个执行它们。USER_APP_CMD_RECEIVED被发送到内核。然后,检查user_catch_rest_hndl(),它处理USER_APP_CMD_RECEIVED消息。您的自定义AT命令应该添加到at_command_charactertics_t跳转表中。请遵循USE_AT_ADVSTART宏,它负责开始广告。此外,您应该注意如何在perip_init()函数中传递波特率。
谢谢,PM_Dialog
我做了一个命令,AT+BAUD=0。现在它所做的就是返回ok。我正在努力找出传递波特率到perip_init()的最佳方法,你会建议我怎么做?
请查看一下peripher_init()函数,您将看到UART2以57600波特率完成。只要发送适当的AT命令,就应该将波特率保存到一个变量中,并在uart2_init()中传递它。
现在,我在user_at_commands.c中有这段代码来更改波特率为115200。
# ifdef USE_AT_BAUDvoid user_at_BAUD(struct at_cmd_params_t* arg, char* reply_string){Uint8_t index = ahtoi(&arg->cmd_buffer[arg->arg_index[0]]); / /设置索引If (index == 3){uart2_init (UART_BAUDRATE_115K2 UART_CHARFORMAT_8);参数- > success_flag = true;}
}
# endif
然而,这会冻结终点站。当我将终端的波特率设置为115200时,它仍然被冻结。
您能分享一下您是如何使用自定义AT命令修改at_command_charactertics_t跳转表的吗?语法的描述如下所示:
既然你发送了AT+BAUD=0命令,你能不能在调试模式下运行它,以弄清是否触发了user_at_BAUD()回调函数?
我将以下代码添加到跳转表中。
# ifdef USE_AT_BAUD
{AT_BAUD, "BAUD", 4, user_at_BAUD, 1,1, RPLY_MAX_SIZE},
如果我将void user_at_random()中的代码放入我的void user_at_BAUD()并使用AT命令AT+BAUD=3,我将得到一个随机数,正如我所期望的。
如果我把这个添加到我的user_at_BAUD()函数,它不改变波特率,但保持它在57K6终端也冻结。
Uint8_t index = ahtoi(&arg->cmd_buffer[arg->arg_index[0]]); / /设置索引If (index == 3){uart2_init (UART_BAUDRATE_57K6 UART_CHARFORMAT_8);参数- > success_flag = true;
我还没有连接调试器,我正在等待我的IT部门连接正确的驱动程序。目前,与J3的连接仅作为电源。我已经将P0_4连接到Rx, P0_5连接到Tx, J4引脚2连接到COM端口的接地。这可能是问题所在吗?
所以我正在正确地改变波特率,然而,当我改变波特率时,键盘不能在终端中输入了。通过浅蓝色的应用程序,我仍然可以发送命令,例如在我改变波特率后输入管道命令。例如,如果我键入ATr,终端没有响应ok,我希望能够读取终端和连接的电话上的响应。我还想修复不能与键盘输入到终端后,改变波特率。
很抱歉耽搁了。既然波特率改变了,我想串行终端的波特率也应该改变。
我在改变终端的波特率。添加user_charachter_parser_start()解决了这个问题。
void user_at_BAUD(struct at_cmd_params_t* arg, char* reply_string){Uint8_t index = ahtoi(&arg->cmd_buffer[arg->arg_index[0]]); / /设置索引If (index == 5){uart2_init (UART_BAUDRATE_38K4 UART_CHARFORMAT_8);user_charachter_parser_start ();参数- > success_flag = true;}
很高兴您解决了问题,非常感谢您的提示。
嗨ant777222,
无代码参考应用程序代码的开发是为了快速评估或执行一些基本的BLE功能,而不必深入到代码中。您需要实现的是可以实现的,但是您需要自己做一些工作并调试一些用户应用程序功能。看一看user_codeless.c中的函数void user_execute_commands(char* cmd)。这个函数接受一串分号分隔的AT命令,并逐个执行它们。USER_APP_CMD_RECEIVED被发送到内核。然后,检查user_catch_rest_hndl(),它处理USER_APP_CMD_RECEIVED消息。您的自定义AT命令应该添加到at_command_charactertics_t跳转表中。请遵循USE_AT_ADVSTART宏,它负责开始广告。此外,您应该注意如何在perip_init()函数中传递波特率。
谢谢,PM_Dialog
我做了一个命令,AT+BAUD=0。现在它所做的就是返回ok。我正在努力找出传递波特率到perip_init()的最佳方法,你会建议我怎么做?
嗨ant777222,
请查看一下peripher_init()函数,您将看到UART2以57600波特率完成。只要发送适当的AT命令,就应该将波特率保存到一个变量中,并在uart2_init()中传递它。
谢谢,PM_Dialog
现在,我在user_at_commands.c中有这段代码来更改波特率为115200。
# ifdef USE_AT_BAUD
void user_at_BAUD(struct at_cmd_params_t* arg, char* reply_string)
{
Uint8_t index = ahtoi(&arg->cmd_buffer[arg->arg_index[0]]); / /设置索引
If (index == 3){
uart2_init (UART_BAUDRATE_115K2 UART_CHARFORMAT_8);
参数- > success_flag = true;
}
}
# endif
然而,这会冻结终点站。当我将终端的波特率设置为115200时,它仍然被冻结。
嗨ant777222,
您能分享一下您是如何使用自定义AT命令修改at_command_charactertics_t跳转表的吗?语法的描述如下所示:
既然你发送了AT+BAUD=0命令,你能不能在调试模式下运行它,以弄清是否触发了user_at_BAUD()回调函数?
谢谢,PM_Dialog
我将以下代码添加到跳转表中。
# ifdef USE_AT_BAUD
{AT_BAUD, "BAUD", 4, user_at_BAUD, 1,1, RPLY_MAX_SIZE},
# endif
如果我将void user_at_random()中的代码放入我的void user_at_BAUD()并使用AT命令AT+BAUD=3,我将得到一个随机数,正如我所期望的。
如果我把这个添加到我的user_at_BAUD()函数,它不改变波特率,但保持它在57K6终端也冻结。
Uint8_t index = ahtoi(&arg->cmd_buffer[arg->arg_index[0]]); / /设置索引
If (index == 3){
uart2_init (UART_BAUDRATE_57K6 UART_CHARFORMAT_8);
参数- > success_flag = true;
我还没有连接调试器,我正在等待我的IT部门连接正确的驱动程序。目前,与J3的连接仅作为电源。我已经将P0_4连接到Rx, P0_5连接到Tx, J4引脚2连接到COM端口的接地。这可能是问题所在吗?
所以我正在正确地改变波特率,然而,当我改变波特率时,键盘不能在终端中输入了。通过浅蓝色的应用程序,我仍然可以发送命令,例如在我改变波特率后输入管道命令。例如,如果我键入ATr,终端没有响应ok,我希望能够读取终端和连接的电话上的响应。我还想修复不能与键盘输入到终端后,改变波特率。
嗨ant777222,
很抱歉耽搁了。既然波特率改变了,我想串行终端的波特率也应该改变。
谢谢,PM_Dialog
我在改变终端的波特率。添加user_charachter_parser_start()解决了这个问题。
void user_at_BAUD(struct at_cmd_params_t* arg, char* reply_string)
{
Uint8_t index = ahtoi(&arg->cmd_buffer[arg->arg_index[0]]); / /设置索引
If (index == 5){
uart2_init (UART_BAUDRATE_38K4 UART_CHARFORMAT_8);
user_charachter_parser_start ();
参数- > success_flag = true;
}
嗨ant777222,
很高兴您解决了问题,非常感谢您的提示。
谢谢,PM_Dialog