2875|4

85

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【我与TI的结缘】——LaunchPad一路走来 [复制链接]

  本帖最后由 易兮水 于 2015-1-13 10:43 编辑 个人来讲,研究学习方面,我是既主动又被动,一方面,本人对电子技术方面特别感兴趣,而且也是生物医学工程专业,说白了,就是医疗电子。另一方面,平常好玩儿,也不愿投入更多的时间在学习上,偶尔学习的时候,感觉特别棒! 第一次接触Ti的产品,当然数Ti的LaunchPad了,12年的时候把,G2553系列的开发板,而且还是我室友送我的,他现在已经是个技术大流了,已经签约中兴上海总部(确实流弊),他经常逛论坛,那个LaunchPad就是他免费换来的,12年本科毕业,我工作,他继续读研,我要过来自己玩儿(其实后来就是简单的了解了下,然后又把他丢一旁了,啊哈哈)。后来,我工作了两个月,辞职啦,13年,我又考研杀回来了!么么哒!因为是第二次考,天天晚上Dota到深夜,照样考回来了!还是底子好! 一、MSP430G2553 嗯嗯,该切入正题了!13年末,传感器的课程,最后的结课题目是通过总线连续读取三个DS18B20温度传感器数据,因为当时看漏了总线协议的一个“拉高电平”操作,导致最后结果一直没有得出来,被迫使用同学的51单片机完成了!开学来,任性起来,又继续拿出LaunchPad,终于弄出来了!那个时候的印象不是很深,我拿出原来的论文报告看看, a.可能最有用也是最方便的就是G2553的时钟了
  1. <font face="Tahoma"><font size="4">BCSCTL1=CALBC1_8MHZ;</font></font>
  2. <font face="Tahoma"><font size="4">DCOCTL=CALDCO_8MHZ;</font></font>
复制代码
从后续接触的MSP430F149、MSP430F1232、MSP430F5528来看,就只有G2553是这样方便定义时钟,其余的通过两个寄存器来配置的,好像都不是精确时钟,我也没去配置,都是利用常用的些时钟,要么就是上电开始的DCO时钟,利用的TimerA中断,我都是开始用示波器查看的DCO频率,然后估算TimerA的CCR0取值,=_="表嘲笑我,要求不高的项目,不在乎拉~ b.端口赋值,刚看到这里可以这样用,
  1. <font face="Tahoma"><font size="4">#define DataPort </font></font><font face="Tahoma"><font size="4">P1OUT</font></font><font face="Tahoma"><font size="4"> </font></font>
  2. <font face="Tahoma"><font size="4"> DataPort = cmd; </font></font>
复制代码
今天调试F5528的时候,发现这样不能直接给P1赋值,还是直接这样写:P1OUT = cmd; c.之前提到时钟,我后来发来一个帖子的内容,如下,大家很容易看懂,这个就是准确的延时函数,当然,前提是你知道CPU时钟(MCLK),很多型号默认的上电PUC时钟是~800KHz //没想到在CCS下面下面的定义同样有效,一开始以为只有在IAR环境下可以直接使用精确定时程序!
  1. #define CPU_F ((double)1000000)
  2. #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
  3. #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
