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  串口 引用地址:MSP430F5529-串口介绍

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

推荐阅读最新更新时间:2024-11-12 11:37

新唐N76E003+GPRS 串口乱码故障排除手记
设计目的 单片机采用N76E003,GPRS模块采用AIR208,N76E003使用USART0与AIR208通信,使用USART1与另一个设备通信。由于每个设备在服务的唯一性,每个设备编号都应该是唯一的。而GPRS模块的IMEI号正好是唯一的,所以设计思路是读取该IMEI号码并以此作为设备的唯一编号。 读取IMEI号码出现乱码故障 N76E003发送控制指令,读取AIR208的IMEI号码。遂尝试着定位问题。 1、使用串口助手观察,N76E003确实发送了控制命令,且AIR208确实返回了包含MEI号码的返回数据。问题是,单片机无论是单步运行还是全速运行,读取的数据均有丢失。 2、使用串口助手对GPRS模块发送控制命
[单片机]
新唐N76E003+GPRS <font color='red'>串口</font>乱码故障排除手记
stm32中的串口通信你了解多少
  在基础实验成功的基础上,对串口的调试方法进行实践。硬件代码顺利完成之后,对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中。   b) 初始化函数定义:   void USART_Configuration(void); //定义串口初始化函数   c) 初始化函数调用:   void UART_Configuration(void); //串口初始化函数调用   初始化代码:   void USART_Configuration(void) //串口初始化函数   {   //串口参数初始化   USART_InitTypeDef USART_InitStructure; //串口设置恢复默认参数   //
[单片机]
单片机攻略4——中断和串口
一、中断 首先要明白什么是中断程序。 书上说:中断程序是一种特殊的程序运行方式,中断向量是这个中断程序运行的入口,一个中断程序包括中断请求,中断响应,中断关闭三步走。定义很严谨,用我的理解来讲中断其实可以类比我们日常生活中的“随时响应” 比如说:目前正在努力学习(主函数执行其任务),突然肚子咕咕叫起来(中断请求),肚子叫是随时都有可能发生的,也有可能是每次饭后隔3个小时又饿了,反正就是在满足肚子饿了的条件下才会叫(中断开关和条件),提醒我们要进食了(中断响应)。吃完饭后我们回去继续学习(中断返回)。 从程序的角度来看,一旦打开中断开关,中断就会开始判断条件,满足条件之后执行中断里面的程序内容。理清楚先后顺序对于理解
[单片机]
STM32f4---串口通信实验代码(02)
介绍完了这两个函数,我们回到main.c,对于main.c前面引入的头文件为了篇幅考虑,我们后面的实验不再列出,详情请参考我们实验代码即可。主函数代码如下: int main(void) { u8 t,len; u16 times=0; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 delay_init(168); //延时初始化 uart_init(115200); //串口初始化波特率为115200 LED_Init(); //初始化与 LED连接的硬件接口 LED0=0; //先点亮红灯 wh
[单片机]
STM32和ROS机器人的串口通信方案
具体协议大致如下,易读、易调用、易拓展、易更改。 源码文件:进入下面公众号:小白学移动机器人,发送:串口通信升级。即可获得。 http://weixin.qq.com/r/KERAWIvE1daqrc879xE6 (二维码自动识别) 本方案解决的问题:解决以STM32做ROS机器人底层驱动的串口通信问题。 为什么要写篇文章?: 最近发现越来越多的小伙伴走入ROS机器人的领域,而ROS机器人与底层驱动的串口通信问题,是大家学习路上的一个难题。很多小伙伴对STM32单片机并不熟悉,对串口通信的理解并不透彻,自己去解决这个问题,费时费力,最后也可能没有好的结果,并且这又不是大多数学习ROS机器人的重点。最后发现网上也没有很好的
[单片机]
STM32和ROS机器人的<font color='red'>串口</font>通信方案
MSP430学习总结——UART串口
一、MSP430串口 我用的这个单片机是MSP430F5529,这个单片机有两个串口,分别是USCI_A0和USCI_A1,以下是关于MSP430串口的配置以及接收函数和发送函数。 二、串口配置 说到串口,那肯定离不开起始位、数据位、校验位、停止位以及波特率。 先来说一下常用的寄存器。 串口控制寄存器0 这个寄存器可以设置数据位,停止位和校验位等 串口控制寄存器1 这里可以设置时钟源和中断使能等 波特率设置寄存器 波特率设置涉及到三个寄存器UCA0BR,UCA0BR1,UCA0MCTL 具体的设置方法在芯片手册上有写,也可以参考一下这位大佬的博客https://blog.csdn.net/weixin_27070451
[单片机]
MSP430学习总结——UART<font color='red'>串口</font>
C51---8 串口
串口介绍✨ 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各 式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。 51单片机内部自带UART(Universal Asynchronous ReceiverTransmitter,通用异步收发器)可实现单片机的串口通信。 硬件电路 简单双向串口通信有两根通信线(发送端TXD和接收端RXD) TXD与RXD要交叉连接 当只需单向的数据传输时,可以直接一根通信线 当电平标准不一致时,需要加电平转换芯片 电平标准 电平标准是数据1和数据0的表达方
[单片机]
C51---8 <font color='red'>串口</font>
液晶1602双机串口通信
/**=============发送==================**/ KEYB EQU 20H.0 ;按键标致(为1时有键按下) ORG 0000H AJMP MAIN ORG 0030H MAIN: /* MOV SP,#60H MOV TMOD,#20H MOV TL1,#0E6H MOV TH1,#0E6H MOV SCON,#50H MOV PCON,#80H ; SETB TR1 */ BEGIN: ACALL KEY ;调用键盘扫描 JB KEYB,BEGIN_ ;判断是否
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved