请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC2541 工具/软件:TI C/C++编译器
您好!
我在 ALT 1位置使用 USART0
当我尝试从 UART 引脚(计算机-> CC2541)接收数据时、遇到问题
当我从 COM 端口连续发送数据时、BLE 能够接收数据、但当我偶尔发送数据时、BLE 崩溃。 我正在通过 COM 端口连续发送数据。
例如:当我在 X 时间从 COM 端口发送数据并在 Y 时间在 BLE 应用上读取数据时、BLE 会崩溃
请建议解决上述问题。
这里是代码片段
//in keyfrom_init() //为备用1配置 USART0 =>端口 P0 (PERCFG.U0CFG = 0)。 PERCFG =(PERCFG 和~PERCFG_U0CFG)| PERCFG_U0CFG_ALT1; //为端口0引脚将 USART 0优先于定时器1。 P2DIR &= P2DIR_PRIP0_USART0; //将引脚2、3和5设置为外设 I/O,将引脚4设置为 GPIO 输出。 P0SEL |= BIT5 | BIT4 | BIT3 | BIT2; //初始化比特率= 9600波特率 U0BAUD = UART_BAUD_M; U0GCR =(U0GCR &~U0GCR_BAUD_E)| UART_BAUD_E; //初始化 UART 协议(起始/停止位、数据位、奇偶校验等): // USART 模式= UART (U0csr.mode = 1) U0CSR |= U0csr_mode; //起始位电平=低=>空闲电平=高电平(U0UCR.START = 0)。 U0UCR &=~U0UCR_START; //停止位电平=高电平(U0UCR.STOP = 1)。 U0UCR |= U0UCR_STOP; //停止位数= 1 (U0UCR.SPB = 0)。 U0UCR &=~U0UCR_SPB; //奇偶校验=禁用(U0UCR.奇 偶校验= 0)。 U0UCR &=~U0UCR_parity; // 9位数据使能= 8位传输(U0UCR.BIT9 = 0)。 U0UCR &=~U0UCR_BIT9; //位9的电平= 0 (U0UCR-D9 = 0)、在 U0UCR.BIT9 = 1时使用。 //位9的电平= 1 (U0UCR-D9 = 1)、在 U0UCR.BIT9 = 1时使用。 //奇偶校验=偶数(U0UCR-D9 = 0)、在 U0UCR.奇 偶校验= 1时使用。 //奇偶校验=奇数(U0UCR-D9 = 1)、在 U0UCR.奇 偶校验= 1时使用。 U0UCR &=~U0UCR_D9; //流控=被禁用(U0UCR.flow = 0)。 U0UCR &=~U0UCR_flow; //位顺序= LSB 优先(U0GCR.Order = 0)。 U0GCR &=~U0GCR_Order; //in 周期性函数 //接收 UART 数据 uart0Receive (uartRxBuffer、Size_of_UART_RX_buffer); //此处为 uart0Receive 函数 void uart0Receive (uint8* uartRxBuf、uint16 uartRxBufLength) { uint16 uartRxIndex; //启用 UART0 RX (U0csr.re = 1)。 U0CSR |= U0csr_re; //清除任何挂起的 RX 中断请求(设置 U0csr.RX_BYTE = 0)。 U0CSR &=~U0csr_RX_BYTE; //循环:从 UART0 RX 线接收每个 UART0样本。 对于(uartRxIndex = 0;uartRxIndex < uartRxBufLength;uartRxIndex++) { //等待直到接收到数据(U0csr.RX_BYTE = 1)。 while (!(U0CSR 和 U0csr_RX_Byte))); //读取 UART0 RX 缓冲器。 uartRxBuf[uartRxIndex]= U0DBUF; } }
谢谢、此致。
伊德里斯