CC1310的SDK开发之串口应用

匿名 (未验证) 提交于 2019-12-02 23:32:01

CC1310的SDK开发之串口应用

适用 CC1310\ CC2640R2F等基于TI-RTOS的SDK开发

配置

  • 注意:
    1、UART_read(mUartHandle, uartRxDataTemp, UART_read_length);
    UART_read_length:表示能接收到的数据长度,如果接收到的数据长度超过该参数,会造成串口宕机
    2、UART_control(mUartHandle, UART_CMD_RESERVED, NULL);
    开启硬件超时检测,超时后会自动调用Uart_ReadCallback
/**  * @funtion: 串口参数配置  *   * @param1:baudRate=>波特率,最大=3Mbps  * @param2:dataLength=>数据单元长度=5,6,7,8  * @param3:stopBits=>停止位=1位,2位  * @param4:parityType=>校验位=无校验,偶校验,奇校验,总为0,总为1  * @ret: =1 配置成功,=0 配置失败 */ char config_uart(uint32_t baudRate, UART_LEN dataLength, UART_STOP stopBits,UART_PAR parityType) {   if(mUartHandle != NULL){     UART_close(mUartHandle);     mUartHandle = NULL;   }else{     initUartRxBuffer();     // setTagPriority("peripheral", 0);     Board_initUART();     /* Create a mUartHandle with data processing off. */     UART_Params_init(&uartParams);                //加载默认参数   }   uartParams.readCallback = Uart_ReadCallback;  //获取串口读取回调函数   // uartParams.writeCallback = Uart_WriteCallback;  //获取串口写回调函数    uartParams.readMode = UART_MODE_CALLBACK;     //设置串口读模式:回调模式   // uartParams.writeMode = UART_MODE_BLOCKING; //设置串口写模式:默认为阻塞模式    uartParams.writeDataMode = UART_DATA_BINARY;   uartParams.readDataMode = UART_DATA_BINARY;    uartParams.readReturnMode = UART_RETURN_FULL;   uartParams.readEcho = UART_ECHO_OFF;          //设置读取反馈开关,关闭    uartParams.baudRate   = baudRate;       //波特率   uartParams.dataLength = dataLength;   //数据长度   uartParams.stopBits   = stopBits;       //停止位   uartParams.parityType = parityType;   //奇偶检验        // uartParams.readTimeout = getRxTimeOutTm();   // uartParams.readTimeout = UART_WAIT_FOREVER;    //设置读取超时时间,默认总是等待,                                                     //readMode=UART_MODE_CALLBACK时一定要设置为forever   mUartHandle = UART_open(Board_UART0, &uartParams);   if (mUartHandle == NULL) {       // System_abort("Error opening the mUartHandle");       return 0;   }else{     UART_control(mUartHandle, UART_CMD_RESERVED, NULL); //开启自动超时检测     UART_read(mUartHandle, uartRxDataTemp, UART_read_length);     return 1;   }  } 

接收回调

回调函数中尽量不要处理耗时工作,每次读取完成后都要调用一次UART_read();
参数:void *bufΪUART_read(mUartHandle, uartRxDataTemp, UART_read_length);传入的缓存地址

void Uart_ReadCallback(UART_Handle handle, void *buf, size_t count) {   size_t subPackageCnt=0,nextPackageIndex,memcpyLen;   size_t countTemp = count;    while( !( (countTemp / subPackageUnitLength == 0) &&              (countTemp % subPackageUnitLength == 0)           )         ){     if(countTemp >= subPackageUnitLength){       countTemp = countTemp - subPackageUnitLength;       memcpyLen = subPackageUnitLength;     }else{       memcpyLen = countTemp;       countTemp = 0;     }     nextPackageIndex = subPackageCnt * subPackageUnitLength;     memcpy(uartRxData[uartRxDataIndex].buffer, &uartRxDataTemp[nextPackageIndex], memcpyLen);     uartRxData[uartRxDataIndex].length = memcpyLen;     uartRxData[uartRxDataIndex].isEmpty = false;      memcpy(uartRxData2Uart[uartRxDataIndex].buffer, &uartRxDataTemp[nextPackageIndex], memcpyLen);     uartRxData2Uart[uartRxDataIndex].length = memcpyLen;     uartRxData2Uart[uartRxDataIndex].isEmpty = false;      uartRxDataIndex ++;     if(uartRxDataIndex == uartRxBufferMaxIndex){       uartRxDataIndex = 0;     }     subPackageCnt ++;   }    uartEventPost();   uartSemaphore_post();   UART_read(mUartHandle, uartRxDataTemp, UART_read_length); //等待下一次串口接收 } 
文章来源: https://blog.csdn.net/LinQiPing233/article/details/89842611
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!