Zigbee协议栈小bug记录---初始化串口波特率动态变化不了及解决办法。


前言

在使用生命模组模块时,生命模组模块默认初始波特率为256000,因此需要Zigbee初始波特率为256000,修改生命模组模块后,动态修改波特率为115200。但在动态修改的时候,发现在协议栈初始化的时候,动态修改波特率无法起到作用。

一、修改非Zigbee默认波特率

找到MT_Uart.c,MT_UartInit()中的 uartConfig.baudRate             = UART_bound;就可以修改串口的波特率。选中HAL_UART_BR_115200,跳转到定义的文件。

#define HAL_UART_BR_256000 0x05 是笔者添加的,默认没有。因此当我们需要其他波特率的时候就需要自己添加。

下面为配置的过程:

1.在hal_uart.h文件钟添加定义#define HAL_UART_BR_256000 0x05(按照自己需要的波特率进行修改)0x05定义的值不要重复就行。

2.找到hal_uart_dma.c文件,按照下图添加你所定义的内容。

 注意dmaCfg.txTick = 2;是根据圈起来的注释计算出来的,32768/(256000/10)=1.28,取大于这个值的最小的整数。

      UxBAUD = 6;
      UxGCR = 13;

计算方法,手册上有,仔细阅读一下。

注意一下协议栈的系统时钟频率为32MHz,F的值为32000000 ,按照上述的公式便可以计算出自己所需波特率对应两个寄存器需要的值。这里有个计算小技巧,先确定指数的值,才再确定BAUD_M的值。BAUD_M只需要接近计算值就可以工作在所需要的波特率上,不需要特别精确,忽略小数。

3.进行预编译HAL_UART_ISR,然后就可以打开_hal_uart_isr.c文件了。hal_uart_dma.c要是打不开也同理。(实在不行的话,学习一下如何使用Source Insight

 

按照上图添加添加配置即可,配置过程与hal_uart_dma.c中是相似的。

4.至此配置过程就结束了,这样就可以根据需要的波特率进行串口通信。插一句:从代码上来看,协议栈串口看起来像是dma的方式进行的,因此配置hal_uart_dma.c文件就可以修改波特率了,有兴趣的读者试一下,试好了告诉我一声啊!!!

二、所遇问题


我在SampleApp_Init()函数开头 ,UART_bound=HAL_UART_BR_256000;将波特率修改为256000,接着按照生命模组的指令,对生命模组进行配置,配置完成后,将UART_bound的值修改为115200,并对串口重新配置(上图中为修改后的代码截图,因此里面没有重新配置的代码)。

然后,就发现串口是以115200的波特率对生命模组进行配置,也就是没起到作用。很奇怪,波特率的配置像是覆盖掉了,因此配置不了。

三、解决方法

看起来波特率的配置在SampleApp_Init()开头动态修改会被覆盖掉,因此我设置了一个变量,在终端轮询事件中,调用HalUARTOpen(0,&uartConfig);进行配置。结果能够动态修改波特率!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值