赞
踩
2 开启中断。
3. 生成progject,在Keil 5中打开,添加相应代码。
第一步:main函数中全局变量:
-
- uint8_t aRxBuffer; //接收中断缓冲
-
- uint8_t Uart1_RxBuff[256]; //接收缓冲
-
- uint8_t Uart1_Rx_Cnt = 0; //接收缓冲计数
-
- uint8_t cAlmStr[] = {0xF0,0x00,0x00,0xEE};
-
- uint8_t Uart1_TxBuff[256]; //接收缓冲
第二步:开启接收中断
HAL_UART_Receive_IT(&huart5, (uint8_t *)&aRxBuffer, 1);
第三步:While 循环中查询发送:
- while(HAL_UART_GetState(&huart5) == HAL_UART_STATE_BUSY_TX);//检测UART发送结束
-
- HAL_UART_Transmit(&huart5, (uint8_t *)&cAlmStr, sizeof(cAlmStr),0xFFFF);
第四步:弱函数重写:
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
-
- {
-
- UNUSED(huart);
-
- if(huart->Instance==UART5)
-
- {
-
-
-
- if(Uart1_Rx_Cnt >= 255) //溢出判断
-
- {
-
- Uart1_Rx_Cnt = 0;
-
- memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff));
-
- HAL_UART_Transmit(&huart5, (uint8_t *)&cAlmStr, sizeof(cAlmStr),0xFFFF);
-
- }
-
- else
-
- {
-
- Uart1_RxBuff[Uart1_Rx_Cnt++] = aRxBuffer; //接收数据转存
-
- if((Uart1_RxBuff[0] == 0xF0)&&(Uart1_RxBuff[Uart1_Rx_Cnt-1] == 0xEE))//判断开始、结束位
-
- {
-
- HAL_UART_Transmit(&huart5, (uint8_t *)&Uart1_RxBuff, Uart1_Rx_Cnt,0xFFFF); //将收到的信息发送出去
-
- Uart1_Rx_Cnt = 0;
-
- memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff)); //清空数组
-
- }
-
- }
-
- HAL_UART_Receive_IT(&huart5, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
-
- }
-
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。