3797|5

13

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【MSP430F5529测评】3. CCS开发环境 & UART 传输波形数据 [复制链接]

本帖最后由 wuguangtao 于 2020-11-7 09:44 编辑

MSP430F5529LP CCS开发环境 && UART通信测试

前面两节使用的energia是非常方便测试的集成软件,但是集成度过高,不太适合自定义,对于复杂需求还是需要通过CCS或者IAR等开发工具去实现。

今天着重讲讲CCS开发环境的搭建和使用,然后在CCS中通过寄存器编程实现UART 数据传输功能。并使用串口调试工具进行接收和显示波形。

CCS10 开发环境

 

下载安装CCS10

最新CCS已经是CCS10,到官网下载最新版即可。

 

 

安装过程比较简单,不断下一步就可以了。

 

 

装好后的首页是下面这样的,可以导入、新建项目。还有简单的视频教程,方便初学者入门使用。

 

 

resource explorer

注意到首页还有个醒目的Resource Explorer,就是资源管理器,里面有非常非常丰富的资源,包括各种TI MCU、开发板的官方资料(datasheet,开发板原理图,例程,函数库等),一定要善加利用。

 

 

插上板子以后可以自动识别MSP430F5529LP, 在左侧目录就会自动过滤出对应的开发工具和软件资源。


为了方便离线查阅,可以右键下载保存至本地。

 

 

软件资源中包含大量的例程,针对不同的片上外设和特定应用,分寄存器编程和函数库编程两大类,每一类都有非常详细完整的例程,我们可以根据需求将例程直接导入到CCS开发环境当中。


 

上图是一个最简单的寄存器例程,关闭了看门狗以后就循环闪烁LED灯。在右上角有一个导入按钮,点击后会自动出现在开发目录当中。

PS:值得说明的是,可能是国内网络的问题,resource explorer有时候无法打开,所以非常有必要下载到本地,如果软件中不能打开,也可以通过浏览器在官网下载 MSP430WARE

库函数

下面看看库函数,在资源管理器中有专门的Driver Library, 下面有用户手册和例程,每个例程对应一个box的图标,后面三点可以用来导入。非常方便有木有。

而且提供了一个EmptyProject,只包含函数库的头文件和一个main函数,当做模板再合适不过了。

 

其中每个例程下面都有个文件夹 driverlib, 就是我们的函数库了,使用函数库的时候,有可能需要看看库函数源码,对理解和优化代码会有帮助。

 

 

新建项目

ok, 接下来看看如何新建项目,菜单栏 Project-> new CCS project , 如下图所示,可以创建空项目,也可以使用模板,比如LED blink

 

 

这就是寄存器例程中最简单的那个。

 

 

导入energia代码

从新建项目的对话框我们可以看到,CCS还支持从Resource explorer 和 energia导入,Resource explorer导入已经说过了,接下来看下energia部分。

CCS居然也支持energia代码编译,厉害了。导入流程如下:

 

 

首先选择energia的安装路径。

 

然后选择代码路径,这里可以新建。

 

 

CCS根据energia安装路径自动检索出例程,我们只需选择所需然后导入即可。

 

 

确定后来了个提示框,yes继续。

 

 

这样就出现在左侧目录了,同样可以正常编译下载。

 

好啦,至此关于CCS开发环境的基本情况就介绍完了,其它更多功能慢慢探索吧。

UART 通信

安装配置好了CCS,当然要实际操练起来,那么还是先拿UART下手,但是这次不是使用函数库,而是使用寄存器编程。

为了直接使用开发板集成的串口,我们需要选择USCI_A1 UART 接口,但是resource explorer并没有与之对应的例程,只有USCI_A0 UART的,没关系。只是接口不一样,导入后修改一下就可以。把例程中的P3.3 和 P3.4 改成P4.4, P4.5, 同时将对应的寄存器都从A0改为A1就可以了。

基本通信

下面就是使用例程修改接口后的UART程序。

//******************************************************************************
//   MSP430F552x Demo - USCI_A1, 115200 UART Echo ISR, DCO SMCLK
//
//   Description: Echo a received character, RX ISR used. Normal mode is LPM0.
//   USCI_A1 RX interrupt triggers TX Echo.
//   Baud rate divider with 1048576hz = 1048576/115200 = ~9.1 (009h|01h)
//   ACLK = REFO = ~32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz
//   See User Guide for baud rate divider table
//
//                 MSP430F552x
//             -----------------
//         /|\|                 |
//          | |                 |
//          --|RST              |
//            |                 |
//            |     P4.4/UCA1TXD|------------>
//            |                 | 115200 - 8N1
//            |     P4.5/UCA1RXD|<------------
//
//   Bhargavi Nisarga
//   Texas Instruments Inc.
//   April 2009
//   Built with CCSv4 and IAR Embedded Workbench Version: 4.21
//******************************************************************************

#include <msp430.h>

int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P4SEL |= BIT4+BIT5;                       // P4.4,5 = USCI_A1 TXD/RXD
  UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA1CTL1 |= UCSSEL_2;                     // SMCLK
  UCA1BR0 = 9;                              // 1MHz 115200 (see User's Guide)
  UCA1BR1 = 0;                              // 1MHz 115200
  UCA1MCTL |= UCBRS_1 + UCBRF_0;            // Modulation UCBRSx=1, UCBRFx=0
  UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCA1IE |= UCRXIE;                         // Enable USCI_A1 RX interrupt

  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled
  __no_operation();                         // For debugger
}

