作者共发了8篇帖子。 字体大小:较小 - 100% (默认)▼  内容转换:不转换▼
 
点击 回复
34 7
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
 

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:34 回复数:7
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2025-12-21 23:15
 
©2010-2025 Purasbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。