历史上的今天
返回首页

历史上的今天

今天是:2025年03月24日(星期一)

正在发生

2020年03月24日 | MSP430F2370(三)UART串口通讯

2020-03-24 来源:eefocus

在这一篇文章中,举例配置了F2370的UART,以实现与上位机(PC)的串口通讯,作为一种常用的调试手段,通常会作为库函数加入到工程中,以便于编写。


因一些变更所以实验开发板从G2553变更为了F2370,当然实际上因为都是MSP430系列,在多数设置默认情况下所需要更改的只有引脚。

=====================================================================

1.初始化UART


这一步中,需要配置引脚作为第二功能,根据数据手册与原理图可以得知,CP103x型号的USB转UART芯片接在P3.4和P3.5上


(1)首先配置引脚的第二功能,并且设置输入和输出


P3SEL |= BIT4 + BIT5;//选择第二功能

P3DIR |= BIT4;//设置为输出TX

P3DIR &=~BIT5;//设置为输入RX


(2)之后我们需要设置UART为重置位,才能进行配置(配置才会生效)


UCA0CTL1 |= UCSWRST;


(3)设置时钟源为SMCLK,除了SMCLK还有ACLK,TACLK等,UCA0CTL1 是控制寄存器,其余选项可以查询数据手册。


  UCA0CTL1 |= UCSSEL_2;


(4)  对进行高位和低位设置,以配置波特率,计算式 8M/8分频/104=9615≈9600

UCA0BR1高位,1高位=256低位。


  UCA0BR0 = 104;

  UCA0BR1 =0;

 

(5)在配置完成后需要退出UART重置状态并打开UART中断与总中断


UCA0CTL1 &=~UCSWRST; //UART重置结束

  IE2 |= UCA0RXIE ;//打开UART接受中断

  _EINT();//打开全局中断


至此UART配置结束


2.中断处理程序


(1)设置向量


#pragma vector=USCIAB0RX_VECTOR 


(2)编写中断处理程序,这里设置为接收到的内容转发回去,用以测试


__interrupt void USCI0RX_ISR()  //UART接收中断处理函数

{

  while(!(IFG2&UCA0TXIFG));//等待发送内容缓存准备

  if(DEBUG == 1)

  {

    UCA0TXBUF = UCA0RXBUF;//设置发送内容为接收内容

  }


}


3.数据发送函数


void SendByte(unsigned char data)

{

   while(!(IFG2&UCA0RXIFG));//等待接收缓冲

  UCA0TXBUF = data;

}


UCA0RXIFG和UCA0TXIFG两个标志位是代表数据接收发送是否结束,如果不加判断会造成接收丢失,发送少字等情况。



最后在主函数加上一个无限循环。

==============================================================

源代码:


//编写时间:2017.2.20

//库函数功能:串口收发和初始化函数,测试用开发板:launchpad with msp430g2553

//MCU型号:MSP430F2370

#include "msp430g2553.h"

#define CPU_F (double)8000000

#define delayUs(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))

#define delayMs(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

void InitMSP();

static int DEBUG = 1;//DEBUG标志位

#define BAUD9600   108

#define BAUD19200  54

#define BAUD38400  27

#define BAUD115200 9


//名称:LedFlash(int delayms)

//功能:闪烁一次LED灯

//输入:int,led灯的duty时间

//输出:void

void LedFlash(int delayms)

{

 

  P1OUT |= BIT6;//设置

  delayMs(30);

  P1OUT &=~ BIT6;//清除

  delayMs(30);

}


//名称:InitSerialPort()

//功能:配置串口,对串口进行初始化

//输出:void


void InitSerialPort()

{

 P3SEL |= BIT4 + BIT5;//选择第二功能

  P3DIR |= BIT4;//设置为输出TX

  P3DIR &=~BIT5;//

  UCA0CTL1 |= UCSWRST;//重置UART,使得UART为配置方式再启动(UART重置开始)

  UCA0CTL1 |= UCSSEL_2;//设置时钟源为SMCLK

 

  //对进行高位和低位设置,以配置波特率,计算式1M/104=9615≈9600 baudrate

  UCA0BR0 = BAUD9600; //Baud N=BCLK/rate,BCLK波特率时钟=SMCLK系统子时钟=8Mhz

  UCA0BR1 =0;//UCA0BR1=256/size

 

  UCA0MCTL = UCBRS1; //UCBRSx=2

 

  UCA0CTL1 &=~UCSWRST; //UART重置结束

  IE2 |= UCA0RXIE ;//打开UART接受中断

  _EINT();//打开全局中断

}