复制代码
好了,接下来有重头戏,时钟解读,这部分可能我比较慢热,弄了好久才弄懂,分享给大家!初学者,最好多拿时钟实战,这部分弄懂了,430差不多就入门了! 时钟源:“晶振” “中间机构” CPU及外设 __________________________________________________________________________________________ 低/中/高 LFXT1CLK ACLK ADC10 VLOCLK ------分频------> MCLK -------分频-------> TimerA 可选高频 XT2CLK SMCLK ....... 内置数字时钟DCOCLK CPU 大家应该都懂了吧,尤其是在低功耗的程序中要用到,我随便举个例子,假如后续程序只保留的TimerA工作,其他功能都关闭,包括CPU,假设在LPM3下嘛,而TimerA可以选择ACLK和SMCLK,而LPM3可能必须要关闭SMCLK,所以我们就只能选择ACLK(TimerA寄存器配置),ACLK有LFXT1CLK提供,常用的32.768KHz,因为低功耗LPM下CPU MCLK等之类要关闭的。 二、MSP430F149 这是13年末的作业,我们硬是拖到了14年初,正月初八我就到校了,那个时候正好把上面的那个作业弄通了。这次的作业是电子血压计。 这里主要使用了内置的ADC12,代码如下
  1. P6SEL |= 0x03; //A/D通道A0、A1使能,P6.2/A2,P6.3/A3
    ADC12CTL0 = ADC12ON+MSC+SHT0_2+REFON+REF2_5V;
    //开启并设置ADC12,多次连续采样,采样保持时间16个ADC12CLK周期
    //These bits define the number of ADC12CLK cycles in
    //the sampling period for registers ADC12MEM0 to ADC12MEM7.
    ADC12CTL1 = SHP+CONSEQ_3+ADC12SSEL_1;
    //使用低频输出时钟,32.768KHz,Repeat-sequence-of-channels
    ADC12MCTL0 = INCH_0+SREF_1;
    //Channel A0,静态压力值,AVREF
    ADC12MCTL1 = INCH_1+SREF_0+EOS;
    //Channel A1,脉搏波,AVCC
    //ADC12IE = 0x02; //A1中断使能 //等待参考电压启动
    ADC12CTL0 |= ENC; //开启转换
    ADC12CTL0 |= ADC12SC; //使能转换
复制代码
额,突然发现没什么好分析的,附上几个用到的滤波器吧,数字式的。
  1. //int tmp_v[450];
  2. /*--------限变化率滤波----------
  3. for(i=0;i<n_P;i++)
  4. tmp_v[i]=Points[i].p2p;
  5. for(i=3;i<n_P-3;i++)
  6. {
  7. if(abs(tmp_v[i]-tmp_v[i-1])+abs(tmp_v[i]-tmp_v[i+1])>500)
  8. Points[i].p2p= (tmp_v[i-2]+tmp_v[i-1]+tmp_v[i+1]+tmp_v[i+2])/4;
  9. Points[i].p2p=(Points[i-1].p2p+Points[i].p2p+Points[i+1].p2p)/3;
  10. }
  11. */
  12. /*
  13. --------三点滑移平均------------
  14. for(i=0;i<n_P;i++)
  15. tmp_v[i]=Points[i].p2p;
  16. for(i=3;i<n_P-3;i++)
  17. {
  18. Points[i].p2p=(tmp_v[i-1]+tmp_v[i]+tmp_v[i+1])/3;
  19. }
  20. */
  21. /*---去掉直流分量(整体向下平移)--------------------------
  22. for(i=3;i<n_P-3;i++)
  23. {
  24. if(p2p_min>Points[i].p2p)
  25. {
  26. p2p_min=Points[i].p2p;
  27. //n_min=i;
  28. }
  29. }
  30. for(i=3;i<n_P-3;i++)
  31. {
  32. Points[i].p2p=Points[i].p2p-p2p_min;
  33. }
  34. */
复制代码
(更新)查了些资料,一般使用ANT-US9116-006-N血压传感器,计算血压的时候,利用系数法算出收缩压和舒张压。 PS:这个项目也是个熬夜的货,不过最后结果有点乱,基本思路是对的,如果有时间,我倒是希望可以拿出来自己修改,前几天碰到我同学遇到的一个问题,拿出来跟大家分享下,开门狗中断复位,开门狗初始化的时候,需要再次加上“时钟源定义”这段,否则程序总是会飞,虽然用的很少,还是当作新技能get起来吧! 三、MSP430F1232 这次是公司那边做的手环,现在差不多就是我的毕业设计题目了,经历的时间比较长,这边我们需要注意的,可能就是Flash读写的问题了,擦除很简单,设置好,空写即可。
  1. void erase_flash(unsigned short *ptr)
  2. {
  3. FCTL2 = FWKEY + FSSEL_1 + FN1; // MCLK/3 for Flash Timing Generator
  4. FCTL1 = FWKEY + ERASE ; // Set Erase bit, allow interrupts
  5. FCTL3 = FWKEY; // Clear Lock bit
  6. *ptr = 0; //Enable clear operation
  7. while(FCTL3 & BUSY);
  8. }
