STM32与51单片机进行串口通信

实现功能:51单片机(STC89C52)接收来自stm32的信号并打印在数码管上;

                  51单片机通过按键按下发送信号控制stm32单片机的LED灯亮灭。

注意事项:两个单片机要共地;

                   波特率要一致(9600);

                   51端选择串口工作方式1,stm32端串口设置字长8,无校验位;

主代码如下

51端代码

#include "reg52.h"
#include "smg.h"
#include "public.h"
#include "intrins.h"

#define MATRIX_button P1
#define LED_PORT P0

static u8 rec;
//static u8 rec_diplay;
sbit  led = P2^1;
sbit beep = P2^5;
sbit led2 = P2^6;
sbit led3 = P2^7;
u8 ret[4][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

u8 scan_button2()
{
	static u8 ret1 = 0;
	static u8 ret2 = 0;

	MATRIX_button = 0xf0;//行
	  if(MATRIX_button != 0xf0)
	  {
		
	  	delay_us(1000);
		if(MATRIX_button != 0xf0)
		{
		  switch(MATRIX_button)
		  {
		  	case 0x70:ret1 = 0;break;
			case 0xb0:ret1 = 1;break;
			case 0xd0:ret1 = 2;break;
			case 0xe0:ret1 = 3;break;
		  }
			MATRIX_button = 0x0f;
			if(MATRIX_button != 0x0f)
			{
		  		switch(MATRIX_button)
		  		{
		  			case 0x07:ret2 = 0;break;
					case 0x0b:ret2 = 1;break;
					case 0x0d:ret2 = 2;break;
					case 0x0e:ret2 = 3;break;
		  		}
			}
			while(MATRIX_button != 0x0f);
			return ret[ret1][ret2];
		}
		return 0;
	  }
	 
	 	  
}

void uart_init()
{
	TMOD |= 0x20;
	TH1 = 0xfd;
	TL1 = 0xfd;
	SCON |=0x50;
	
	EA = 1;
	ES = 1; 
	TR1	= 1;
}

void main()
{
	char key_set;
	uart_init();
	while(1)
	{
	   	key_set = scan_button2();
		if(key_set>0)
		{	
            SBUF = key_set+48;

		}
		smg_display(rec-48,8);
		//delay_us(100);	
	}
}

void uart() interrupt 4
{
	u16 t = 600;
	if(RI)
	{
		rec = SBUF;
		while(t--)
		{
			smg_display(rec-48,8);	
		}
		if(rec == 49) led2 = !led2;
		else if(rec == 50) led3 = !led3;
		RI = 0;
	
	}
}

32端:

#include "stm32f10x.h"
#include "usart1.h"
#include "stdio.h"
#include "delay.h" 
#include "led.h"
#include "key.h"

 int main(void)
 {	
	 u8 i ;
	 //u16 count,i,times;
	 delay_init();
	 led_init();
	 key_init();
	 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	 my_USART1();
	 while(1)
	 {
		 i = key_scan(0);
		 switch(i)
		 {
			 case 1:USART_SendData(USART1,49);break;
			 case 2:USART_SendData(USART1,50);break;
			 case 3:USART_SendData(USART1,51);break; 

             //case 1:printf("1");break;
			 //case 2:printf("2");break;
			 //case 3:printf("3");break;
		 }
		 
	 }
	
 }
 
 void USART1_IRQHandler()
{
	u8 rec;

	if(USART_GetITStatus(USART1,USART_IT_RXNE))
	{
		rec = USART_ReceiveData(USART1);
		if(rec == 49) 
			LED1 = !LED1;
		else if(rec == 50) 
			LED2 =!LED2;
	}
}
 

  • 9
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
嵌入式的相关资料,包括stm32单片机51单片机单片机诞生于20世纪70年代末,它是指一个集成在一块芯片上的完整计算机系统。单片机具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。单片机的使用领域已十分广泛几乎很难找到哪个领域没有单片机的踪迹,在智能仪表、实时工控、通讯设备、导航系统、家用电器等。此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。51系列单片机最早有Intel公司推出,主要有8031系列,8051系列。后来Atmel公司以8051的内核为基础推出了AT89系列单片机。它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值