使用RF_PHY 时用到了串口,使用串口是发现接收端只能接收到长字节数据的前8位字节,推断是UART1_ByteTrigCfg(UART_7BYTE_TRIG);中UART_7BYTE_TRIG参数导致的,这个量能变大吗?还是只能接收前8个字节?
还是说是一种可能把长字节拆分成若干8字节发送?那我想要识别数据的第一位和第十位该怎么办?
串口初始化如下:
void Uart_Init(void) { uint8_t len; /* 配置串口1:先配置IO口模式,再配置串口 */ GPIOA_SetBits(GPIO_Pin_9); GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU); // RXD-配置上拉输入 GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平 UART1_DefInit(); UART1_ByteTrigCfg(UART_7BYTE_TRIG); trigB = 20; UART1_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_LINE_STAT); PFIC_EnableIRQ(UART1_IRQn); } /********************************************************************* * @fn UART1_IRQHandler * * @brief UART1中断函数 * * @return none */ __INTERRUPT __HIGH_CODE void UART1_IRQHandler(void) { volatile uint8_t i; PRINT("IRQ RIGHT\n"); switch(UART1_GetITFlag()) { case UART_II_LINE_STAT: // 线路状态错误 { UART1_GetLinSTA(); break; } case UART_II_RECV_RDY: // 数据达到设置触发点 for(i = 0; i != trigB; i++) { RxBuff[i] = UART1_RecvByte(); } tmos_set_event(taskID, SBP_RF_COMMAND_EVT); break; case UART_II_RECV_TOUT: // 接收超时,暂时一帧数据接收完成 i = UART1_RecvString(RxBuff); tmos_set_event(taskID, SBP_RF_COMMAND_EVT); break; case UART_II_THR_EMPTY: // 发送缓存区空,可继续发送 break; case UART_II_MODEM_CHG: // 只支持串口0 break; default: break; } }
热门产品 :
CH394: 以太网协议栈芯片