栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

zigbee 串口配置 串口0 备用位置2配置

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zigbee 串口配置 串口0 备用位置2配置

最近在采购了一块新的开发板,其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作为串口输出/接收消息了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/316770.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号