設置 | 登錄 | 註冊

目前共有8篇帖子。

STM32F407ZG單片機UART驅動CYWL6208-GS藍牙模塊成功

1樓 巨大八爪鱼 2025-12-21 21:59
在Keil MDK V5.18a環境下,用的是M4版本的libbtstack.ar庫。
2樓 巨大八爪鱼 2025-12-21 22:00

3樓 巨大八爪鱼 2025-12-21 22:01
4樓 巨大八爪鱼 2025-12-21 22:01
5樓 巨大八爪鱼 2025-12-21 22:03

STM32CubeMX工程修改過程:

【stm32_cyhal_uart.c】

注釋掉第194和199行的HAL_UARTEx_SetTxFifoThreshold。

注釋掉第204行的HAL_UARTEx_DisableFifoMode。

第208行if (__HAL_UART_GET_IT(obj->huart, UART_IT_RXNE))改成if (__HAL_UART_GET_FLAG(obj->huart, UART_FLAG_RXNE))。

第211行__HAL_UART_SEND_REQ(obj->huart, UART_RXDATA_FLUSH_REQUEST)改成__HAL_UART_FLUSH_DRREGISTER(obj->huart)。

第615行obj->context.rxBufIdx = obj->huart->NbRxDataToProcess改成=1。

第709行obj->huart->RxISR改成stm32_cyhal_uart_RxISR,並在所在的函數(第687行)上方聲明

extern void (*stm32_cyhal_uart_RxISR)(UART_HandleTypeDef *huart);

第713行USART_CR1_RXNEIE_RXFNEIE改成USART_CR1_RXNEIE。

用/**/注釋掉第870-900行的下面兩個語句塊。

if ((event & CYHAL_UART_IRQ_RX_FULL) != (uint32_t)CYHAL_UART_IRQ_NONE)

if ((event & CYHAL_UART_IRQ_TX_EMPTY) != (uint32_t)CYHAL_UART_IRQ_NONE)

第913行obj->huart->RxISR改成stm32_cyhal_uart_RxISR。

第916和921行USART_CR1_RXNEIE_RXFNEIE改成USART_CR1_RXNEIE。

注釋掉第1011-1013行整個case 7U:語句。


【cyabs_freertos_helpers.c】

去掉第72行vApplicationGetIdleTaskMemory和第105行vApplicationGetTimerTaskMemory前面的__WEAK。


【stm32f4xx_hal_uart.c】

第305和3731行UART_SetConfig函數前面的static void改成HAL_StatusTypeDef,並在函數內容的最後加上return HAL_OK。


【wifi_bt_if.c】

注釋掉第95-101行整個if (stm32_cypal_sdio_hw_init(hsdio) == 0u)語句塊。


【btfw.c】

替換成正確的藍牙固件。替換前的c文件大小是31113位元組,替換後是223498位元組。


【libbtstack.ar】

替換成適用於CortexM4核的藍牙協議棧庫文件。

注意STM32H7和STM32F4用的libbtstack.ar是不一樣的。

H7的libbtstack.ar大小是926608位元組,而F4的libbtstack.ar大小是925964位元組。


【main.c】

在int main(void)上方添加串口列印函數。

/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */

int fputc(int ch, FILE *fp)

{

  if (ch == '\n')

    HAL_UART_Transmit(&huart1, (uint8_t *)"\r\n", 2, HAL_MAX_DELAY);

  else

    HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);

  return ch;

}

/* USER CODE END 0 */


【startup_stm32f407xx.s】

Heap_Size改成0x2000,避免wiced_bt_create_heap失敗導致no Default heap錯誤。


【stm32f4xx_hal_conf.h】

第193行USE_HAL_UART_REGISTER_CALLBACKS的值改成1。


【stm32f4xx_it.c】

USART2_IRQHandler函數外面加上:

#include "platform_hal_wrapper.h"

extern hci_uart_cb_t hci_uart_cb;

void (*stm32_cyhal_uart_RxISR)(UART_HandleTypeDef *huart);


函數裡面的HAL_UART_IRQHandler語句前加上:

  /* USER CODE BEGIN USART2_IRQn 0 */

  if (__HAL_UART_GET_IT_SOURCE(&huart2, UART_IT_RXNE) != RESET && __HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE) != RESET)

  {

    if (hci_uart_cb.inited && stm32_cyhal_uart_RxISR != NULL)

    {

      stm32_cyhal_uart_RxISR(&huart2);

      return;

    }

  }

  /* USER CODE END USART2_IRQn 0 */

6樓 巨大八爪鱼 2025-12-21 22:53


7樓 巨大八爪鱼 2025-12-21 23:12

STM32F4用的M4版本的libbtstack.ar文件大小是925964位元組。

8樓 巨大八爪鱼 2025-12-21 23:15

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張