STM32G431RBT6学习笔记---串口空闲中断接收和结束符接收

一、定长接收---采用

二、以特定的符号作为结束符

问题:①单个字符接收②转义字符

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
	if(huart->Instance == USART1){
		Rx_Flag = 1;
	}
}

void UART_Proc_EOC(){
	static int trans_state = 0;
	if(Rx_Flag){
		Rx_Flag = 0;
		switch(trans_state){
			case 0:
				if(RxTemp == TRANS_CHAR)//如果接收到的字符是转义字符
					trans_state = 1;//就让其标志为1
				else if(RxTemp == END_CHAR){//如果接收到的字符是结束符
					Update_Flag = 1;//就意味着本次接收已经结束
				}
				else {
					RxBuf[RxCount++] = RxTemp;//如果接收到的是数据,就把该字符放到数组里
				}
				break;
			case 1://当接收到的字符是转义字符或者结束字符
				if(RxTemp != END_CHAR){//是转义字符但不是结束字符
					RxBuf[RxCount++] = TRANS_CHAR;//此转义字符是数据,要将他写进数组
					RxBuf[RxCount++] = RxTemp;
				}
				else {
					RxBuf[RxCount++] = RxTemp;
				trans_state = 0;
				break;
		}
	}
	if(Update_Flag == 0){//表明还没有遇到结束字符,仍需要继续接收中断
		HAL_UART_Receive_IT(&huart1, &RxTemp, 1);
	}
}

三、采用空闲中断的方式(字符串基本上是连续发送,一旦空闲实践大于某个时间,就认为这串数据接收完了),适用于不定长的接收

①常规配置

②中断的方式

 函数中

    在中断模式下接收一定量的数据,直到接收到预期数量的数据或者发生空闲中断
    HAL_UART_ReceiveToIdle_IT(&huart1, (uint8_t *)USART_RxBuf, Rx_Len);//IDLE使用

写上这个函数表明接收端已经开启了空闲中断

四、DMA接收,适合接收大量的数据,一般用在报文(协议)的传输,找完整的报文(有格式)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值