微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2540同时使用两个串口

CC2540同时使用两个串口

时间:10-02 整理:3721RD 点击:

你好:

我想请教如何在SimpleBLEPeripheral上实现同时使用两个串口,里面的代码不修改只能使用一个串口吧?

我打开串口1的中断

void InitUart()
{
CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ晶振
while(CLKCONSTA & 0x40); // 等待晶振稳定
CLKCONCMD &= ~0x47; // 设置系统主时钟频率为 32MHZ

PERCFG = 0x02;
P1SEL |= 0xC0;
P2DIR &= ~0XC0; 
P2DIR |= 0x40;

U1CSR |= 0x80;
U1GCR |= 8; 
U1BAUD |= 59; 
UTX1IF = 0;
U1CSR |= 0X40; //允许接收
IEN0 |= 0x88; // 开总中断,接收中断
}

/****************************************************************
串口发送字符串函数
****************************************************************/
void Uart_Send_String(char *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U1DBUF = *Data++;
while(UTX1IF == 0); //发送完成标志位
UTX1IF = 0;
}
}

#pragma vector = URX1_VECTOR
__interrupt void UART1_ISR(void)
{
URX1IF = 0; // 清中断标志
temp = U1DBUF;
}

上面的代码单独使用是没有问题的,但是加到SimpleBLEPeripheral.c中后就有问题了,收发的数据都出错了,请问怎么解决

while(UTXIIF==0);这一句代码不对,应该是while(!UTXIIF);由于数据发送完之后标志位会置1,所以你写的那一句代码会提前结束发送导致发送数据不完整,所以在发送时候应该写等待结束的代码,然后再将标志位清0

这两种方法都正确的!

CC2541可以同时使用两个串口吗?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top