基于STM32F103C8Tx芯片实现的应答式串口数据管理器逻辑分析与程序实现

写在前面

之前我已经写了如何利用STM32CubeMX实现配置STM32F103C8Tx芯片,传送门在下面
STM32CubeMX配置STM32F103C8Tx芯片制作串口数据管理器
那么这篇博客将分享基于应答式的串口管理器的数据收发方案,在之后的内容中将STM32F103C8Tx串口管理器简称为103

正文

主要内容在我的古月居博客:
基于STM32F103C8Tx芯片实现的应答式串口数据管理器逻辑分析与程序实现

流程图

基于STM32F103C8Tx芯片实现的应答式串口数据管理器逻辑分析与程序实现_第1张图片

效果展示

拨片架往右移动然后拨片拨取货物

拨片架往左移动然后准备拨取货物

测试环境以及结果

基于STM32F103C8Tx芯片实现的应答式串口数据管理器逻辑分析与程序实现_第2张图片
基于STM32F103C8Tx芯片实现的应答式串口数据管理器逻辑分析与程序实现_第3张图片
基于STM32F103C8Tx芯片实现的应答式串口数据管理器逻辑分析与程序实现_第4张图片
基于STM32F103C8Tx芯片实现的应答式串口数据管理器逻辑分析与程序实现_第5张图片
基于STM32F103C8Tx芯片实现的应答式串口数据管理器逻辑分析与程序实现_第6张图片
基于STM32F103C8Tx芯片实现的应答式串口数据管理器逻辑分析与程序实现_第7张图片

程序分析

char pi_serial[7] = {
     '\0'};
char screw_serial[3] = {
     '\0'};
char servo_serial[4] = {
     '\0'};
char reply_pi;
char get_servo;
char get_screw;

while (1)
{
     
	if(!HAL_UART_Receive(&PI_SERIAL,(uint8_t *)pi_serial,6,0XFFFF)){
     //接收到树莓派的消息
	
		if(pi_serial[0] == '|'){
     
			reply_pi = '*';
			HAL_UART_Transmit(&PI_SERIAL,(uint8_t *)&reply_pi,1,0XFFFF);
			screw_serial[0] = pi_serial[1];
			screw_serial[1] = pi_serial[2];
			servo_serial[0] = pi_serial[3];
			servo_serial[1] = pi_serial[4];
			servo_serial[2] = pi_serial[5];
			SerialControl();
		}
		
	}else{
     
		HAL_Delay(50);
	}
void SerialControl()
{
     
	uint8_t rece_flag = 0;
	HAL_UART_Transmit(&SCREW_SERIAL,(uint8_t *)(&screw_serial),sizeof(screw_serial),0XFFFF);
	while(!rece_flag){
     
		if(!HAL_UART_Receive(&SCREW_SERIAL,(uint8_t *)(&get_screw),sizeof(get_screw),0XFFFF)){
     
			if(get_screw == '@'){
     
				while(1){
     
					if(!HAL_UART_Receive(&SCREW_SERIAL,(uint8_t *)(&get_screw),sizeof(get_screw),0XFFFF)){
     
						if(get_screw == '!'){
     
								rece_flag = 1;
								break;
						}
					}else{
     
						HAL_Delay(50);
					}
				}
			}
		}
	}
	
	rece_flag = 0;
	HAL_UART_Transmit(&SERVO_SERIAL,(uint8_t *)(&servo_serial),sizeof(servo_serial),0XFFFF);
	while(!rece_flag){
     
		if(!HAL_UART_Receive(&SERVO_SERIAL,(uint8_t *)(&get_servo),sizeof(get_servo),0XFFFF)){
     
			if(get_servo == '&'){
     
				while(1){
     
					if(!HAL_UART_Receive(&SERVO_SERIAL,(uint8_t *)(&get_servo),sizeof(get_servo),0XFFFF)){
     
						if(get_servo == '#'){
     
								rece_flag = 1;
								break;
						}
					}else{
     
						HAL_Delay(50);
					}
				}
			}
		}
	}
	reply_pi = '?';
	HAL_UART_Transmit(&PI_SERIAL,(uint8_t *)&reply_pi,1,0XFFFF);
}

正文

主要内容在我的古月居博客:
基于STM32F103C8Tx芯片实现的应答式串口数据管理器逻辑分析与程序实现


疯狂明示,这次一定

在这里插入图片描述

你可能感兴趣的:(STM32,购物机器人,串口,stm32)