配置usart1和usart3,都如上图所示,其中usart1连接电脑,usart3连接串口屏
main.c文件中添加
/**********串口中断*
#include <string.h>
#define RXBUFFERSIZE 256 //最大接收字节数
char RxBuffer[RXBUFFERSIZE]; //接收数据
uint8_t aRxBuffer; //接收中断缓冲
uint8_t Uart1_Rx_Cnt = 0; //接收缓冲计数
///串口中断
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(huart);
/* NOTE: This function Should not be modified, when the callback is needed,
the HAL_UART_TxCpltCallback could be implemented in the user file
*/
if(Uart1_Rx_Cnt >= 255) //溢出判断
{
Uart1_Rx_Cnt = 0;
memset(RxBuffer,0x00,sizeof(RxBuffer));
HAL_UART_Transmit(&huart1, (uint8_t *)"数据溢出", 10,0xFFFF);
}
else
{
RxBuffer[Uart1_Rx_Cnt++] = aRxBuffer; //接收数据转存
if((RxBuffer[Uart1_Rx_Cnt-1] == 0x0A)&&(RxBuffer[Uart1_Rx_Cnt-2] == 0x0D)) //判断结束位
{
HAL_UART_Transmit(&huart1, (uint8_t *)&RxBuffer, Uart1_Rx_Cnt,0xFFFF); //将收到的信息发送出去
//判断串口屏按键选择的模式
// if(RxBuffer[Uart1_Rx_Cnt-3]==0x01)
// {
// Mode_MeasureFlag=1;
// }
// else if(RxBuffer[Uart1_Rx_Cnt-3]==0x02)
// {
// Mode_MeasureFlag=2;
// }
// else if(RxBuffer[Uart1_Rx_Cnt-3]==0x03)
// {
// Mode_MeasureFlag=3;
// }
while(HAL_UART_GetState(&huart3) == HAL_UART_STATE_BUSY_TX);//检测UART发送结束
Uart1_Rx_Cnt = 0;
memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组
}
}
HAL_UART_Receive_IT(&huart3, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
}
在主函数中添加
HAL_UART_Receive_IT(&huart3, (uint8_t *)&aRxBuffer, 1);
串口屏配置:
prints 1,1
printh 0d 0a
prints1,1//第二个1是指发送一个字符
滑块控件滑动,给单片机发送数值:
prints h0.val,0
printh 0d 0a
///串口中断
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(huart);
/* NOTE: This function Should not be modified, when the callback is needed,
the HAL_UART_TxCpltCallback could be implemented in the user file
*/
if(Uart1_Rx_Cnt >= 255) //溢出判断
{
Uart1_Rx_Cnt = 0;
memset(RxBuffer,0x00,sizeof(RxBuffer));
HAL_UART_Transmit(&huart1, (uint8_t *)"数据溢出", 10,0xFFFF);
}
else
{
RxBuffer[Uart1_Rx_Cnt++] = aRxBuffer; //接收数据转存
if((RxBuffer[Uart1_Rx_Cnt-1] == 0x0A)&&(RxBuffer[Uart1_Rx_Cnt-2] == 0x0D)) //判断结束�??
{
//HAL_UART_Transmit(&huart1, (uint8_t *)&RxBuffer, Uart1_Rx_Cnt,0xFFFF); //将收到的信息发�?�出�??
huakuai=RxBuffer[0]+16*16*RxBuffer[1]+16*16*RxBuffer[2]+16*16*RxBuffer[3];
Uart_printf(&huart1," %d ",huakuai);//串口屏实时显�????
//判断串口屏按键�?�择的模�??
// if(RxBuffer[Uart1_Rx_Cnt-3]==0x01)
// {
// Mode_MeasureFlag=1;
// }
// else if(RxBuffer[Uart1_Rx_Cnt-3]==0x02)
// {
// Mode_MeasureFlag=2;
// }
// else if(RxBuffer[Uart1_Rx_Cnt-3]==0x03)
// {
// Mode_MeasureFlag=3;
// }
while(HAL_UART_GetState(&huart3) == HAL_UART_STATE_BUSY_TX);//�??测UART发�?�结�??
Uart1_Rx_Cnt = 0;
memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组
}
}
HAL_UART_Receive_IT(&huart3, (uint8_t *)&aRxBuffer, 1); //再开启接收中�??
}