蓝桥杯stm32笔记七——串口通信

串口介绍

        串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。

        通信的目的是进行信息传递,双方约定的规则就是通信协议

(1)通信方向:

   全双工)一般是两根通信线,一根发送,一根接收,可以同时进行,互不干涉

(半双工)一根通信线,双向,也可以发送和接收,发送和接收不能同时进行

(单工)一根通信线,单向,发送方向和接收方向固定

(2)时钟:

(同步)有时钟线,双方约定好时钟信号,接收方根据时钟信号进行采样

(异步)没有时钟线,双方约定好采样频率,接受方根据频率进行采样,并且还加帧头帧尾等,进行采样位置的对齐

(3)串口通信原理:

        STM32中的串口通信是通过USART模块来实现的,USART模块包括串行通信接口和同步串行接口两个部分。其中串行通信接口支持异步通信和同步通信两种模式,而同步串行接口只支持同步通信模式。

        在STM32中,串口通信需要将数据进行格式化处理,然后以一定的帧格式发送出去,接收方通过解析帧格式来获取数据。在格式化数据时,需要将数据进行加码和校验处理,以保证数据的准确性和可靠性。

UART串口通信

1、Cubemx配置:

 2、代码:

发送:

	//串口发送
    char temp[20];                                               
	sprintf(temp,"FRQ=%d\r\n",frq1);    
    HAL_UART_Transmit(&huart1,(uint8_t*)temp,strlen(temp),50);	

接收:

main.c(部分):

       HAL_UART_Receive_IT(&huart1,&rxdat,1);   //初始化(放在while外)



        if(rx_pointer!=0)
		{
			int temp=rx_pointer;
			HAL_Delay(1);
			if(temp==rx_pointer)
				uart_rx_proc();
		}

main.c(部分):

void uart_rx_proc()                   //处理接收的内容
{
	if(rx_pointer>0)
	{
		if(rx_pointer==22)          //接收22个字符
		{
			sscanf(rxdata,"%4s:%4s:%12s",car_type,car_data,car_time);    //拆分,格式化
		}
		else
		{
		  char temp[20];                                                
		  sprintf(temp,"Error");    
      HAL_UART_Transmit(&huart1,(uint8_t*)temp,strlen(temp),50);
		}
		rx_pointer=0;																		
		memset(rxdata,0,30);                           
	}
}

interrupt.c(部分):

char rxdata[30];
uint8_t rxdat;
uchar rx_pointer;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)  //接收的回调函数
{
	rxdata[rx_pointer++]=rxdat;                      //存放     
	HAL_UART_Receive_IT(&huart1,&rxdat,1);           //接收
}

3、串口通信小助手:

最终效果

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值