吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 664|回复: 1
收起左侧

[学习记录] AT89C52和STM32F103ZE的串口相互通信

[复制链接]
ZGRHWY 发表于 2023-3-15 09:32
本帖最后由 侃遍天下无二人 于 2023-3-15 10:01 编辑

[C] 纯文本查看 复制代码
#include "stm32f10x.h"  // Device header
#include "usart1.h" 
#include "string.h"
#include "iic.h"
#include "delay.h"
#include "AT24C02.h"
#include "Led.h"
#include "Key.h" 

uint32_t  temp_send=0xAA103232;
unsigned char  temp_send2;
unsigned char ByteSend[5]={0};//发送的字节
unsigned char up[]={0xAA,0x10,0x32,0x32};

int main(void)
{
        int i,x=0;
        delay_init();
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        Led_Init();
        Key_Init();
        UART5_Init(9600);
        while(1)
        {        
                for(i=0;i<4;i++)
                {
                        UART5_SenByte(up[i]);
                        delay_ms(1000);
                }
                if(IT_U5.IT_flag == 1)
                        {
                                if(IT_U5.IT_read_buf[0]==0xAA||IT_U5.IT_read_buf[0]==0x10||IT_U5.IT_read_buf[0]==0x32)
                                {        
                                        x++;
                                        if(x==4)
                                        {        
                                        LED1=!LED1;
                                        LED0=!LED0;
                                        }
                                        IT_U5.IT_flag=0;
                                        IT_U5.IT_len=0;
                                        memset(IT_U5.IT_read_buf,0,256);
                                }        
                        }
        }//strcmp
}



[C] 纯文本查看 复制代码
#include <REGX52.H>
#include "string.h"

//P30--RXD
//P31--TXD
typedef unsigned char uchar;
typedef unsigned int uint;

sbit s4=P3^2;//按键
uchar Buf[50];          //接收缓冲区
uchar R_flag;
uint i=0,x=0;
        uchar num;
unsigned char up[]={0xAA,0x10,0x32,0x32};

void ConfigUart();
uchar GetCh();
void GetString(uchar *buf);
 void SendCh(uchar dat);
void SendString(uchar *str);


void int0()//外部中断请求
{
        IT0=0;
        EX0=1;
        EA=1;
}


void delay(int z)
{
          uint i,j;
  for(i=0;i<z;i++)
  for(j=0;j<114;j++);

}


void main()
{

        ConfigUart();
//        int0();
                
//        P2=0xff;
        while(1)
        {
                if(R_flag==1)
                {
                        if(num==0xAA||num==0x10||num==0x32)
                        {
                                P2=~P2;
                                x++;
                        }
                        if(x==4)
                        {
                                for(i=0;i<4;i++)
                                {
                                        SendCh(up[i]);
                                        delay(1000);//按键消抖
                                        x=0;
                                }
                        }
                        R_flag=0;
                }
        }        
}

/*
*串口初始化
*/
void ConfigUart()
{
        TMOD &= 0x0F;                //高四位清0
        TMOD |= 0x20;   //定时器1方式2
        SCON  = 0x50;                //
        TH1  = 0xFD;    //9600
//        TH1  = 0xFF;    //115200
        TL1  = TH1;
        PCON = 0x00;                //叫地主!不加倍!!
        ES = 1;                            //打开串口中断
        EA = 1;                                        //打开总中断
        TR1 = 1;                                //打开定时器1
}
/*
*接收一个字符 OK
*/
uchar GetCh()
{
        uchar dat;

        while(!RI);
        dat = SBUF;
        RI = 0;
        return dat;        
}
/*
*接收一个字符串        ok
*保存到buf中        
*/
void GetString(uchar *buf)
{
        *buf = GetCh();
        while(*buf != '\r')           //CRT超级终端默认以'\r'回车符结尾
        {
                buf++;
                *buf = GetCh();
        }
        *buf = '\0';                   //添加结束符
}
/*
*发送一个字符         OK
*/
void SendCh(uchar dat)
{        
        SBUF = dat;
        while(!TI);
        TI = 0;                
}
/*
*发送一个字符串         OK
*/
void SendString(uchar *str)
{
        while(*str != '\0')
        {
                SendCh(*str);
                str++;        
        }
        SendCh('\r');          //回车
        SendCh('\n');          //换行
}

void InterruptUart(void) interrupt 4
{
   if(RI)
  {
        num=SBUF;         
        R_flag=1;  
        RI=0;
  }
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zhcj66 发表于 2023-3-15 11:00
这个应该是电子论坛的主题吧  如阿莫论坛 等
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 00:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表