MSP430F5529-串口介绍

最新更新时间:2022-08-05来源: csdn关键字:MSP430F5529  串口 手机看文章 扫描二维码
随时随地手机看文章

        开发板一共有两个串口,分别为P4.4,P4.5和P3.3,P3.4


        其中P4的串口是开发板上面用短接套套起来的那个,套上短接套进行相关以后就可以和电脑进行串口通信,也可以拆下短接套和其他外设或芯片进行串口通信。


        不同频率第四步的配置的数据不同,其他配置应该没什么差别。


        对于串口0的配置顺序也是这样的,只要把UCA后面的1改成0就行了。


        注:截取的送药车代码,没测试过。


        配置过程为:


        1.特殊功能相关引脚


        2.串口1功能配置寄存器(UCA1CTL1)中置位 UCSWRST 以进行接下来的配置,不置位不能正常配置串口。


        3.功能配置寄存器选择时钟源。


        4.根据用户手册配置UCA1BR0和UCA1BR1,以及UCA1MCTL寄存器中的相关位。


参考https://www.ti.com.cn/cn/lit/ug/slau208q/slau208q.pdf?ts=1636704386650&ref_url=https%253A%252F%252Fwww.ti.com.cn%252Fproduct%252Fcn%252FMSP430F5529%253FkeyMatch%253DMSP430F5529%2BLAUNCHPAD


第1041页,选择对应的配置信息


        5.选择校验位


        6.选择数据位


        7.选择停止位


        8.复位UCA1CTL1中的UCSWRST位,以完成串口


        9.打开中断,打开中断以后就可以触发接收或者发送中断。接收到数据的时候就会触发接收中断,这个时候可以在接收中断里处理接收到的数据。发送则需要先打开发送中断,然后写入相关数据,随后会触发发送中断把数据发送出去。


        中断收发标志位应该会自动清零,所以无需关注


        串口接收到的数据都放在UCA1RXBUF中


        串口发送的数据都写入UCA1TXBUF中


        在读取或者写入数据后,都会触发相应的中断以便将数据接收/发送出去。


        例程.简易串口收发


#include

 

void initClockTo16MHz()

{

    UCSCTL3 |= SELREF_2;                      // Set DCO FLL reference = REFO

    UCSCTL4 |= SELA_2;                        // Set ACLK = REFO

    __bis_SR_register(SCG0);                  // Disable the FLL control loop

    UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx

    UCSCTL1 = DCORSEL_5;                      // Select DCO range 16MHz operation

    UCSCTL2 = FLLD_0 + 487;                   // Set DCO Multiplier for 16MHz

                                              // (N + 1) * FLLRef = Fdco

                                              // (487 + 1) * 32768 = 16MHz

                                              // Set FLL Div = fDCOCLK

    __bic_SR_register(SCG0);                  // Enable the FLL control loop

 

    // Worst-case settling time for the DCO when the DCO range bits have been

    // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx

    // UG for optimization.

    // 32 x 32 x 16 MHz / 32,768 Hz = 500000 = MCLK cycles for DCO to settle

    __delay_cycles(500000);//

    // Loop until XT1,XT2 & DCO fault flag is cleared

    do

    {

        UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags

        SFRIFG1 &= ~OFIFG;                          // Clear fault flags

    }while (SFRIFG1&OFIFG);                         // Test oscillator fault flag

}

 

void UART_Init( char Parity, char DataBits, char StopBits)

{

    P4SEL = BIT4 + BIT5;                        // P4.4,5 = USCI_A0 TXD/RXD

    UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**

    UCA1CTL1 |= UCSSEL_2;                     // SMCLK 25mhz

    UCA1BR0 = 8;                              // 16MHz 115200 (see User's Guide)

    UCA1BR1 = 0;                              // 16MHz 115200

    UCA1MCTL = UCBRS_0 + UCBRF_11 + UCOS16;   // Modln UCBRSx=0, UCBRFx=0,

 

    //------------------------------设置校验位------------------------------

    switch (Parity)

    {

    case 'n':

    case 'N':

        UCA1CTL0 &= ~UCPEN;

        break;          //无校验

    case 'p':

    case 'P':

        UCA1CTL0 |= UCPEN + UCPAR;

        break;    //偶校验

    case 'o':

    case 'O':

        UCA1CTL0 |= UCPEN;

        break;          //奇校验

        //default:  return (0);                                 //参数错误

    }

    //------------------------------设置数据位------------------------------

    switch (DataBits)

    {

    case 7:

    case '7':

        UCA1CTL0 |= UC7BIT;

        break;         //7位数据位

    case 8:

    case '8':

        UCA1CTL0 &= ~UC7BIT;

        break;         //8位数据位

        //default:  return (0);                                 //参数错误

    }

    //------------------------------设置停止位------------------------------

    switch (StopBits)

    {

    case 1:

    case '1':

        UCA1CTL0 &= ~UCSPB;

        break;          //1位停止位

    case 2:

    case '2':

        UCA1CTL0 |= UCSPB;

        break;          //2位停止位

        //default:  return (0);                                 //参数错误

    }

 

    // over sampling

    UCA1CTL1 &= ~UCSWRST;                   // **Initialize USCI state machine**

    UCA1IE |= UCRXIE; //接收中断

 

}

 

int main(void) {

 

    WDTCTL = WDTPW | WDTHOLD;                 // Stop watchdog timer

    initClockTo16MHz();                        //配置系统时钟为16Mhz,不配置串口不能正确收发

    UART_Init('n',8,1);

    _EINT();//开启总中断

 

    while(1){

 

    }

 

}

 

 

#pragma vector=USCI_A1_VECTOR

__interrupt void USCI_A1_ISR(void)