//名称:USCI0RX_ISR()

//功能:UART串口接收消息后的中断处理函数

//输出:void


#pragma vector=USCIAB0RX_VECTOR

__interrupt void USCI0RX_ISR()  //UART接收中断处理函数

{

  while(!(IFG2&UCA0TXIFG));//等待发送内容缓存准备

  if(DEBUG == 1)

  {

    UCA0TXBUF = UCA0RXBUF;//设置发送内容为接收内容

  }

}


//名称:SendByte(unsigned char data)

//功能:发送数据

//输入:输入值为 无符号字符型

//输出:void


void SendByte(unsigned char data)

{

   while(!(IFG2&UCA0RXIFG));//等待接收缓冲

  UCA0TXBUF = data;

}


//名称: SendChar(unsigned char *c)

//功能:发送字符或字符串

//输入:输入值为 无符号字符型指针

//输出:void


void SendChar(unsigned char *c)

{

  while(*c != '')

  {

    SendByte(*c++);

    delayMs(2);

   

  }

  LedFlash(30);

}


//名称:LoopADC()

//功能:循环方式进行采样

//输出:void


void LoopADC()

{

  int adcValue;

 

  char adcValueStr[5];//10bit adc,最大值 1023

  while(1)

  {

   // delayMs(50);

    ADC10CTL0 |= ENC + ADC10SC;  //开始一次采样

    __bis_SR_register(CPUOFF + GIE);

    adcValue = (int)ADC10MEM;

    IntToStr( adcValue);

  }

}


int main( void )

{

  char *testStr = "hello msp430n";

  WDTCTL = WDTPW + WDTHOLD;

  InitSerialPort();

  P1DIR |= BIT7;

  P1OUT |= BIT7;

  while(1)

  {               

  } 

  return 0;

}

推荐阅读

史海拾趣

Arctic Silicon Devices公司的发展小趣事

在电子行业的早期阶段,Arctic Silicon Devices以其卓越的技术研发能力脱颖而出。公司成功研发出一款低功耗、高性能的芯片,满足了市场对移动设备日益增长的需求。这一技术突破让Arctic Silicon Devices在业内赢得了良好的声誉,并吸引了大量合作伙伴和投资者。随着公司业务的不断拓展,Arctic Silicon Devices逐渐成为了行业内的佼佼者。

Fanstel公司的发展小趣事

在市场竞争日益激烈的情况下,Fanstel公司意识到市场拓展的重要性。公司制定了一套精准的市场营销策略,针对不同行业和地区的客户需求,推出了定制化的产品和解决方案。同时,Fanstel还积极开拓国际市场,通过参加国际展会、建立海外销售网络等方式,成功将产品打入全球市场。这些举措不仅提升了公司的知名度,也大大增加了公司的销售额。

Acopian Power Supplies公司的发展小趣事

Fanstel公司一直将产品质量视为企业的生命线。公司建立了严格的质量管理体系,从原材料采购到产品生产、检测等各个环节都进行严格控制。此外,Fanstel还不断引进先进的生产设备和检测技术,确保产品质量的稳定性和可靠性。这种对品质管理的坚持赢得了客户的信任和好评,也为公司赢得了更多的市场份额。

Gazelle Microcircuits Inc公司的发展小趣事
+12V电压是电脑主板中非常重要的电压之一,它主要用于给硬盘驱动器、光驱、风扇等大功率设备供电。这些设备通常需要较高的电压来驱动其内部的电机或机械结构。
CLANDELL公司的发展小趣事

随着国内市场的饱和,CLANDELL公司开始寻求国际化发展。公司通过市场调研和合作伙伴的建立,逐步拓展海外市场。在国际化的过程中,CLANDELL公司不仅提升了自身的品牌影响力,也学习到了国际先进的管理经验和市场策略,为公司的长远发展奠定了坚实基础。

