在线时间237 小时
UID146802
注册时间2015-3-6
NXP金币0
TA的每日心情 | 开心 2019-7-11 19:28 |
---|
签到天数: 141 天 连续签到: 1 天 [LV.7]常住居民III
金牌会员
 
- 积分
- 2492
- 最后登录
- 2020-9-16
|
1,采用 KSDK_1.3.0库,使用IAR(因为KEIL编译时CPU占用率为90%,所以暂用IAR快些)
2,对 C:\Freescale\KSDK_1.3.0\examples\frdmk64f\driver_examples\uart\uart_blocking下的工程进行改进,目地为了以后做AT指令的收发
3,实现方法 ,原来是1个字节的查询接收处理,在主程序里使用,对我以后做多字节接收不好处理,所以这里进行改动,把 UART_DRV_SendDataBlocking(BOARD_DEBUG_UART_INSTANCE, &rxChar, 1u, 1000u);去掉,加入
- //接收用的最大字节数
- #define received_size 250
- //接收用的专用数组
- uint8_t buffer_rece[received_size];
- //---定义一个全局变量做自动接收用
- uint32_t received_CountBuff;
复制代码 做自动接收串口数据用,
调用 UART_DRV_ReceiveData(BOARD_DEBUG_UART_INSTANCE, buffer_rece, received_size);进行串口接收初始化,把刚才定义的数组和最大长度代入
在查询的地方 调用 UART_DRV_GetReceiveStatus(BOARD_DEBUG_UART_INSTANCE,&received_CountBuff );做查询,看看有没有收到内容
if(received_CountBuff>0&&received_CountBuff!=received_size) ,因为是自动接收所以加入一个延时之后可以做其它处理
源码更改的地方:
- int main(void)
- {
- uint8_t rxChar = 0;
- uint32_t byteCountBuff = 0;
- uart_state_t uartState;
- //串口定义
- uart_user_config_t uartConfig = {
- .bitCountPerChar = kUart8BitsPerChar,//8Bit
- .parityMode = kUartParityDisabled, //校验位
- .stopBitCount = kUartOneStopBit,//停止位
- .baudRate = BOARD_DEBUG_UART_BAUD//波特率
- };
- // Enable clock for PORTs, setup board clock source, config pin
- // IO 控制 ,包括时钟
- hardware_init();
- // Call OSA_Init to setup LP Timer for timeout
- OSA_Init();
- // Initialize the uart module with base address and config structure
- //串口处理
- UART_DRV_Init(BOARD_DEBUG_UART_INSTANCE, &uartState, &uartConfig);
- // Inform to start blocking example
- byteCountBuff = sizeof(buffStart);//得到一个数组的内容长度
- //发送指定数组 buffStart,长为内容长度,BOARD_DEBUG_UART_INSTANCE 为是哪个串口号
- UART_DRV_SendDataBlocking(BOARD_DEBUG_UART_INSTANCE, buffStart, byteCountBuff, 1000u);
- // Inform user of what to do
- byteCountBuff = sizeof(bufferData1);
- UART_DRV_SendDataBlocking(BOARD_DEBUG_UART_INSTANCE, bufferData1, byteCountBuff, 1000u);
- //设置自动接收 的数组和最大长度
- UART_DRV_ReceiveData(BOARD_DEBUG_UART_INSTANCE, buffer_rece, received_size);
-
- // Send/receive blocking function
- while(true)
- {
- // Wait to receive input data
- /* if (kStatus_UART_Success == UART_DRV_ReceiveDataBlocking(BOARD_DEBUG_UART_INSTANCE, &rxChar, 1u, OSA_WAIT_FOREVER))
- {
- // Echo received character
- UART_DRV_SendDataBlocking(BOARD_DEBUG_UART_INSTANCE, &rxChar, 1u, 1000u);
- }*/
-
- UART_DRV_GetReceiveStatus(BOARD_DEBUG_UART_INSTANCE,&received_CountBuff );
- if(received_CountBuff>0&&received_CountBuff!=received_size)
- {
- Delay(200);
- UART_DRV_SendDataBlocking(BOARD_DEBUG_UART_INSTANCE, bufferData1, byteCountBuff, 1000u);
- Delay(200);
- uartState.isRxBusy=0;
- //重新给长度
- // uartState.rxSize=received_size;
- //重新初始化接收内容
- UART_DRV_ReceiveData(BOARD_DEBUG_UART_INSTANCE, buffer_rece, received_size);
-
- }
-
- }
- }
- void Delay(uint32_t ms)
- {
- uint32_t i,k;
- for(i=0; i<ms;i++)
- {
- for(k=0; k<7998; k++)
- {
- }
- }
- }
复制代码
|
|