cc2540串口输出
各位大神,本人最近DIY了一块CC2540的开发板,现在通过USB的虚拟串口已经可以和BLE软件通信了,使用的程序为TI的官方程序hostestrelease,但我想通过CC2540的串口直接输出(使用P02和P03),不使用USB,以便于和其他MCU通信,我软件方面很白菜,求大神指导,最好是能提供一个工程文件让我测试一下串口硬件电路是否OK,谢谢!
你可以在工程里选择CC2540EM,不用CC2540USB。
谢谢,我是选择了CC2540EM,但是还是没反应,波特率57600,FLOW NONE ,无奇偶校验,8位数据位,一位停止位,使用的为USB转串口,没有使用RTS CTS脚等,只接通了 RXD TXD 和GND,不知道有影响没,数据有发送到P02(TTL电平)脚,但P03脚没有输出,我现在不太确定是我硬件上有问题还是需要更改CC2540EM工程,求帮助!
您好!
借此机会也是资讯一下CC2540串口问题,我的硬件是CC2540的迷你开发套件,我使用的是keyfob来调试串口。DEMO用的是SerialAppCentral,初始化配置成UART0,ALT0,也就是使用P0.2 和P0.3口,收发采用DMA触发,我从上位机发一串数据到CC2540,程序能在轮训的时候调用HalUARTReadDMA正常收到数据。
现在我的问题是我将收到的数据调用HalUARTWriteDMA写入缓冲,我监控在轮训的时候也有触发DMA,事实上没有数据从TX管脚发出,一直没有找到原因,望指教,谢谢!
请FAE出来讲一下啊,是不是哪个地方没有配置到啊?
你尝试一下把流控关掉,uartConfig.flowControl = FALSE,
还不行的话你再直接对寄存器U0DBUF写一个数据,看看有没有发出来
谢谢,终于有人关心俺了。 我是有把流控制关闭的,还是不行。
另外我还单独写了一个裸机程序,只是配置了时钟和串口。
时钟配置:
CLKCONCMD = (CLKCONCMD & 0x80) | CLKCONCMD_32MHZ;//启动外部32m while ( (CLKCONSTA & ~0x80) != CLKCONCMD_32MHZ );//等待外部32m稳定
串口配置:
PERCFG = 0x00; //位置1 P0口 P0SEL = 0x3c; //P0用作串口 P2DIR &= ~0XC0; //P0优先作为串口0 U0CSR |= 0x80; //UART方式 U0GCR |= 10; //baud_e U0BAUD = 0x3b; //波特率设为57600
发送:
U0DBUF = 0x55;; while(ACTIVE == 0);
还是没有发送输出?
先纠正一下,如果是57600波特率,U0BAUD = 0xd8;
我用你的代码试了一下,是OK的,我直接在\BLE-CC254x-1.3\Projects\ble\HostTestApp\CC2540里的工程,
选择CC2540EM项目,直接在main里面加入以下代码,可以看到有输出0x55
如果你还无法收到,建议先换个芯片吧,可能IO口坏了
int main(void)
{
/* Initialize hardware */
HAL_BOARD_INIT();
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x3c; //P0用作串口
P2DIR &= ~0XC0; //P0优先作为串口0
U0CSR |= 0x80; //UART方式
U0GCR |= 10; //baud_e
U0BAUD = 0xd8; //波特率设为57600
U0DBUF = 0x55;
while(1);
/* Initialze the HAL driver */
HalDriverInit();
/* Initialize NV system */
osal_snv_init();
/* Initialize the operating system */
osal_init_system();
/* Enable interrupts */
HAL_ENABLE_INTERRUPTS();
/* Setup Keyboard callback */
HalKeyConfig(false, MSA_Main_KeyCallback);
/* Blink LED on startup */
HalLedSet (HAL_LED_4, HAL_LED_MODE_ON);
#if defined POWER_SAVING
osal_pwrmgr_device( PWRMGR_BATTERY );
#endif
/* Start OSAL */
osal_start_system(); // No Return from here
return 0;
}
单步调试的的时候发现当向U0DBUF写数据时,U0CSR的TX_BYTE位置1,U0DBUF数据始终是0,U0CSR得ACTIVE也是0,没有数据从P0.3发送出来。
再次感谢CZ,我使用的是TI CC2540 MINI开发套件,我在usb done 上面和key fob上面都实验过了,都是不行的,由于我这里没有EM的板子,会不会硬件哪里出了问题?
你可以把我上面的代码放到你的MINI DK,理论上也是能够测到数据的,因为芯片也是CC2540,
另外你也可以直接对P0.3先作普通IO口测试,置高或置低,看看电平输出有没有变化
我将P0.3作为普通IO,输出点亮一个LED,亮灭都很正常,配置成外设uart,就是一直是高电平,没有数据输出。我用的是ble1.2.1,真是不明白?
我用的是1.3版本,但这个应该不是问题,你再确认一下你的MINI DK是CC2540还是CC2541,
如果按我上面的代码加到工程文件里没有输出的话就一定是硬件的问题了
另外我想问一下,你是用示波器去抓的还是用一个接收机去接收,如果示波器抓的话一个字节是很难抓到的,
你可以在while循环里做一段延时后周期地给U0DBUF写一个数据,让CC2540持续有输出
如果接收机去接收,你一定要确保波特率57600设置正确
不好意思,程序是没有问题的,是我的那个usb转串口的小板子有问题造成的。非常感谢CZ的无私帮助,谢谢!
谢谢两位帮忙,按照上面的程序,可以收到0x55数据,串口部分硬件问题可以排除,但将以上代码注释后,重新烧录,启动BTOOL,还是收不到数据,能否告知进一步调试方法,谢谢!我使用的是BLE-CC254x-1.2.1\Projects\ble\HostTestApp\CC2540,选择CC2540EM工程
启动BTOOL后,串口设置好后会出现如下信息
Port opened at 2013-1-21 16:09:51
[1] : <Tx> - 04:09:51.625
-Type : 0x01 (Command)
-Opcode : 0xFE00 (GAP_DeviceInit)
-Data Length : 0x26 (38) byte(s)
ProfileRole : 0x08 (Central)
MaxScanRsps : 0x05 (5)
IRK : 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
CSRK : 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
SignCounter : 0x00000001 (1)
Dump(Tx):
01 00 FE 26 08 05 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 01 00 00 00
------------------------------------------------------------------------------------------------------------------------
[2] : <Warning> - 04:10:01.593
GAP Device Initialization Timeout.
Device May Not Function Properly.
你需要在线调试看看HalUARTReadDMA和HalUARTWriteDMA有没有正常接收和发送数据
应该是HalUARTPollDMA和HalUARTIsrDMA
我也遇到了同样的问题