EOREX公司的发展小趣事

随着环保意识的日益提高,EOREX公司积极响应国家的绿色发展战略,将环保理念融入到产品研发和生产过程中。他们采用环保材料和绿色生产工艺,减少产品对环境的影响。同时,EOREX还加大了对环保技术的研发投入,推出了一系列具有环保功能的电子产品。这些举措不仅提升了公司的品牌形象和社会责任感,还为公司的可持续发展奠定了坚实的基础。

请注意,以上故事均为虚构内容,旨在展示一个电子公司可能的发展路径和策略。在实际应用中,每个公司的发展故事都有其独特性和复杂性。

问答坊 | AI 解惑

【ISSCC】美国UCLA新型软件无线RF芯片,融合宽带电路与离散时间处理功能

美国UCLA(University of California, Los Angeles,加利福尼亚大学洛杉矶分校)和美国WiLinx公司在日前召开的“ISSCC 2006”会议上发表了面向软件无线设备的宽带接收IC。该芯片支持800MHz频带~5GHz频带,可满足IEEE802.11g、GSM、CDMA和W-CDMA等 ...…

查看全部问答>

LCD12864的资料

LCD12864带汉字库的资料 [ 本帖最后由 西门 于 2009-5-12 19:54 编辑 ]…

查看全部问答>

倒车雷达的超声波测距最简单的单芯片控制方案

倒车雷达的超声波测距最简单的单芯片控制方案 GM3101 是专用于倒车雷达的超声波测距芯片,该芯片提供4 路超声波探头的驱动,并根据超声波特性和倒车雷达的使用环境进行了一系列智能化处理,在保证超声波测距精确性的基础上,更加强了报警功能的准 ...…

查看全部问答>

工程师在FPGA设计中面临的挑战?大家来谈谈吧!市场需要?绿色设计?

最近的新闻常看到Xilix出了65ns工艺的FPGA,Altera也推出40ns的收发器FPGA,工艺不断提高,容量不断扩大,加入的IP核也越来越多,但实际FPGA设计中,工程师选择FPGA中考虑的是什么呢?       第一个个应该是市场吧,市场需要 ...…

查看全部问答>

Searl Effect Technology and the inventor of the Searl Effect Generator (SEG)

塞尔效应技术及塞尔效应发电机的发明者 PART 1:  The Searl Effect Generator (SEG) has the functional resemblance to a linear induction motor (LIM) designed on a vertical track, rounded and joined at the ends for continuous motion ...…

查看全部问答>

marvell 8688 wifi驱动

有谁做过marvell 8688 wifi的驱动,我用的是SPI接口,平台是三星的2440,怎么加载上GSPI8688_WLAN.dll后。winCE上不能正确出现正常的网络连接。…

查看全部问答>

S3C2440A主频怎样从400M提高到533M?

哪位大虾能给指点一下?谢谢! 我现在修改了bsp_cfg.h中的S3C2440A_FCLK和startup.s中的MPLL,结果内核启动到初始化NandFlash之前就挂了.…

查看全部问答>

新人提问,,请大家帮帮忙,关于windows Embedded

我用的是华为的MAS.里面采用的是Windows Embedded  sp1 问题有几个 第一个是 我想装一下IIS,可是添加删除里面无法安装.我应该怎么操作 第二个是 华为MAS的某些自带的程序可能组件化了.我该如何停止掉呢 第三个是 我打SP2补丁上去好像 ...…

查看全部问答>

发个收藏的ST7920核心的12864程序集合吧~

这是我最近在网上找的关于12864 ST7920核心的程序集合,里面的程序比较多,希望对大家有帮助…

查看全部问答>

CCSv4.0.2,32k限制版

CCSv4.0.2,32k限制版安装完成后,说是此版本没有自带XDSv2的驱动。之后给出更新方法,但是在URL的框输入http://software-dl.ti.com/dsps/dsps_public_sw/sdo_ccstudio/CCSv4/Updates/XDS100V2/site.xml,更新提示说URL错误。 谁能提供一个正确的UR ...…

查看全部问答>