// Echo back RXed character, confirm TX buffer is ready first
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_A1_VECTOR))) USCI_A1_ISR (void)
#else
#error Compiler not supported!
#endif
{
  switch(__even_in_range(UCA1IV,4))
  {
  case 0:break;                             // Vector 0 - no interrupt
  case 2:                                   // Vector 2 - RXIFG
    while (!(UCA1IFG&UCTXIFG));             // USCI_A1 TX buffer ready?
    UCA1TXBUF = UCA1RXBUF;                  // TX -> RXed character
    break;
  case 4:break;                             // Vector 4 - TXIFG
  default: break;
  }
}

例程首条指令都是关闭看门狗,然后配置UCSI_A1的UART接口、时钟SMCLK、波特率(115200bps), 之后开启UART接收终端,最后进入LPM0低功耗模式,并开启全局中断使能GIE。

在接收中断中,将接收到的字节原封不动的发送回去,就是这么简单。测试过程就不写了,比较简单。

传输波形数据

接下来再来修改下例程,除了自动回传外,我们来发送一些波形数据,然后在PC端使用串口调试工具(Windows 应用商店下载的串口调试工具),这款工具有个根据串口数据自动绘图的功能,有点意思,拿来测试再好不过啦。

#include <msp430.h>
#include <stdio.h>
#include <string.h>

void send_char(char c)
{
    while (!(UCA1IFG&UCTXIFG));             // USCI_A1 TX buffer ready?
    UCA1TXBUF = c;
}

void send_strings(char *str)
{
    while(*str != '\0') {
        send_char(*str++);
    }
}

int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P4SEL |= BIT4+BIT5;                       // P4.4,5 = USCI_A1 TXD/RXD
  UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA1CTL1 |= UCSSEL_2;                     // SMCLK
  UCA1BR0 = 9;                              // 1MHz 115200 (see User's Guide)
  UCA1BR1 = 0;                              // 1MHz 115200
  UCA1MCTL |= UCBRS_1 + UCBRF_0;            // Modulation UCBRSx=1, UCBRFx=0
  UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCA1IE |= UCRXIE;                         // Enable USCI_A1 RX interrupt

  __delay_cycles(50000);                    // waiting for device ready
  send_strings("hello world!\r\n");
  __bis_SR_register( GIE);                   // Enter LPM0, interrupts enabled

  unsigned int i=0;
  unsigned int line1, line2;
  char tmp[32] = {0};
  while(1){
      i++;
      line1 = 20 * i + 1;   // y = 20x + 1
      line2 = i * i / 4;    // y = x^2 / 4

      memset(tmp, 0, sizeof(tmp));
      sprintf(tmp, "line1=%d, line2=%d\r\n", line1, line2);
      send_strings(tmp);

      __delay_cycles(500000);

      if (line2 >= 32768)
          break;
  }
  __bis_SR_register(LPM0_bits);              // Enter LPM0
  __no_operation();
}

// Echo back RXed character, confirm TX buffer is ready first
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_A1_VECTOR))) USCI_A1_ISR (void)
#else
#error Compiler not supported!
#endif
{
  switch(__even_in_range(UCA1IV,4))
  {
  case 0:break;                             // Vector 0 - no interrupt
  case 2:                                   // Vector 2 - RXIFG
    while (!(UCA1IFG&UCTXIFG));             // USCI_A1 TX buffer ready?
    UCA1TXBUF = UCA1RXBUF;                  // TX -> RXed character
    break;
  case 4:break;                             // Vector 4 - TXIFG
  default: break;
  }
}

 

代码功能比较简单,实现了一个UART发送字符串的功能函数send_string, 然后在发送一个hello world!之后开始发送两条波形数据。

发送格式参考调试工具的说明信息:


波形通讯协议: 

名称 = 数值 + "\r\n" 。一行中包含多条数据可以用 ‘,’ 分割。


例:

添加两条曲线, 名称分别为 Line1 Line2

两种字符串格式
Line1=10.0 , Line2=200\r\n   以回车换行结束。
Line1=10.0 , Line2=200,   以逗号结束。

编译下载

 

使用工具栏的工具进行编译(build), 下载(flash) 或者调试(debug)

 

 

以上操作会伴随着一些log,如下所示,有编译过程,已经对代码的优化建议等等。如果编译出错会有error信息。

 

 

UART波形数据接收显示测试

 

好啦,一切准备就绪,编译上述代码,flash到开发板,然打开串口调试工具。

下面来看看测试结果,首先看到的是hello world!, 然后是不断接收到的两组波形数据。

 

然后切到波形显示界面,这里需要我们手动添加曲线名称,名称和发送的要保持一致,否则无法显示。

 

 

由于自动回传功能还在,我们还可以使用调试工具发送一个数据帧,搞些小破坏。这样调试工具收到后就多了些尖刺,哈哈。

 

 

小结

 

工欲善其事必先利其器,学会开发工具的使用是非常必要的,同时善于查阅官方资料也是非常重要的,本章首先讲述了CCS软件的安装和使用,最后以UART串口通信为例说明其开发流程,结合串口调试工具完成了一个简单的测试。

最新回复

挺好的,谢谢分享   详情 回复 发表于 2020-11-9 21:00
 
点赞(1) 关注

回复
举报

1942

帖子

2

TA的资源

版主

沙发
 

之前大学电子设计大赛用的就是这款芯片,还不错,你这写的步骤有点详细,点赞!

 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

板凳
 

CCS集成energia了?好怪异。

 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

4
 
freebsder 发表于 2020-11-6 22:02 CCS集成energia了?好怪异。

类似插件吧,可以导入energia用的库,也可以正常编译下载,挺方便的。

 
 
 

回复

1万

帖子

203

TA的资源

管理员

5
 

TI MSP430F5529测评

汇总贴:https://bbs.eeworld.com.cn/thread-1146790-1-1.html

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 

回复

2618

帖子

0

TA的资源

纯净的硅(高级)

6
 

挺好的,谢谢分享

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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