历史上的今天
返回首页

历史上的今天

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

正在发生

2020年03月09日 | 学习MSP430G2553总结

2020-03-09 来源:eefocus

个人感觉TI做的这块430就是一坨屎,内部时钟根本不稳,而且连datesheet都没有,但作为比赛指定的东西我们还是学了,这个连51都不如的16位单片机费了我四天时间把内部的模块给调了一遍,但是我调IIC时一直调不出来连时钟都没有,估计是做这块垃圾是连这个模块都没有吧,而且还写的那么复杂,连份像样的技术文档都没有,看的是别的技术文档,真是蛋疼无比,好了牢骚就发这么多,下面开始讲讲这块片子。


首先介绍下MSP430G2553的时钟,这块芯片的时钟源是四个,时钟线是4个;时钟源我们就不说了,一般都是默认的选择内部的DCO作为时钟源,然后通过一系列的嫁接到MCLK SMCLK上,至于为什么这块芯片上不用锁相环的问题我深表不解,这个解释看来只有TI知道,是要低功耗呢,还是因为成本呢?建议大家以后学就学M3内核的STM32吧,低功耗而成本低还很稳。


至于MSP430的时钟寄存器的配置呢,看看内部的时钟图后我们就理解,其实只要配置两个寄存器DCOCTL BCSCTL1

这两个配置的值我还是在一份不知道什么时候的文档里面找到的,DCOCTL中的7-5位是频率选择,后面5位是调节器;BCSCTL1的低4位是频率范围的选择。下面贴出来时钟的配置贴图,如图1

图1 时钟选择图


这块芯片上的时钟你只能配置4M左右,大了都不稳,时钟的信号就是正弦了,你可以通过P1.4脚配置成时钟观察。


时钟介绍结束。


下面说说这块芯片的IO功能,这块芯片管脚只有20个,但是为了实现复杂的功能,所以这块芯片有芯片引脚功能选择寄存器(以P1口为例,P2是一样的,只是里面的P1改为P2),P1SEL P1SEL2;和其他芯片一样这块也有芯片的方向寄存器P1DIR,输入寄存器P1IN,输出寄存器P1OUT,上拉下拉使能寄存器P1REN,寄存器就这些,但是要注意的是输出寄存器P1OUT,这个寄存器在管脚配置成输入时是用于选择上拉下拉电阻的极性的。下面介绍功能:

P1DIR :每位对应一个管脚

        0  输入

        1  输出

P1OUT : 每位对应一个管脚

        0   输出低电平   下拉

        1   输出高电平   上拉

注意:这里的上拉下拉功能,如果你设置成输出,记住千万要关闭上拉下拉使能寄存器,因为资料明确说在P1REN使能时,P1OUT为上拉下拉极性选择,并没有说这些在选择输出时无效,千万要注意噢。

P1IN :每位对应一个管脚

       0  输入时低电平

       1  输入为高电平

注意:这个管脚在输出的时候然后反应管脚的IO电平,这个我测试过,而且这个寄存器的写时是会增加电流消耗的。

P1REN :每位对应一个管脚

      0  禁用

      1  使能

P1SEL P1SEL2的功能选择如图2.


图2

注意:这些里面的选择一定要正确,不然是出不来想要的结果的。



下面介绍串口,因为串口是经常使用的,所以调试串口是很重要的,MSP430这块芯片把spi uart集成一块了,命名曰USCI,虽然我不知道为什么,但我感觉真是很不舒服。对于这个所谓的USCI模块我要说说的是它里面说有B模块,但我们都没有调出来,估计是TI没做这个,也就是说只有A,所以你要是使用uart 就不能再使用spi了,呵呵,也就是调试方法也要改一改了。前面是闲话,下面不介绍寄存器,然后贴出来,uart的程序。

void uart_init(void)

{

  UCA0CTL1_bit.UCSWRST = 1;/*禁止*/

  

  P1DIR_bit.P1 = 0;/*配置接受管脚为输入,上拉*/

  P1OUT_bit.P1 = 1;

  P1REN_bit.P1 = 1;

  P1SEL_bit.P1 = 1;/*配置为第二功能*/

  P1SEL2_bit.P1 = 1;

  

  P1DIR_bit.P2 = 1;/*配置发送管脚为输出*/

  P1SEL_bit.P2 = 1;/* 配置为第二功能*/

  P1SEL2_bit.P2 = 1;

  

  UCA0CTL1_bit.UCSSEL0 = 1;/*选择时钟为SMCLK*/

  UCA0CTL1_bit.UCSSEL1 = 1;

  

  /* 波特率为9600*/

  /* UCABR=BRCLK/baud*/

  UCA0BR0 = 114;

  UCA0BR1 = 0;

  

  UCA0CTL1_bit.UCSWRST = 0;/*复位*/

  

  return;

}