{

    switch (__even_in_range(UCA1IV, 4))

    {

    case 0:

        break;                 // Vector 0 - no interrupt

    case 2:                       // Vector 2 - RXIFG

        if (UCA1RXBUF == 'a'){

            UCA1IE |= UCTXIE; //开启发送中断

            UCA1TXBUF='a';    //如果收到一个a,就发回去一个a

        }

        break;

    case 4:                       // Vector 4 - TXIFG

 

        break;

    default:

        break;

    }

}

关键字:MSP430F5529  串口 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic618255.html

上一篇:MSP430F5529-MPU6050陀螺仪
下一篇:MSP430F5529-定时器介绍

推荐阅读

MSP串口打印避坑
ccs选手的疑惑##还没有的给你传送:ccs安装教程当你装好了ccs时,我们就入土了一半了,ccs虽然是官方编程调试软件,但是他有诸多不便之处,一位不愿透漏姓名的学长曾用它烧了半个小时代码,你完全可以在VScode或者Clion配置更好的环境。但是来都来了,用库函数写的全国统一的好吧,接下来就是导入diverlib库函数,教程传送门:ccs库函数导入因为我们主要讲串口,所以就只涉及串口的相关参数和函数,在msp432_driverlib_users_guide-msp432p4xx-4_40_00_03.pdf这个文件里,搜索UART,就出现一大堆函数,都是有关串口的函数首先是它e_USCI_A模块的结构体,时钟源我们选择SMCLK
发表于 2022-08-10
MSP<font color='red'>串口</font>打印避坑
新唐N76E003+GPRS 串口乱码故障排除手记
设计目的单片机采用N76E003,GPRS模块采用AIR208,N76E003使用USART0与AIR208通信,使用USART1与另一个设备通信。由于每个设备在服务的唯一性,每个设备编号都应该是唯一的。而GPRS模块的IMEI号正好是唯一的,所以设计思路是读取该IMEI号码并以此作为设备的唯一编号。读取IMEI号码出现乱码故障N76E003发送控制指令,读取AIR208的IMEI号码。遂尝试着定位问题。1、使用串口助手观察,N76E003确实发送了控制命令,且AIR208确实返回了包含MEI号码的返回数据。问题是,单片机无论是单步运行还是全速运行,读取的数据均有丢失。2、使用串口助手对GPRS模块发送控制命令,成功接收返回数据,无
发表于 2022-08-10
新唐N76E003+GPRS <font color='red'>串口</font>乱码故障排除手记
模块学习(三)——激光测距模块(TOF10120)
该款激光测距模块集成了芯片,能够十分方便的直接传回数据,最近备赛,分享一下该模块的使用,以及需要注意的问题。此次是在MSP430F5529上进行开发的,其他MCU可自行移植。1.硬件接线上图是我从TOF10120技术手册上截取下来的,可以知道,该模块支持IIC和UART两种通讯模式,可根据MCU资源选择合适的方式,此次直接利用串口进行开发。绿线 ——SCL 蓝线 ——SDA白线 ——TXD 黄线—— RXD红线 ——VCC 黑线 ——GND对应于串口的话,(tof)SCL-SDA(430);(tof)SDA-SCL(430)即可2.配置可以直接利用USB转TTL模块先进行配置,配置好之后直接使用即可。其中对于IIC和UART方式有各
发表于 2022-08-09
模块学习(三)——激光测距模块(TOF10120)
模块学习(四)——超声波测距
今天想着把测距模块全部一网打尽了,把点对点和点对面两种测距全部搞定,于是有了这篇关于超声波模块的博客分享,主要还是分享代码,原理啥的网上都有,这次是基于MSP430F5529的driverlib库,没有找到开源的代码就自己分享一下了!1.基本原理还是稍稍讲一下原理,不然等下可能代码看不懂。两个引脚,一个TRIG,一个ECHO,就是触发和回响,顾名思义,trig是用来触发启动超声波模块的,echo模块是用来回收超声波的。此次使用的是US-100超声波模块,其实和常见的HC-SR04/5系列是一样的,代码均可用。基本原理trig引脚给一个大于10us的高电平脉冲,即会启动超声波模块。启动之后,模块内部会发送一段8个40KHZ的脉冲,随后
发表于 2022-08-09
模块学习(五)——矩阵键盘
矩阵键盘的学习只是为了做一个简单的遥控器,主要目标还是后续的遥控器控制小车实现简单而精准的直行和转弯,加上前面的模块,锻炼自己PID的调试和理解能力。但毕竟矩阵键盘也算个模块嘛,就也记录一下,分享给有需要的同志。(此代码是基于MSP430F5529系列,其他系列MCU均可用,自己修改引脚,配置IO口即可)1.基本原理矩阵键盘主要方便在16个按键只需要8个引脚即可实现控制,根据我们所学的4*4的矩阵可以很容易理解他的原理,无非就是先确定行(列),再确定列,即可确定某个具体的键位。方法自然而然也有很多种,用的比较多的就是行扫描法和列扫描法。例如,我们确定第三行,第四列的键位该如何确定呢?我们利用行扫描法。将四个关于行的引脚设置为输出模式
发表于 2022-08-09
模块学习(五)——矩阵键盘
STM32HAL库串口处理---中断收发
利用STM32串口中断收发和buffer机制(循环队列的原理)实现数据的准确接收和发送。为后续添加上层通信协议建立基础。为了方便使用,为函数接口统一标准Arduino串口机制的接口函数void begin(unsigned long baud);//初始化接口void end(void);//关闭串口int available(void);//获取缓存中可以读取的字节数int peek(void);//从缓存中读取字节数据,但不删除该数据int read(void);//从缓存中读取字节数据,并删除该数据int availableWrite(void);//获取发送缓存还可以写入的字节数void flush(void); //将发送
发表于 2022-08-09
小广播
实战 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved