如何使用stm32 HAL库通过UART发送AT命令 我试图用STAR32 HAL库,通过使用STM32 CuBeIDE和我的语言使用C++来连接到我的蓝牙和WiFi模块,因为GUI库(TouChgfx),在Windows上编译。

如何使用stm32 HAL库通过UART发送AT命令 我试图用STAR32 HAL库,通过使用STM32 CuBeIDE和我的语言使用C++来连接到我的蓝牙和WiFi模块,因为GUI库(TouChgfx),在Windows上编译。,stm32,uart,at-command,Stm32,Uart,At Command,为了提供正确的上下文,我使用了CubeMX来设置一切,我的所有管脚都已初始化,在将这些HAL函数放入程序之前,编译并运行时不会出错。只有当我加上 HAL_UART(&huartWifi, "AT+CWJAP=SSID,secretPassword", sizeof("AT+CWJAP=SSID,secretPassword"), HAL_MAX_DELAY); HAL_UART(&huartBluetooth, "AT+NAMEfriendlyName", sizeof("AT

为了提供正确的上下文,我使用了CubeMX来设置一切,我的所有管脚都已初始化,在将这些HAL函数放入程序之前,编译并运行时不会出错。只有当我加上

HAL_UART(&huartWifi, "AT+CWJAP=SSID,secretPassword", sizeof("AT+CWJAP=SSID,secretPassword"), HAL_MAX_DELAY);

HAL_UART(&huartBluetooth, "AT+NAMEfriendlyName", sizeof("AT+NAMEfriendlyName"), HAL_MAX_DELAY);
================结果================

编译时没有任何错误,我也没有看到任何运行时错误,但它不起作用,当我使用有限的远程调试工具集说它不起作用时,我可以看到我更改蓝牙模块名称的简单实验如下:

uint_8命令[]=“AT+NamefriendlyName”

不起作用也尝试在字符串结尾使用返回\r和\n。不确定HAL init函数中是否有需要初始化的内容

我的预期结果是程序编译,我可以在没有任何问题的情况下传递AT命令,并可能找到一个回调,这样我就可以读取这个设置是否正确,或者捕获任何错误,无论是对于这个特定调用,还是在将来执行高级HTTP请求时

请参阅下面的代码(如果此代码仅位于my main.cpp文件的int main部分中)

======================================================================================================================

static void MX_USART6_UART_Init(void)
{

  /* USER CODE BEGIN USART6_Init 0 */

  /* USER CODE END USART6_Init 0 */

  /* USER CODE BEGIN USART6_Init 1 */

  /* USER CODE END USART6_Init 1 */
  huart6.Instance = USART6;
  huart6.Init.BaudRate = 9600;
  huart6.Init.WordLength = UART_WORDLENGTH_8B;
  huart6.Init.StopBits = UART_STOPBITS_1;
  huart6.Init.Parity = UART_PARITY_NONE;
  huart6.Init.Mode = UART_MODE_TX_RX;
  // ORIGINAL huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE;
 huart6.Init.HwFlowCtl = UART_HWCONTROL_RTS;
  huart6.Init.OverSampling = UART_OVERSAMPLING_16;
  huart6.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart6.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart6) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART6_Init 2 */

  /* USER CODE END USART6_Init 2 */

}
static void MX_USART1_UART_Init(void)
{

  /* USER CODE BEGIN USART1_Init 0 */

  /* USER CODE END USART1_Init 0 */

  /* USER CODE BEGIN USART1_Init 1 */

  /* USER CODE END USART1_Init 1 */
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART1_Init 2 */

  /* USER CODE END USART1_Init 2 */

}
========================================================================================

static void MX_USART6_UART_Init(void)
{

  /* USER CODE BEGIN USART6_Init 0 */

  /* USER CODE END USART6_Init 0 */

  /* USER CODE BEGIN USART6_Init 1 */

  /* USER CODE END USART6_Init 1 */
  huart6.Instance = USART6;
  huart6.Init.BaudRate = 9600;
  huart6.Init.WordLength = UART_WORDLENGTH_8B;
  huart6.Init.StopBits = UART_STOPBITS_1;
  huart6.Init.Parity = UART_PARITY_NONE;
  huart6.Init.Mode = UART_MODE_TX_RX;
  // ORIGINAL huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE;
 huart6.Init.HwFlowCtl = UART_HWCONTROL_RTS;
  huart6.Init.OverSampling = UART_OVERSAMPLING_16;
  huart6.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart6.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart6) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART6_Init 2 */

  /* USER CODE END USART6_Init 2 */

}
static void MX_USART1_UART_Init(void)
{

  /* USER CODE BEGIN USART1_Init 0 */

  /* USER CODE END USART1_Init 0 */

  /* USER CODE BEGIN USART1_Init 1 */

  /* USER CODE END USART1_Init 1 */
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART1_Init 2 */

  /* USER CODE END USART1_Init 2 */

}

我把类型弄清楚了这是我的一个错误(深夜),但主要问题仍然是“如何使用HAL_UART_传输功能发送AT命令”没问题,让我帮你处理这个请求好吧,我添加了int主块,所有内容都是最初初始化的。另一个功能是我们正在设置huart6(我的蓝牙PIN)如果你仔细看,我在那里添加了一条注释并更改了一个值,你会在那里看到“原始”注释,我已经更改了它,并尝试了这两种方法,但仍然什么也得不到。如果你想要更多的代码,我可以给你。P.S.我的波特率对于蓝牙来说是正确的,我在这里使用蓝牙的唯一原因是因为它更容易测试(我可以扫描并查看更改的名称),一旦我验证了这一点,我会得到wifialso添加wifi+蓝牙作为完整的例子这两个uint_8不是一种类型,这就是现在代码中的内容,我可以无错误地编译。包括假定存在的\r。