- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- 蓄电池知识基础培训教材.pdf
- 动员班会-明确目标 超越自我.ppt
- 谈小学生学习数学兴趣的培养.doc
- 期末联考试题(政治).doc
- 016热水采暖系统常用管材综合性能评价.doc
- 1周期现象(导学案).doc
- 滨州学院封面填表说明.doc
- 植筋工程施工承包合同-恒大.doc
- oracle数据库服务器维护手册.doc
- 穿高跟鞋不磨脚的小窍门.doc
- 2022年2月博尔塔拉蒙古自治州直遴选面试真题回忆版.docx
- 2022年11月朔州市直机关遴选公务员面试真题附带题目详解.docx
- 2022年2月苏州市直遴选面试真题回忆版汇总.docx
- 2022年2月商丘市直机关遴选公务员面试真题附带题目详解.docx
- 2022年11月衡阳市直机关遴选公务员面试真题附详细解析.docx
- 2022年9月邯郸市直机关遴选公务员面试真题带详解.docx
- 2022年2月大庆市直机关遴选公务员面试真题回忆版汇总.docx
- 2022年2月北京市直遴选面试真题回忆版.docx
- 2022年11月昆明市直遴选面试真题回忆版.docx
- 2022年11月阿克苏地区直机关遴选公务员面试真题附详细解析.docx
文档评论(0)