蓝桥杯嵌入式——串口

CUBE里配置成异步模式,设置波特率,打开中断(先配置LCD再配置串口):

 

串口发送

main.c

#include "string.h"
char temp[20];
sprintf(temp,"Hello World\r\n");
HAL_UART_Transmit(&huart1,(uint8_t *)temp,strlen(temp),50);

串口接收

interrupt.c

#include "usart.h"
char rxdata[30];
uint8_t rxdat;
uint8_t rx_index;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	rxdata[rx_index++] = rxdat;
	HAL_UART_Receive_IT(&huart1, &rxdat, 1);
}

main.c

extern char rxdata[30];
extern uint8_t rxdat;
extern uint8_t rx_index;

char car_type[5];
char car_data[5];
char car_time[13];

 注:sscanf()里的1s不能去掉,1代表数据的长度为1

void Uart_RX_Pro(void)
{
	if(rx_index > 0)
	{
		if(rx_index == 5)
		{
			sscanf(rxdata,"%1s:%1s:%1s",car_type,car_data,car_time);//1s中的1不能去掉,因为此处演示的数为1:2:3
		}
		else
		{
			char temp[20];
			sprintf(temp,"Error");
			HAL_UART_Transmit(&huart1,(uint8_t *)temp,strlen(temp),50);
		}
		rx_index = 0;
		memset(rxdata,0,30);

	}
}
HAL_UART_Receive_IT(&huart1, &rxdat, 1);//初始化运行时需要进去一次
if(rx_index > 0)
{
	int temp = rx_index;
	HAL_Delay(1);
	if(temp == rx_index)
		Uart_RX_Pro();
}
char text[30];
sprintf(text,"car_type = %s   ",car_type);
LCD_DisplayStringLine(Line0, (u8 *)text);
sprintf(text,"car_dat = %s   ",car_data);
LCD_DisplayStringLine(Line4, (u8 *)text);
sprintf(text,"car_time = %s   ",car_time);
LCD_DisplayStringLine(Line9, (u8 *)text);

串口接收最终实现功能:串口发送a:b:c时屏幕会显示对应的数字,若不是这5个字符串口则会接收到Error。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值