复制代码
接下来是写Flash,这里的字符串定义是短整型:unsigned short 16 bits 0 to 65535 2byte,最初我查手册显示是:位、字节、字三种方式均可编程,但是我以为每写一个字的时候,地址是按照一个字节一个字节移动,实际我错了,Flash_ptr1++已经是按照一个字一个字的移动(地址指针)!!!
  1. unsigned short Data[20];
复制代码
  1. void write_SegC()
  2. {
  3. __disable_interrupt();
  4. unsigned int i;
  5. FCTL2 = FWKEY + FSSEL_1 + FN1; // MCLK/3 for Flash Timing Generator
  6. FCTL3 = FWKEY; // Clear Lock bit
  7. FCTL1 = FWKEY + WRT; // Set WRT bit for write operation, single byte write
  8. for (i=0; i<20; i++)
  9. {
  10. *Flash_ptr1++ = Data[i]; // Write value to flash
  11. }
  12. FCTL1 = FWKEY; // Clear WRT bit, off
  13. FCTL3 = FWKEY + LOCK; // Set LOCK bit
  14. write_count++;
  15. __enable_interrupt();
  16. }
复制代码
下面是读取Flash,代码如下,这边又是跟上面相反,是一个字节一个字节,Flash地址指针也是一个字节一个字节的偏移,还有需要注意的是,因为我是需要读取字(2个字节),Flash存储的时候是低位在前,高位在后,所以别弄错了!
  1. short copy_flash2rom(unsigned short RF_ptr)
  2. {
  3. unsigned char *Flash_ptrC; // Segment C pointer
  4. unsigned int i;
  5. unsigned short ptr_offset = RF_ptr;
  6. Flash_ptrC = ( unsigned char *)0xf000 + ptr_offset; // Initialize Flash segment C pointer
  7. FCTL1 = FWKEY + ERASE; // Set Erase bit, allow interrupts
  8. FCTL3 = FWKEY; // Clear Lock bit
  9. FCTL1 = FWKEY + WRT; // Set WRT bit for write operation
  10. for (i=0; i<20; i++, ptr_offset++)
  11. {
  12. TxBuf1[i] = *Flash_ptrC++; // copy value segment C to segment D
  13. }
  14. for (i=0; i<20; i++, ptr_offset++)
  15. {
  16. TxBuf2[i] = *Flash_ptrC++; // copy value segment C to segment D
  17. }
  18. for (i=0; i<20; i++, ptr_offset++)
  19. {
  20. TxBuf3[i] = *Flash_ptrC++; // copy value segment C to segment D
  21. }
  22. for (i=0; i<20; i++, ptr_offset++)
  23. {
  24. TxBuf4[i] = *Flash_ptrC++; // copy value segment C to segment D
  25. }
  26. FCTL1 = FWKEY; // Clear WRT bit
  27. FCTL3 = FWKEY + LOCK; // Set LOCK bit
  28. //Sig=1;
  29. return ptr_offset;
  30. }
