stm32双机通信,数据传输

stm32双机通信
今天调了一个stm32的双机通讯程序
stm32407和103之间的通信,拿原子大佬的代码改的。

这里贴一下收发的主程序:

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "hc05.h"
#include "usart2.h"			 	 
#include "string.h"	 
#include "key.h"
//ALIENTEKminiSTM32开发板扩展实验 
//ATK-HC05蓝牙串口模块实验-库函数版本  
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司 
//ALIENTEK战舰STM32开发板实验13
//TFTLCD显示实验  
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司 
 
 
	
void sendstr(char* s)
{
		USART_ClearFlag(USART2, USART_FLAG_TC);
	  while(*s!='\0')
	  {
	  USART2->DR= *s;
		while((USART2->SR&0X40)==0){}//等待发送完成
	  s++;
	  }  
	}
void sendnum(u8 a)
{
	char* abuf;
  sprintf(abuf,"%d",a);		
	  sendstr(abuf);
	}



int main(void)
{	
	u8 x=20,i;
	u8 t;
	u8 len;		
	char sbuf[]={"control"};

delay_init();	    	 //延时函数初始化	  
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600);	 	//串口初始化为9600
LED_Init();				//初始化与LED连接的硬件接口
KEY_Init();				//初始化按键
LCD_Init();				//初始化LCD
USART2_Init(115200);

POINT_COLOR=RED;

while(1)
{
		
	sendnum(123);
	delay_ms(1000);	
	
	if(USART2_RX_STA&0x8000)//接收程序
	{		
		x=20;
		i=0;

	len=USART2_RX_STA&0x3fff;//得到此次接收到的数据长度
		while(len--)
		{
		 LCD_ShowChar(x,200, USART2_RX_BUF[i],16,1);
		  i=i+1;
    x+=8;
		}

		USART2_RX_STA=0;
	}

  } 
 }

及以下重要的串口中断代码

void USART2_IRQHandler(void)
{
	u8 res;	   

if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//接收到数据
{	 
res =USART_ReceiveData(USART2);	
if((USART2_RX_STA&(1<<15))==0)//接收完的一批数据,还没有被处理,则不再接收其他数据   不等于0x80
{ 		
 if(USART_ReceiveData(USART2)!='\0'&&USART2_RX_STA<USART2_MAX_RECV_LEN)		//还可以接收数据
	{
		TIM_SetCounter(TIM4,0);//计数器清空        				 
		if(USART2_RX_STA==0)
			TIM4_Set(1);	 	//使能定时器4的中断 
		USART2_RX_BUF[USART2_RX_STA++]=res;		//记录接收到的值	
		
	}else USART2_RX_STA|=1<<15;					//强制标记接收完成
} 
}  											 
}   	  

收和发单片机的主程序差不多,只不过用的串口和定时器有一些区别。
我使用的HC05,在连上单片机之前你要用一个USB转TTL模块的东西设置它的波特率,密码,绑定的地址,主从模式等等,这个很简单的,网上也找的到资料,你的蓝牙上电后就会自动联上相应的地址。这样你只要在程序中写简单的串口程序读写即可。

我的方法蓝牙连上单片机只需要四根线,每个蓝牙可以收也可以发

大家要是觉得有用的话就给我点个赞呗,让小透明有点成就感。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值