历史上的今天
返回首页

历史上的今天

今天是:2025年02月20日(星期四)

正在发生

2020年02月20日 | MSP430F5438A系列之串口通讯

2020-02-20 来源:eefocus

前言:


不知不觉,已经毕业快一年!看到某些大佬们在专栏里写了上百篇技术博客,内心还是很膜拜的。职场菜鸟一枚,没有其他挣钱的门路,为了养家糊口,只能默默做技术。以前在学校的时候,学的东西都是皮毛,说白了就是略知一二,还吹牛逼。工作就不一样了,特别是做技术,需要为自己所写的每行代码负责。不然,后果很严重!


串口通信应用广泛,将下位机关键信息通过串口输出到PC机,看起来舒服、用起来方便,在做调试的时候会经常用到。由于项目中使用的控制器是TI公司MSP430F5438A这款芯片,以后所有的程序都是基于该芯片。


本次需要实现的功能:单片机判断串口0收到的字符,输出相应的字符串到上位机。


下面直接上代码:


#include "in430.h"                               //本征函数库,比如使用_NOP函数就需要添加该头文件

#include "msp430x54xa.h"                         //MSP430F5系列控制器专用头文件

unsigned char buffer0[] = {"rnHello! Welcome to MAP430F5438A!rn"}; 

unsigned char buffer1[] = {"rnSorry. You are wrong! See you lala!rn"};  

 

 

/**********延时函数**************/

void delay(unsigned int n)