这段是初始化代码。

注意:在文档里面说明了初始化时必须先把UCA0CTL1的UCSWRST位置位,这个是为什么呢?原来是UCSWRST这个位是初始化和复位的,这个时候uart是不工作的,所以我们可以认为我们在操作这个模块时需要控制寄存器失效,所以这个时候写入控制寄存器是安全的,不会出现乱码什么的!



void uart_write(unsigned char uart_w_date)

{

  /*发送数据,并等待发送完成*/

  UCA0TXBUF = uart_w_date;

  //while(UCA0STAT_bit.UCBUSY);

}


这段是写代码。

如果你写代码时下面的那个语句不屏蔽的话,那么程序也会运行。这就是为什么我没删掉的原因,嘿嘿,见谅,但是最好还是不用的好,因为在调试其他代码是它在这条语句上死循环过。


void uart_read(unsigned char *uart_r_date)

{

  /*接受完成,并接受数据*/

  while(UCA0STAT_bit.UCBUSY);

  *uart_r_date = UCA0RXBUF; 

}


这段是读代码。

首先判断下UART的设备是否忙碌,如果忙碌说明这个设备在执行读或者写,这时的读写是错误的,所以要等待下。当然这时因为我是在扫描查询来的,如果是中断就可以不用了,对了这里提一下,上面的初始化没有初始化接受中断,代码在下面

/*

*       中断的方式接受初始化

*/

void uart_enable_interrupt(void)

{

  /*接受中断使能*/

  IE2_bit.UCA0RXIE = 1;

  /*接收中断标志清零*/

  IFG2_bit.UCA0RXIFG = 0;

}

这是中断使能代码。

uart很简单,就不多介绍了,上面的程序是验证过的。


下面介绍下定时,也就是传说中的timer模块,在这块芯片中由于感觉资料不对,所以内部的就不说了,直接说说自己的理解,如果觉得有理大家就这样理解,如果感觉没道理,希望大家多多指教。


这个模块的基础构成是定时器单元也就是计数单元,然后才是输入捕捉,输出比较;既然定时器计数单元是基础,那就先说这个单元,定时器单元首先要有时钟了,时钟可以配置的,所以就有个寄存器的某些位是做这个工作的, 这就是TA0CTL中的TASSEL0  TASSEL1 ,时钟的分频也是在这个寄存器中,分频比是是由ID0 ID1决定的,时钟确定后就要记时钟的数了,但是计数是数值加一还是减一呢,这是由这个寄存器的MC0 MC1决定的;然后时钟数对应着时间了,所以就是定时器了;计数的数值也是存储在寄存器中,这个寄存器就是TA寄存器,这是个16位的寄存器,这就是基础单元------计数单元,剩下的工作都是在这个单元上建立的。


首先是定时单元,这个功能就是比较CCR0的数值和TA的数值,如果相等了,说明定时时间到了,TAIFG就会置位的,如果中断使能了,就发生中断。

然后是输出比较,这个主要是产生PWM波了,产生PWM波是通过CCR0,CCRx设定的,这个模块和计数的方向有关的,具体和计数模式有关;增模式时,如图3.连续模式如图4.up/down模式如图5.

图3 增模式

图4 连续模式

图 5 up/down模式


这些功能是通过寄存器TACCTLx中的CAP位决定的。

推荐阅读

史海拾趣

Alpha 3 Manufacturing公司的发展小趣事

在技术创新的基础上,Alpha 3 Manufacturing公司开始积极拓展市场。公司参加了多个国际电子展会,与全球客户建立了广泛的联系。同时,公司还加强了对市场的调研和分析,针对不同地区和客户的需求,推出了定制化的产品和服务。这些举措不仅提高了公司的市场份额,还进一步提升了公司的品牌知名度和影响力。

GE Solid State公司的发展小趣事
通过声音信号来反映曝光量,使得用户可以通过听觉直观地感知光线的强弱。
HOPERF公司的发展小趣事

