zigbee修改协议栈:将uart1的引脚位置2改到位置1
参考http://home.eeworld.com.cn/home.php?mod=space&uid=720038&do=blog&id=726867
默认的zstack协议栈里只支持串口0备用位置1和串口2备用位置2
具体流程:hal_board_cfg.h文件PERCFG |= 0x02;改为PERCFG |= 0x00;
_hal_uart_dma.c文件把HAL_UART_DMA == 2条件下两处宏定义改了如下
//#elif (HAL_UART_DMA == 2)
//#define PxOUT P1
//#define PxIN P1
//#define PxDIR P1DIR
//#define PxSEL P1SEL
//#define UxCSR U1CSR
//#define UxUCR U1UCR
//#define UxDBUF U1DBUF
//#define UxBAUD U1BAUD
//#define UxGCR U1GCR
//#define URXxIE URX1IE
//#define URXxIF URX1IF
//#define UTXxIE UTX1IE
//#define UTXxIF UTX1IF
#elif (HAL_UART_DMA == 2)//改uart1的位置2 by
#define PxOUT P0
#define PxIN P0
#define PxDIR P0DIR
#define PxSEL P0SEL
#define UxCSR U1CSR
#define UxUCR U1UCR
#define UxDBUF U1DBUF
#define UxBAUD U1BAUD
#define UxGCR U1GCR
#define URXxIE URX1IE
#define URXxIF URX1IF
#define UTXxIE UTX1IE
#define UTXxIF UTX1IF
/******************************************************************/
//#elif (HAL_UART_DMA == 2)
//#define HAL_UART_PERCFG_BIT 0x02 // USART1 on P1, Alt-2; so set this bit.
//#define HAL_UART_Px_RTS 0x20 // Peripheral I/O Select for RTS.
//#define HAL_UART_Px_CTS 0x10 // Peripheral I/O Select for CTS.
//#define HAL_UART_Px_RX_TX 0xC0 // Peripheral I/O Select for Rx/Tx.
#elif (HAL_UART_DMA == 2)//改uart1的位置2 by
#define HAL_UART_PERCFG_BIT 0x02 // USART1 on P1, Alt-2; so set this bit.
#define HAL_UART_Px_RTS 0x20 // Peripheral I/O Select for RTS.
#define HAL_UART_Px_CTS 0x10 // Peripheral I/O Select for CTS.
#define HAL_UART_Px_RX_TX 0x30 // Peripheral I/O Select for Rx/Tx.
如下图将ZTOOL_P1改为ZTOOL_P2
小技巧是在串口初始化完成后一直观察P0DIR和P0SEL的值,而且比如修改P0SEL,全局搜索P0SEL不一定全,还要搜PxSEL
还有一个注意的地方:另一种方法在HAL_UART_DMA == 2的条件下再宏定义一个HAL_UART_DMA == 3,即不改动uart1的位置2引脚情况下新添一个位置1引脚,但是这样实际中改动的地方很多,参考最上面那个链接(*感觉不全),_hal_uart.c文件夹下所有涉及到HAL_UART_DMA == 2的条件语句都要新加个HAL_UART_DMA == 3.而且本人改完后只能发送不能接收,故用的上面那个方法