Telink BLE MESH开发|ble mesh开发教程《三》telink_sig_mesh串口收发数据

一、前言

  官网资料介绍建议采用DMA传输,串口数据的接收是放到了fifo中,但是串口发送也是采用的DMA,问题在于串口发送并没有建立缓冲器,而是判断当前DMA是否忙,如果忙数据直接丢弃,这样做显然不合理。如果发送时DMA忙应该将数据放到缓冲器中,等DMA不忙时再进行发送。

                 

二、代码修改

(1)启用串口 app_config_8258.h中 (app_config_8258.h一定要对应相应的工程不要调试mesh的工程而修改了spirit lpn的工程中的app_config_8258.h),

#if WIN32

#define HCI_ACCESS HCI_USE_USB

#else

#define HCI_ACCESS HCI_USE_NONE

#endif

 

#if (HCI_ACCESS==HCI_USE_UART)

#define UART_TX_PIN UART_TX_PB1

#define UART_RX_PIN UART_RX_PB0

#endif

修改为

#if WIN32

#define HCI_ACCESS HCI_USE_USB

#else

#define HCI_ACCESS HCI_USE_UART

#endif

 

#if (HCI_ACCESS==HCI_USE_UART)

#define UART_TX_PIN UART_TX_PB1

#define UART_RX_PIN UART_RX_PB0

#endif

 

启用串口时要注意,因为PWM占用了PB0和PB1可能或存在冲突问题因此要修改一下

app_config_8258.h中

//--------------- LED / PWM

#if(PCBA_8258_SEL == PCBA_8258_DONGLE_48PIN)

#define PWM_R GPIO_PWM1A3 //red

#define PWM_G GPIO_PWM0A2 //green

#define PWM_B GPIO_PWM3B0 //blue

#define PWM_W GPIO_PWM4B1 //white

修改为:

#define PWM_R GPIO_PWM1A3 //red

#define PWM_G GPIO_PWM0A2 //green

#define PWM_B GPIO_PWM1A3 //blue

#define PWM_W GPIO_PWM0A2 //white

修改完成后编译下载,调试,调试请参考SWS调试方式

 

 

接收中断次数增加,说明数据接收到

三、发送缓冲器代码实现

开始写软fifo,软件fifo参考之前fifo章节嵌入式开发|高效缓冲器设计(C语言)

首先修改下firmware\drivers\8258\uart.c中的函数

unsigned char uart_Send(unsigned char* data, unsigned int len)函数

修改为

建立fifo后在进行调试时发现竟然有数据丢失,尴尬不,开始找问题,中断明明接收到但是hci_rx_fifo中的数据缺没有,不靠谱呀。数据被别的地方处理了。

mesh_common.c程序中的int blc_hci_tx_to_uart (),就是他干的,我们看看在哪里调用的,在void user_init()中有个

blc_register_hci_handler (blc_rx_from_uart, blc_hci_tx_to_uart); //default handler注册了两个回调,

是不是很尴尬,注释掉以后再测试,问题解决

 

四、串口调试

 

 

 

 

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值