MSP430f5437uart串口总结.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MSP430f5437uart串口总结

MSP430F5437通过串口向PC发送字符串,使字符串显示在串口助手中。单片机不停地发送字符,流程图如图所示。 程序代码如下: #include msp430x54x.h unsigned char buffer[] = {Im MSP430!\n}; void delay(unsigned int n) { unsigned int i,j; for(i=0;in;i++) for(j=0;j1000;j++); } void main(void) { unsigned int i; WDTCTL = WDTPW + WDTHOLD; // 关狗 P5SEL = 0xC0; // P5_6和P5_7第二功能打开,设置方向 P5DIR = 0x40; UCA1CTL1 |= UCSWRST; // 首先使RST位置位,只有这样后面的设置才有效 UCA1CTL1 |= UCSSEL_2; // SMCLK,为系统时钟1048576Hz UCA1BR0 = 9; // 1MHz 115200 UCA1BR1 = 0; // 1MHz 115200 UCA1MCTL |= UCBRS_1 + UCBRF_0; // 设置调整参数UCBRSx=1, UCBRFx=0 UCA1CTL1 = ~UCSWRST; // RST复位 UCA1IE |= UCTXIE; // 使能发送中断允许 while(1) { while (!(UCA1IFGUCTXIFG)); //等待BUF区准备好,当IFG=1时就表示准备好了 for(i=0; isizeof(buffer); i++) { UCA1TXBUF = buffer[i]; //向串口发送数据 delay(20); //延时 } } } 注:这就完成了单片机向上位机发送数据的过程,其实质是向UCA1TXBUF执行写入操作。 根据流程图,进入主函数后: 是关闭看门狗。 将要使用的串口的IO的第二功能打开,这里用的是串口A1,所以对应的是P5_6和P5_7。 设置串口相关的寄存器,首先要将UCSWRST位置位,这是对其他寄存器进行设置的前提,设置好各个寄存器后还要将这一位复位。设置寄存器:选择时钟源,一般高频的选择系统时钟,例如115200,如果是2400,可以选择ACLK。然后选择波特率,包括三个寄存器:UCA1BR0、UCA1BR1和UCA1MCTL1,前两个是设置波特率基数BR,后面的一个是设置调整参数Mx,波特率计算公式为 Baud = CLK/(BR+(m7+m6+……+m0)/8),其中CLK为前面选择的时钟源频率,BR为两个BR的值,m和是MCTL1寄存器中有多少个1。 将UCSWRST位复位。 以上就算对寄存器的设置,现在就可以像TXBUF中写数据了。 注意,我起初没有加上程序中的延时函数,可能是数据发送的太频繁了,打开串口助手总是说串口被占用,于是我加了这个延时,串口中就舒服的现实了想要的数据Im MSP430!\n。 以上是单片机不停的向PC机发送,实际当中很少这样,一般是对各个寄存器初始化完毕之后,就把CPU设置到低功耗状态(这才能展现MSP430的特长所在),当需要向PC机发送数据时才会被激活。这就需要编写中断函数。下面讲的例子:首先上位机通过串口助手向单片机发送一个数据,单片机接收到数据之后,产生RX中断,进入中断服务函数之后,判断接收到的是什么数,如果是0怎发送buffer0,如果是1则发送buffer1,其他发送buffer2,程序代码如下: #include msp430x54x.h unsigned char buffer0[] = {Im MSP4300000!\n}; unsigned char buffer1[] = {Im MSP4311111!\n}; unsigned char buffer2[] = {I dont understand!\n}; #define _PRAGMA(x) _Pragma(#x) #define HAL_ISR_FUNC_DECLARATION(f,v) _PRAGMA(vector = v) __interrupt vo

文档评论(0)

asd522513656 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档