在无线射频和传感器领域,HOPERF始终保持着技术创新的领先地位。公司独创的“NextGenRF”算法专利技术,填补了国内在该领域的空白,并获得了多项企业认证、发明专项和软件著作权。这些技术创新不仅推动了公司产品性能的持续提升,还引领了整个行业的发展方向。此外,HOPERF还积极参与国际标准制定,不断提升自身在全球行业中的话语权和影响力。

Gwconnect (Molex)公司的发展小趣事
利用超声波传感器发射超声波并接收回波,通过测量时间差来计算距离,广泛应用于汽车泊车辅助、机器人导航等领域。
HI Microwave Technology Limited公司的发展小趣事

人才是企业最宝贵的资源。HI Microwave高度重视人才培养和团队建设,通过引进和培养高素质的技术人才和管理人才,不断提升企业的核心竞争力。公司建立了完善的人才激励机制和培训体系,鼓励员工不断学习和创新。同时,公司还注重营造和谐、开放的企业文化氛围,激发员工的积极性和创造力。这些措施为公司的持续发展提供了有力的人才保障和智力支持。

Caddell-Burns Manufacturing公司的发展小趣事

为了进一步扩大市场份额,Caddell-Burns Manufacturing公司开始积极寻求国际合作。他们与多个国家的电子制造商建立了稳定的合作关系,将产品出口到世界各地。同时,公司还参加了多个国际电子展会,展示了公司的最新产品和技术成果,吸引了众多客户的关注。这些举措不仅提升了公司的国际知名度,也为公司的长期发展奠定了坚实基础。

问答坊 | AI 解惑

51单片机英文论文

求篇51单片机最好是AT89C51的英文论文 带翻译的最好 谢谢…

查看全部问答>

AVR M128/64开发板全套资料大放送(几大亮点)

我一直都喜欢设置开发板,对开发板也情有独钟,到现在一个设置了两款开发板,第一款是LPC2418的,这一块是AVR mega64/128的。这一块主要是围绕多DS18B20温度采集系统进行的,下面说说它的亮点:   1.  单总线8路DS18B20,8个温度传感器 ...…

查看全部问答>

有人在Windows 7中用过filedisk吗?

我在windows 7中用filedisk mount了一个drive Z: 当我点击computer,浏览Drive C:时,想要umount drive Z:, 却发现返回error:Access is denied 我查看源代码后发现是DeviceIOControl()在发送FSCTL_LOCK_VOLUME 这个request时,访问被拒绝了 ...…

查看全部问答>

wince usb ActiveSync连接问题

我想用ActiveSync通过usb把wince和PC相连,不知道需要加哪些组件,需要什么设置。应该是需要usb function吧,是用usb-rndis,还是usb-serial,能不能具体说明一下,谢谢…

查看全部问答>

加热丝电气选型

现有加热丝3组(每组两相380V,6KW),请问每相电流多少?是不是可以理解成一台6KW电机的功率,还望各位大虾赐教!!!…

查看全部问答>

香版求助:力源免费开发套件(图)

头给了我一个,要我自己学会玩先可是我不知道怎么加外设,那个图上4个红筐要用什么东西接到外设的板上啊,一般外设板用什么东西做?万能板?它和万能板怎么接啊…

查看全部问答>

关于STM32FSMC再请教

查看了很多关于STM32 FSMC连接TFT LCD (ILI9320)的讨论,还是困惑中。。。 我用GPIO方式已经可以正确的驱动LCD了,但FSMC方式一直不成功,所以请教各位。 下面是我的程序: #define  FSMC_BCR1        ...…

查看全部问答>

STM32TIM3中断奇怪的问题

void Timbase(void)     {           TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;           NVIC_InitTypeDef NVIC_InitStructure;      &n ...…

查看全部问答>

【信号处理】:经典资料《数字信号处理的FPGA实现》中英版本等

最近恰好在研究数字信号处理的FPGA实现问题,搜集了几本实用的书籍: 《数字信号处理的FPGA实现》及其所附带光盘的vhdl、verilog代码,挺有用的 大家可以看看,还有无线通信FPGA设计 田耕等编著的《无线通信FPGA设计 》及其matlab和verilog代码XILI ...…

查看全部问答>

Verilog避免锁存器的一种方法

为避免锁存器,可以在ALWAYS块中对变量预先进行无条件默认赋值,如下: 这是比较简单避免锁存器的方法,个人觉得即使默认赋值了也应该在判断语句中写全变量。             &nbs ...…

查看全部问答>