CC2540 串口发送U0DBUF写数据没有效果

2019-07-22 13:10发布

最近在利用CC2540 和 BLE协议栈做一个小程序,用SimpleBLEPeripheral程序的话,串口实验没有问题。

但是自己做串口实验,其他程序自己写,同时使用了BLE协议栈的DMA和UART部分(感觉写的很好),然后配置也和SimpleBLEPeripheral一样。
最后做实验的时候发现死活发送不成功,比如发送"Hello",用串口助手查看,接收到的就只有0x00(16进制查看)。


然后我就仔细查看了_hal_uart_dma.c源代码,发现BLE是使用ISR发送程序,最后在UART0的中断程序中看到,UxDBUF 的赋值。
单步调试,发现缓冲区里面数据是对的,但是UxDBUF 的值就是不改变,而且串口助手也收不到数据。。。。


请问大家有相同的疑问吗?
  1. HAL_ISR_FUNCTION( halUart0TxIsr, UTX0_VECTOR )
  2. {
  3.   HAL_ENTER_ISR();

  4.   if (dmaCfg.txHead == dmaCfg.txTail)
  5.   {
  6.     IEN2 &= ~UTXxIE;
  7.     dmaCfg.txMT = 1;
  8.   }
  9.   else
  10.   {
  11.     UTXxIF = 0;
  12.     UxDBUF = dmaCfg.txBuf[dmaCfg.txHead++];

  13.     if ((HAL_UART_DMA_TX_MAX != 256) && (dmaCfg.txHead >= HAL_UART_DMA_TX_MAX))
  14.     {
  15.       dmaCfg.txHead = 0;
  16.     }
  17.   }

  18.   HAL_EXIT_ISR();
  19. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
hm_315
1楼-- · 2019-07-23 10:29
smilingangel 发表于 2015-12-13 22:50
那就先检查下两边的波特率是否一致的。

谢谢你的回复。
问题已经找到,主要在在利用BLE源代码的时候,没有注意IO的配置,结果前面设置为UART,后面的程序强制把它设置为普通IO,结果肯定没有输出了。
hm_315
2楼-- · 2019-07-23 14:44
问题已经找到,主要在在利用BLE源代码的时候,没有注意IO的配置,结果前面设置为UART,后面的程序强制把它设置为普通IO,结果肯定没有输出了。
baimiaocun2015
3楼-- · 2019-07-23 14:49
BLE协议栈的DMA和UART?这个我怎没听说过的呀
tongbu2015
4楼-- · 2019-07-23 19:35
再看下你的buff中的数据被及时读出来没
GBkachao
5楼-- · 2019-07-24 00:49
 精彩回答 2  元偷偷看……
houjiakai
6楼-- · 2019-07-24 03:00
波特率是不是设置的问题

一周热门 更多>