两块STM32F1之间互相通信(串口)

首先准备两块STM32F103的板子,以我这个为例,我准备了一块STM32F103和CH32F103最小系统板子,其他杜邦线、下载器及接线方法以及通信原理不再多说。这里我用的是STM32F103最小系统发送数据到CH32F103最小系统上,CH32F1接收到数据点亮LED,最后用串口显示从来发送的数据。

 

STM32F103主机配置程序

#include "sys.h"
#include "usart2.h"
#include "delay.h"


u8 ppp;
void Usart2_Sendata()
{	
	USART_SendData(USART2,ppp);
	while( USART_GetFlagStatus(USART2,USART_FLAG_TC)!= SET);
}

int main(void)
{  	
	delay_init();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
	uart2_init(115200);
	while(1)
	{
		Usart2_Sendata();
	}
}

CH32F103从机配置程序

void uart2_init(u32 bound)
{
  GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	//使能GPIOA时钟
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //使能USART2
	
	USART_DeInit(USART2);
	
	//USART2_TX   GPIOA.2
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
  GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA.2
   
  //USART2_RX	  GPIOA.3
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA.3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA.3  

  //Usart2 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3 ;//抢占优先级3
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子优先级3
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器
  
   //USART 初始化设置
	USART_InitStructure.USART_BaudRate = bound;//串口波特率
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式

  USART_Init(USART2,&USART_InitStructure); //初始化串口2
  USART_ITConfig(USART2,USART_IT_RXNE, ENABLE);//开启串口接受中断
  USART_Cmd(USART2,ENABLE);                    //使能串口2
}

void USART2_IRQHandler(void)//串口2中断服务程序
{
	if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET)  
	{

			 p= USART_ReceiveData(USART2);



	}
}
int main()
{
	delay_init();	    	 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
	uart2_init(115200);
	uart_init(115200);
	POINT_COLOR=RED;		
	LED_Init ();
	while(1)
	{
		
		if(p==44)
		{
			LED0=0;
			delay_ms(100);
		}
		else
		{
			LED0=1;
			delay_ms(100);
		}
		printf("%d\r\n",p);

	}
}

分别把代码下载到两块板子里,打开在线debug发送数据实验主机发送数字44

从机接收数字44后用串口打印从来

 LED点亮

代码工程附 链接:https://pan.baidu.com/s/1QCPwcY_si5bNF1_3bunBZA 
提取码:rstx 
 

### 回答1: MR78毫米波雷达与STM32F1之间通信主要通过串行通信接口来实现。STM32F1系列微控制器具有多个UART(Universal Asynchronous Receiver/Transmitter)串口模块,可以用于与其他设备进行通信。 首先,需要将MR78毫米波雷达的串行通信接口连接到STM32F1的相应UART引脚上。然后,通过STM32F1的软件编程,配置UART模块的波特率、数据位、停止位、校验位等参数,以与MR78毫米波雷达相匹配。 接下来,在STM32F1的代码中,可以使用内置的串行通信库函数来实现与MR78毫米波雷达的通信。通过发送特定的指令或数据包,可以向MR78发送控制命令或请求数据。同时,STM32F1也可以通过接收串口数据的方式获取MR78返回的测量数据或状态信息。 在通信过程中,需要注意MR78毫米波雷达与STM32F1之间通信协议和数据格式。通常,可以通过查阅MR78和STM32F1的相关文档或参考示例代码来了解正确的通信协议和数据解析方式。 总的来说,MR78毫米波雷达与STM32F1之间通信是通过串行通信接口实现的,通过正确配置和使用UART模块,以及遵循相应的通信协议和数据格式,可以实现可靠的双向通信。 ### 回答2: MR78毫米波雷达与STM32F1之间通信可以通过串行通信实现。在STM32F1开发板上,可以利用UART串口功能来与MR78雷达模块进行数据交换。 首先,需要在STM32F1的开发环境中配置串口通信的参数,包括波特率、数据位、校验位等。然后,通过GPIO引脚将STM32F1和MR78雷达模块的TX和RX引脚相连,实现数据的发送和接收。 在编程上,可以使用STM32F1串口通信库函数,如HAL_UART_Init、HAL_UART_Transmit和HAL_UART_Receive来实现与MR78雷达模块之间的数据传输。首先,使用HAL_UART_Init初始化串口设置。然后,使用HAL_UART_Transmit从STM32F1向MR78雷达模块发送数据,如控制指令或配置参数。同时,也可以使用HAL_UART_Receive从MR78雷达模块接收雷达数据或状态信息。 为了确保数据的可靠传输,可以在通信过程中添加一些错误检测和纠正的机制,如校验位、重传等。 需要注意的是,由于MR78雷达模块和STM32F1的工作电压可能不一致,可能需要通过适配器或电平转换器来匹配电压。 总之,MR78毫米波雷达与STM32F1之间通信可以通过串行通信实现,利用STM32F1串口功能来实现数据的发送和接收。这样可以方便地控制MR78雷达模块,并获取雷达数据,用于各种应用,如距离测量、障碍物检测等。 ### 回答3: Mr78毫米波雷达与STM32F1之间通信可以通过以下方式实现: 1. SPI通信STM32F1可以通过SPI(串行外设接口)与Mr78毫米波雷达进行通信。SPI是一种全双工的串行通信协议,通过将数据同时发送和接收,实现高速的数据传输。STM32F1可以作为SPI主设备,控制Mr78毫米波雷达作为从设备,通过SPI接口发送指令和接收雷达数据。 2. GPIO通信STM32F1可以通过GPIO(通用输入输出)引脚与Mr78毫米波雷达进行通信。例如,可以配置STM32F1的一个GPIO引脚作为输出,控制雷达的工作模式或触发扫描。另外,可以配置另一个GPIO引脚作为输入,读取雷达输出的数据。 3. UART通信STM32F1可以通过UART(通用异步收发传输)与Mr78毫米波雷达进行通信。UART是一种异步通信协议,通过发送和接收数据帧实现通信STM32F1可以配置一个UART通信口与Mr78毫米波雷达进行数据传输。 4. I2C通信STM32F1可以通过I2C(串行外设接口)与Mr78毫米波雷达进行通信。I2C是一种串行通信协议,通过同时发送和接收数据,实现多个设备之间的高速通信STM32F1可以作为I2C主设备,与Mr78毫米波雷达作为从设备进行通信。 需要根据具体的硬件和软件要求选择合适的通信方式,并在STM32F1中编写相关的驱动程序和协议来实现与Mr78毫米波雷达之间通信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂造机人~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值