{

  unsigned i,j;

  for(i=0;i    for(j=0;j<1000;j++);

}

 

 

/**********串口0初始化函数**************/

void usartInit()

{  

  P3SEL = BIT4 + BIT5;                      // 选择端口的第二功能,P3.4,5 = USCI_A0 TXD/RXD  

  UCA0CTL1 |= UCSWRST;                      // 状态机复位

  UCA0CTL1 |= UCSSEL_1;                     // 选择串口时钟源,CLK = ACLK

  UCA0BR0 = 0x03;                           // 两个寄存器配置串口的波特率,32kHz/9600=3.41 

  UCA0BR1 = 0x00;                           //

  UCA0MCTL = UCBRS_3+UCBRF_0;               // UCBRSx=3, UCBRFx=0

  UCA0CTL1 &= ~UCSWRST;                     // 状态机置位

  UCA0IE |= UCRXIE;                         // 使能 USCI_A0 RX接收中断  

void main(void)  

{  

 

 

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT  

  usartInit(); 

  _EINT();                                  //开总中断

  

  while(1)

  {  

    

  }

}

/**********中断函数**************/

#pragma vector=USCI_A0_VECTOR 

__interrupt void USCI_A0_ISR(void) 

{  

  unsigned char *p0,*p1;  

  p0 = buffer0;

  p1 = buffer1;

  unsigned char rxData;

  switch(__even_in_range(UCA0IV,4))  

    {  

       case 0:break;                             // Vector 0 - no interrupt  

       case 2: rxData = UCA0RXBUF;               // Vector 2 - RXIFG 接收中断                  

               if(rxData == 'A')

               {

                 while(*p0 != '') 

                  {

                    UCA0TXBUF = *p0++;

                    while(!(UCA0IFG&UCTXIFG));

                    delay(5);

                  }             

                }

               else

               {

                 while(*p1 != '') 

                  {

                    UCA0TXBUF = *p1++;

                    while(!(UCA0IFG&UCTXIFG));

                    delay(5);

                  }                                       

               }  

              break;  

       case 4:break;                             // Vector 4 - TXIFG 发送中断 

       default: break;  

    } 

}


测试结果如下:发送字符“A”,返回“Hello! Welcome to MSP430F5438A!”;


              发送字符“F”,返回“Sorry. You are wrong! See you lala!”;                       

MSP430F5438A有四个串口,使用以上程序模板,仅需修改串口初始化函数以及中断函数的串口号,就可以很方便的移植到其他3个串口中。


下面对时钟源选择和波特率配置进行简要说明:


1、时钟源选择


  UCA0CTL1 |= UCSSEL_1;                     // 选择串口时钟源,CLK = ACLK

     时钟源的选择在寄存器UCA0CTL1中进行配置:

2、波特率配置


  UCA0BR0 = 0x03;                           // 两个寄存器配置串口的波特率,32kHz/9600=3.41 

  UCA0BR1 = 0x00;                           //

  UCA0MCTL = UCBRS_3+UCBRF_0;               // UCBRSx=3, UCBRFx=0


波特率寄存器值需根据芯片数据手册中的推荐值进行配置。由于时钟源与波特率的比值(分频系数)一般来说是非整数值,所以UCA0BR1和UCA0BR0用于配置分频系数的整数部分,UCA0MCTL用于分频系数的配置小数部分:

推荐阅读

史海拾趣

国芯佳品公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐中不可或缺的重要设备。它作为连接电视机与外部信号源的桥梁,不仅承担着接收数字电视信号并将其转换为适合电视播放格式的基本任务,还通过技术的不断演进,极大丰富了用户的视听体验。

从专业角度来看,机顶盒经历了从模拟到数字的飞跃,涵盖了多种类型,如DVB-S(数字卫星机顶盒)、DVB-C(有线电视数字机顶盒)、IPTV机顶盒等。这些机顶盒通过不同的传输介质(如有线电缆、卫星天线、宽带网络)接收信号,并借助内部高效的解码器,将数字信号转换成高质量的音视频流,实现了高清乃至4K超高清的播放效果。

在科普层面,机顶盒的普及极大地推动了家庭娱乐的多元化。它不仅让用户能够收看更多样化的电视节目,还能通过连接互联网,提供电子节目指南、在线视频、网页浏览、社交媒体互动等增值服务。此外,一些先进的机顶盒还集成了智能语音助手、家庭影院功能,甚至支持存储个人媒体文件,让用户的娱乐体验更加个性化、便捷化。

随着5G、云计算、人工智能等技术的不断发展,机顶盒正朝着更高清、更智能、更互动的方向迈进。它不仅将继续作为电视内容的接收和展示终端,更将成为智能家居生态系统中的重要一环,为用户带来更加丰富、沉浸的娱乐享受。

ARMKEIL Microcontroller Tools公司的发展小趣事

在ARM公司的支持下,Keil公司不断进行技术创新和产品升级。其中最具代表性的是Keil C51集成开发环境的推出。这一产品不仅继承了Keil PK51的优点,还在性能、稳定性和易用性等方面进行了大幅提升。Keil C51的推出,极大地满足了市场对嵌入式系统开发的需求,也进一步巩固了Keil公司在行业内的领先地位。

Dearborn Electronics Inc公司的发展小趣事

随着电子行业的快速发展和市场竞争的加剧,Dearborn Electronics Inc.面临着诸多挑战。为了保持竞争优势,公司不断进行转型升级,推出了一系列具有更高性能、更小尺寸、更低成本的新产品。同时,公司也积极拓展新的应用领域和市场,寻找新的增长点。

Aydin Corp公司的发展小趣事

在国内市场取得一定成绩后,Aydin Corp开始积极拓展国际市场。通过与全球知名企业的合作,公司成功将产品打入多个国家和地区的市场。同时,Aydin Corp还积极参加国际电子展会和交流活动,与业界同行建立了广泛的合作关系。这些举措不仅提升了公司的国际知名度,也为公司的持续发展注入了新的动力。

台湾义隆电子(ELAN)公司的发展小趣事

在产品多元化的基础上,义隆电子开始积极拓展国际市场。公司以台湾新竹科学园区为营运总部,在亚洲、美洲等多个国家和地区设立了分支机构和设计中心。通过与全球合作伙伴的紧密合作,义隆电子的产品逐渐进入欧洲、亚洲和美洲等市场,实现了全球布局。

协顺电子(Finecables)公司的发展小趣事

在品质和创新的支撑下,协顺电子开始积极拓展市场。公司通过参加各类展会、举办技术交流会等方式加强与客户的沟通和交流,同时也不断完善自己的销售网络和售后服务体系。此外,协顺电子还注重品牌建设,通过广告宣传、公关活动等方式提升品牌知名度和美誉度。这些努力使得公司的市场份额不断扩大,品牌影响力也逐渐增强。

问答坊 | AI 解惑

我收集到的D类音频功放资料

应求:D类音频功放的设计。 附件内容如下: [local]1[/local]D类音频功放芯片输出级电路的设计 用SG3525作调制器的D类音频功放…

查看全部问答>

6410下,通过IROM_Fusing_Tool.exe制做SD卡启动盘,烧东西进去,SD卡的容量怎么没变化?隐藏了?

6410下,通过IROM_Fusing_Tool.exe制做SD卡启动盘,烧东西进去,SD卡的容量怎么没变化?隐藏了?…

查看全部问答>

【福州招聘】高级嵌入式软件工程师 嵌入式软件工程师 各一名

高级嵌入式软件工程师Sr. Embedded Software Engineer 岗位描述: 1、负责嵌入式软件和产品设计。 2、负责嵌入式软件开发。 任职要求: 1、通信、电子或计算机类相关专业,本科以上学历; 2、五年以上相关工作经验; 3、需要熟悉WINDOWS CE. ...…

查看全部问答>

高薪聘Windows Mobile 底层驱动开发工程师(深圳南山)

高薪聘Windows   Mobile  底层驱动开发工程师 公司网址:www.bitland.com.cn ,偶QQ549503575 ;E-mail:yangsq@bitland.com.cn   有兴趣的可以加我细聊           待 ...…

查看全部问答>

请问:如何在用C语言写的程序中加入CPL和EFLAGS这两个关键字

编译的时候总是说CPL和EFLAGS是undeclared identifier.是不是应该Link什么库? 谢谢!…

查看全部问答>

电赛‘一目了然’历年元器件清单对比(2003--2011)excel格式

历年元器件清单对比    对比看更清楚!!! [ 本帖最后由 GTao_12345 于 2011-8-25 17:08 编辑 ]…

查看全部问答>

STM8 入门神器 上传几张效果图

    SGSTM8-III  开发板使用STMS105S4芯片  含全套 的视频教程,需要的可以联系我         STM8 开发板的1602 液晶屏的效果图   、 12864 液晶的效果图   ADC结合数码管的效果图 ...…

查看全部问答>

AM335x 关于eeprom使用i2c1接口问题

在我的开发板上,eeprom使用的是i2c1接口,内核版本是linux3.2,问题如下 : [ 1.496795] omap_i2c omap_i2c.2: Arbitration lost [ 2.513793] omap_i2c omap_i2c.2: timeout waiting for bus ready root@am335x-evm:~# i2cdetect -r 2 WARNING! ...…

查看全部问答>