菜鸟学串口通信不知如何打数据包。求大神给点详解

2019-03-24 09:05发布

#include <msp430x14x.h>
#include "Config.h"                     //开发板配置头文件,主要配置IO端口信息

//***********************************************************************
//               MSP430IO口初始化
//***********************************************************************
void Port_Init()
{
  LED8DIR  = 0xFF;                      //设置IO口方向为输出
  LED8 = 0xFF;                      //P6口初始设置为FF
}

//*************************************************************************
//               MSP430串口初始化
//*************************************************************************
void UART_Init()
{
  U0CTL|=SWRST + CHAR;                //复位SWRST,8位数据模式
  U0TCTL|=SSEL1;                      //SMCLK为串口时钟
  U0BR1=baud_h;               //BRCLK=8MHZ,Baud=BRCLK/N
  U0BR0=baud_l;               //N=UBR+(UxMCTL)/8
  U0MCTL=0x00;                        //微调寄存器为0,波特率9600bps
  ME1|=UTXE0;                         //UART0发送使能
  ME1|=URXE0;                         //UART0接收使能
  U0CTL&=~SWRST;
  IE1|=URXIE0;                        //接收中断使能位

  P3SEL|= BIT4 + BIT5;                //设置IO口为第二功能模式,启用UART功能
  P3DIR|= BIT4;                       //设置TXD0口方向为输出
}

//*************************************************************************
//              串口0发送数据函数
//*************************************************************************

void Send_Byte(uchar data)
{
  while(!(IFG1&UTXIFG0));          //发送寄存器空的时候发送数据
    U0TXBUF=data;
}

//*************************************************************************
//              串口0发送字符串函数
//*************************************************************************
void Print_Str(uchar *s)
{
    while(*s != '')
    {
        Send_Byte(*s++);
    }
}

//*************************************************************************
//               处理来自串口0的接收中断
//*************************************************************************

#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
  uchar data=0;
  data=U0RXBUF;                       //接收到的数据存起来
  LED8 = data;                    //将收到的数据显示在8个LED灯上显示,仅限16进制
  Send_Byte(data);                    //将接收到的数据再发送出去
}

//*************************************************************************
//           主函数
//*************************************************************************
void main(void)
{
  WDT_Init();                         //看门狗设置
  Clock_Init();                       //系统时钟设置
  Port_Init();                        //LED端口初始化
  UART_Init();                        //串口设置初始化
  Print_Str("DM430-L Board UART Test... ");             //发送字符串测试
  _EINT();                            //开中断
  while(1)                            //无限循环
    {
    }
}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
ienglgge
1楼-- · 2019-03-24 14:05
< 不知道,你想要达到什么效果,实际的结果是什么样的,起码这些应该有说明吧。开中断属于串口初始化内容,Print_Str("DM430-L Board UART Test... ");    这句要在开中断以后。最好稍微延时一下。主循环里可以查询,收到数据,打印什么的。先把软件基本结构调整好。

一周热门 更多>

相关问题

    相关文章