hal库串口dma卡死_低功耗蓝牙BLE 4.1 协议栈实现串口DMA模式传输数据通信

本文介绍了如何在BLE 4.1协议栈中实现串口DMA模式传输数据通信,重点是针对HAL库串口DMA卡死问题的解决。通过修改协议栈代码,设置HAL_UART=TRUE,更新HalUARTInitDMA函数以支持串口0的Alt2方式,并在NPI_InitTransport中配置波特率和关闭流控,实现了串口的正确初始化。同时添加了串口回调函数以确保数据传输的正常进行。
摘要由CSDN通过智能技术生成

蓝牙 BLE BLE-CC254x-1.4.1.43908协议栈串口默认是串口0,RX和TX引脚分别是P0_2和P0_3,硬件板子改板成串口0的Alt2方式,即RX和TX引脚分别是P1_4和P1_5。如图:

7e88c30cf82cfc0618ff4012bb5d23ba.png

需要修改协议栈的部分代码才可以使用串口0 Alt2方式传输数据。

1.Option-c/c++ Compiler Preprocessor-Defined symbols添加宏编译定义: HAL_UART=TRUE

xPOWER_SAVING

2._hal_uart_dma.c文件里面对HalUARTInitDMA串口初始化函数,改为Alt. 2方式。

#if (HAL_UART_DMA == 1)

// PERCFG &= ~HAL_UART_PERCFG_BIT; // Set UART0 I/O to Alt. 1 location on P0.

PERCFG |= HAL_UART_PERCFG_BIT; // Set UART1 I/O to Alt. 2 location on P1.

#endif

还要修改相关串口硬件引脚和寄存器:

#if (HAL_UART_DMA == 1)

#define PxSEL P1SEL

#define HAL_UART_PERCFG_BIT 0x01 // USART0 on P0, Alt-1; so clear this bit.

#define HAL_UART_PRIPO 0x00 // USART0 priority over UART1.

#define HAL_UART_Px_CTS 0x04//0x10 // Peripheral I/O Select for CTS flow control.

#define HAL_UART_Px_RTS 0x08//0x20 // Peripheral I/O Select for RTS must be manual.

#define HAL_UART_Px_SEL 0x30//0x0C // Peripheral I/O Select for Rx/Tx.

3.在NPI_InitTransport初始化函数里面确认波特率和关掉流控:

#if !defined( NPI_UART_FC )

#define NPI_UART_FC FALSE

#endif

4.在初始化函数中添加串口回调函数;

NPI_InitTransport(NpiSerialCallback);

//NPI_WriteTransport("123

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值