复制代码
(更新)运动手环,原先采用ADI的ADXL345数字式,外置AD进行采集,功耗方面,200mAh电池可以用三四天,换了一个飞思卡尔的MMA7455传感器,功耗高不说,分辨率还低,就勉强能用两天(48小时),现在采用最新的ADXL362,功能很强大、功耗可以做的很低!后来发现无线传输没有必要,准备改用蓝牙模块,毕竟现在的便携式设备都配备蓝牙模块,成本不是很高,但是很实用! PS:这里我使用的是台湾产24L01仿造挪威的NRF24L01,调试的过程也出现了问题,几个人找了一个多星期,发现这里接收端接收到信号是无法自动应答的,所以发送端会死在接受应答那里!!网上大篇的程序,都没有提到这一点!! 四、MSP430F5528 因为要使用到USB模块,提到这个,我头都大了,不仅仅开始看手册还是看功能强大的传感器,都花了很多时间,开始准备拿参考例程调试的时候,又耽误了好多时间。因为参考例程是基于CCS工程的,虽然之前用过,但是现在用IAR很久了,电脑里就装了这个,当然低版本的CCS还无法打开这个程序好像,所以尝试了好几个版本,后来用的最新的6.X版本。IAR移植的时候,需要添加预定义的部分,而USB自带的那些基础文件,IAR几乎编译都会出错,我猜可能CCS比IAR自带了些东西吧,后来远程让我同学用IAR6.x版本打开看了下,根据他给我看的“工程文件”结构,我自己重新添加,包括那些预定义的路径,但是就是出错。 总结下,大家还是别用低版本的CCS或者IAR折腾USB程序了,老老实实用官方的,我也没让我同学试试,IAR新版本的编译有没有出错。反正就是用新版本的CCS就好了,而且文件还不能放在中文路径下,之前IAR是可以的,CCS会出错,反正是各种毛病,我就不说了!!后来,又来问题了,利尔达的430-UFET烧录不进程序(其实一年前遇到过,我忘了),一直在鼓捣!!其实,系统每次下载的时候都会查看固件,提示你更新下载器估计,不用管它,选择“忽略”就好了。 PS:至于这个下载,我们可能习惯了官方的这个JTAG,基本上要用8个脚,后来采用了SBW下载方式,人家说下载的时候可能有点慢,我看基本上差不多嘛,管脚用的还少,爽歪歪!还不占用其他几个GPIO口,使用VCC GND TEST/SBWTCK RST/NMI/SBWTDIO四个脚,尤其是对那些体积要求很高的项目来讲,比较有意义!而且,布线的时候,你会发现,也是很有用的,免得你为走线、元器件布局的时候那一块头疼!借鉴下吧! 总结下:我几乎就是为了使用USB才采用这个系列,USB有那么几种模式:CDC HID MSC,大容量MSC模式我没怎么会,也懒得深入研究,时间紧,CDC是可以生成COM口的,驱动可以利用TI提供的软件生成,HID没有,HID的驱动系统自带,虽然公司已经做好的软件是基于COM口的,但是不方便调试,我就用了HID,利用HID的Java软件查看数据,回头移植也方便。还有,市面上很少有1.4K 1%精度的电阻,有点坑,买的1.5K的,我之前随便焊接了个1.5K,精度好像是5%还是10%,我也不知道,就是普通的电阻,也是可以的,就是每个包传输的间隔大概20ms的样子,再低就丢包!!!没仔细去研究,网上相关的资料少,大家用过的,可以跟帖交流哦!! 五、MSP430F149 最近帮同学的一个毕业设计,又用了MSP430F149,主要时间花在LCD驱动力,我觉得一个没有问题的操作,一不小心,字库被我擦除了,很是无语!只能用软件自己再写。液晶型号FYD70-8048-256,480X800的分辨率,需要程序的我可以给你哈,其实改改他们官方提供的标准C程序就可以了,一开始觉得有问题,后来发现是自己的问题,因为用430驱动,单独利用5V给液晶供电,所以要共地哦!!后来偶尔不共地也没有问题!反正只要初始接上去屏幕上满是彩色雪花就说明液晶可以正常工作了。 瓦咔咔!!这样看来,我研究生阶段一年半都是在跟Ti的产品打交道,现在还担心,学习是不是太狭隘了,会不会影响找工作??接下来,还要抽空继续努力学习,STM32,FPGA等等,要不然就被自己的毕业设计给套牢了,太单一了,影响找工作哦~~差不多了,结帖啦!!

最新回复

期待更多精彩内容与大家分享!  详情 回复 发表于 2015-1-13 09:02
点赞 关注(1)
 

回复
举报

85

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
我先占一楼,万一更新帖子,或者统计别人的心得用~~
 
 
 

回复

329

帖子

27

TA的资源

纯净的硅(初级)

板凳
 
写的不错

点评

有没有把大神夸的淋漓尽致?  详情 回复 发表于 2015-1-13 10:14
 
 
 

回复

6066

帖子

92

TA的资源

裸片初长成(初级)

4
 
期待更多精彩内容与大家分享!
 
 
 

回复

85

帖子

1

TA的资源

一粒金砂(中级)

5
 



有没有把大神夸的淋漓尽致?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表