最近在采购了一块新的开发板,其io口和一般的io口不太一样,一般的开发板用于串口传输的引脚为p0_2 p0_3,也就是串口0(uart0),备用位置1, 但是新的开发板没有使用p0_2 p0_3来作为串口输出 接收引脚,zigbee协议栈默认的配置不能使用,需要自己修改协议栈,下面是详细的修改流程.
步骤:1
修改HAL_UART_DMA和HAL_UART_ISR的值.
#if HAL_UART
#ifndef HAL_UART_DMA
#if HAL_DMA
#if (defined ZAPP_P2) || (defined ZTOOL_P2)
#define HAL_UART_DMA 2
#else
#define HAL_UART_DMA 1
#endif
#else
#define HAL_UART_DMA 0
#endif
#endif
#ifndef HAL_UART_ISR
#if HAL_UART_DMA // Default preference for DMA over ISR.
#define HAL_UART_ISR 0
#elif (defined ZAPP_P2) || (defined ZTOOL_P2)
#define HAL_UART_ISR 2
#else
#define HAL_UART_ISR 1
#endif
#endif
具体看加粗部分,我的功能里面 #if (defined ZAPP_P2) || (defined ZTOOL_P2) 这一句是false的,所以可以直接修改HAL_UART_DMA和HAL_UART_ISR的值为自己想要的值,比如我的只开启一个串口,选择了HAL_UART_DMA=1,所以HAL_UART_ISR设置为0.
步骤2
在 uint8 HalUARTOpen(uint8 port, halUARTCfg_t *config)函数中就可以根据上面设置的值,进行调用相应的函数,比如我配置串口0,所以调用了port=HAL_UART_PORT_0条件下的 HalUARTOpenDMA(config)函数,然后找到void HalUARTInit(void)函数,进入函数内部,找到HalUARTInitDMA()函数,进入内部,修改内容.
步骤3
修改void HalUARTInit(void)函数
配置优先级
P2DIR的6-7位为00,第1优先级:USART 0,第2优先级:USART 1 ,第3优先级:定时器1
P2DIR &= ~0xc;
配置所使用的串口位置(备用位置1,备用位置2)
PERCFG|=1;使用uart0的备用位置2(即p1_4,p1_5)
配置io口为外设io
PxSEL|=0x30 (p1_4,p1_5在端口1上的第4,5位为1时,十六进制值为0x30)
步骤4
修改_hal_uart_dma.c文件的其他配置
通过PxSEL跳转到_hal_uart_dma.c文件,并使用下面的内容
#define PxOUT P1
#define PxIN P1
#define PxDIR P1DIR
#define PxSEL P1SEL
覆盖
#define PxOUT P0
#define PxIN P0
#define PxDIR P0DIR
#define PxSEL P0SEL
大功告成
编译一下 没有错误就可以使用p1_4,p1_5作为串口输出/接收消息了



