关于msp430f5529149串口通讯的问题

430f149串口调试问题 - MSP430技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
430f149串口调试问题
21:27:29  
我430一打开串口调试,主程序就停了为什么呢
而且每次下载完程序,板子必须关掉重启一下,调试助手才能正常收发,否则收不到,希望大家帮个忙能够解决以下,还有这个串口是232还是485
以下是程序:
#include &msp430x14x.h&
#include &Config.h&
uchar data=0;
//*************************************************************************
//& && && && && &MSP430串口初始化
//*************************************************************************
void UART_Init()
&&U0CTL|=SWRST;& && && && && &//复位SWRST
&&U0CTL|=CHAR;& && && && && & //8位数据模式
&&U0TCTL|=SSEL1;& && && && &&&//SMCLK为串口时钟
&&// U0BR1=baud_h;& && && && && &//BRCLK=8MHZ,Baud=BRCLK/N& && &//在config里有设置& &提取高位
&&//U0BR0=baud_l;& && && && && &//N=UBR+(UxMCTL)/8& && && && &//在config里有设置& &提取低位
&&//U0MCTL=0x00;& && && && && & //微调寄存器为0,波特率9600bps
U0BR0 = 0x41;//波特率9600
U0BR1 = 0x03;& && && && && && && && &//有串口波特率计算公式的& &
U0MCTL = 0x00;
&&ME1|=UTXE0;& && && && && &&&//UART1发送使能
&&ME1|=URXE0;& && && && && &&&//UART1接收使能
&&U0CTL&=~SWRST;
&&IE1|=URXIE0;& && && && && & //接收中断使能位
// IE1|=UTXIE0;& && && && && & //发送中断使能位
&&P3SEL|= BIT4;& && && && && &//设置IO口为外围模式
&&P3DIR|= BIT4;& && && && && &//设置IO口方向为输出
&&P3SEL|= BIT5;& && && && && && &&&//看原理图进行设置。。注意有跳
&&P3DIR&=~ BIT5;& && && && && &//设置IO口方向为输入
//*************************************************************************
//& && && && &&&串口0发送数据函数
//*************************************************************************
void Send_Byte(uchar data)
&&while((IFG1&UTXIFG0)!=0X80);& && && & //发送寄存器空的时候发送数据
& & U0TXBUF =
//*************************************************************************
//& && && && && &处理来自串口 0 的接收中断
//*************************************************************************
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
&&data = U0RXBUF;& && && && && && && &&&//接收到的数据存起来
& &Send_Byte(data);& && && && && && &&&//将接收到的数据再发送出去
& &delay_ms(5);& && && && && && && && &//切换之前先有个小延时&&
//*************************************************************************
//& && && && &处理来自串口 0 的发送中断,预留
//*************************************************************************
//#pragma vector=UART0TX_VECTOR
//__interrupt void UART0_TX_ISR(void)
//*************************************************************************
//& && && &&&主函数
//*************************************************************************
void main(void)
&&WDT_Init();& && && && && && && && & //看门狗设置
&&Clock_Init();& && && && && && && &&&//系统时钟设置
&&UART_Init();& && && && && && && && &//串口设置初始化
&&_EINT();& & //开中断
&&P6DIR|= BIT0;
&&P6OUT&=~ BIT0;
&&while(1)& && && && && && && && && & //无限循环
& &&&P6OUT^= BIT0;&&
& &&&delay_ms(500);
已退回1积分
22:48:50  
Clock_Init();
这个开外部晶振了吧,等待PLL稳定了吗?
16:42:11  
每次下载完程序,板子必须关掉重启一下,调试助手才能正常收,这个和下载软件有关系 ...
这样啊,那不是我的原因啊!谢谢哦
等待验证会员
08:30:21  
需要同步帧·············
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司map430f149的串口问题 - MSP430技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
map430f149的串口问题
19:09:49  
我想要单片机在接收到一个数据时返回一个字符A,发现无论如何都实现不了,大家帮忙看看程序有么有问题,而且我还想在主函数中处理一些其他的问题,比如点亮一盏灯,发现都实现不了,大家帮忙看看什么问题,哪里出错了,要怎么弄,谢谢
#include &msp430x14x.h&
#include &Config.h&
uchar data=0;
//*************************************************************************
//& && && && && &MSP430串口初始化
//*************************************************************************
void UART_Init()
&&U0CTL|=SWRST;& && && && && &//复位SWRST
&&U0CTL|=CHAR;& && && && && & //8位数据模式
&&U0TCTL|=SSEL1;& && && && &&&//SMCLK为串口时钟
&&// U0BR1=baud_h;& && && && && &//BRCLK=8MHZ,Baud=BRCLK/N& && &//在config里有设置& &提取高位
&&//U0BR0=baud_l;& && && && && &//N=UBR+(UxMCTL)/8& && && && &//在config里有设置& &提取低位
&&//U0MCTL=0x00;& && && && && & //微调寄存器为0,波特率9600bps
U0BR0 = 0x41;//波特率9600
U0BR1 = 0x03;& && && && && && && && &//有串口波特率计算公式的& &
U0MCTL = 0x00;
&&ME1|=UTXE0;& && && && && &&&//UART1发送使能
&&ME1|=URXE0;& && && && && &&&//UART1接收使能
&&U0CTL&=~SWRST;
&&IE1|=URXIE0;& && && && && & //接收中断使能位
// IE1|=UTXIE0;& && && && && & //发送中断使能位
&&P3SEL|= BIT4;& && && && && &//设置IO口为外围模式
&&P3DIR|= BIT4;& && && && && &//设置IO口方向为输出
&&P3SEL|= BIT5;& && && && && && &&&//看原理图进行设置。。注意有跳
&&P3DIR&=~ BIT5;& && && && && &//设置IO口方向为输入
//*************************************************************************
//& && && && &&&串口0发送数据函数
//*************************************************************************
void Send_Byte(uchar data)
&&while(!(IFG1&UTXIFG0));& && && & //发送寄存器空的时候发送数据
& & U0TXBUF =
& & IFG1&=~UTXIFG0;
//*************************************************************************
//& && && && && &处理来自串口 0 的接收中断
//*************************************************************************
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
& & data = U0RXBUF;& && && && && && && &&&//接收到的数据存起来
& & Send_Byte('A');& && && && && && &&&//将接收到的数据再发送出去
//*************************************************************************
//& && && && &处理来自串口 0 的发送中断,预留
//*************************************************************************
//#pragma vector=UART0TX_VECTOR
//__interrupt void UART0_TX_ISR(void)
//*************************************************************************
//& && && &&&主函数
//*************************************************************************
void main(void)
&&WDT_Init();& && && && && && && && & //看门狗设置
&&Clock_Init();& && && && && && && &&&//系统时钟设置
&&UART_Init();& && && && && && && && &//串口设置初始化
&&_EINT();& & //开中断
&&while(1)& && && && && && && && && & //无限循环
& && &if(n==1){
&&Send_Byte('A');
& && && && &&&}&&
已退回1积分
20:55:04  
如果我说的对,分给我哈!
U0CTL|=SWRST;& && && && && &//复位SWRST
我也有点记不住了,但你看这个手册。
The USART is reset by a PUC or by the SWRST bit. After a PUC, the SWRST
bit is automatically set, keeping the USART in a reset condition. When set, the
SWRST bit resets the URXIEx, UTXIEx, URXIFGx, OE, and FE bits and sets
the UTXIFGx flag. The USPIEx bit is not altered by SWRST. Clearing SWRST
releases the USART for operation.
你可以在初始化后读一下ME2
21:22:59  
好东西!!!!!!!!分享
20:22:12  
上来就不合适,你给的是置位,标注的是复位,串口的初始化,必须要先SWRST=1;
21:24:00  
真是好东西啊 受益匪浅。。。。
21:34:20  
很不错的程序,我就编不出来
21:34:51  
真是好东西啊 受益匪浅。。。。
21:42:50  
很不错的程序,我就编不出来。sorry 这个不是故意的
21:44:50  
很不错的程序,我就编不出来
22:01:48  
很不错的程序,我就编不出来。sorry 这个不是故意的
22:12:35  
很不错的程序,我就编不出来
22:16:33  
11# liumsde 发表于 8 秒前
很不错的程序,我就编不出来。sorry 这个不是故意的
22:21:03  
不错的程序,我就编不出来
22:21:26  
不错的程序,我就编不出来
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司MSP430单片机串口通信详解
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
MSP430单片机串口通信详解
#include&msp430G2553.h&
#include &in430.h&
void UartPutchar(unsigned char c);
unsigned char UartGetchar();
unsigned char temp=0;
unsigned char number[2]={0};
void main( void )
& WDTCTL = WDTPW + WDTHOLD; & & & & & & & & // Stop WDT
& BCSCTL1 = CALBC1_1MHZ; & & & & & & & & & &// Set DCO
& DCOCTL = CALDCO_1MHZ;
& P1DIR|=BIT6;
& P1OUT&=~BIT6;
& P1SEL = BIT1 + BIT2; & & & & & & & & & & &// P1.1为 RXD, P1.2为TXD
& P1SEL2 = BIT1 + BIT2; & & & & & & & & & & // P1.1为 RXD, P1.2为TXD
& UCA0CTL1 |= UCSSEL_2; & & & & & & & & & & // 选择时钟BRCLK
& UCA0BR0 = 106; & & & & & & & & & & & & & &// 1MHz 9600
& UCA0BR1 = 0; & & & & & & & & & & & & & & &// 1MHz 9600
& UCA0MCTL = UCBRS2 + UCBRS0; & & & & & & & // 波特率=BRCLK/(UBR+(M7+...0)/8)
& UCA0CTL1 &= ~UCSWRST; &
& // 初始化顺序:SWRST=1设置串口,然后设置SWRST=0,最后设置相应中断
& IE2 |= UCA0RXIE; & & & & & & & & & & & & &// 使能接收中断
& &//UartPutchar(9);
& &// display_int(temp,0);
& & __delay_cycles(10000);
/**********************************UART接收中断*************************/
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
& //while (!(IFG2&UCA0TXIFG)); & & & & & & & &// 等待发送完成
& //UCA0TXBUF = UCA0RXBUF; & & & & & & & & & &// TX -& RXed character
& temp=UCA0RXBUF;
/******************************UART发送字节函数*************************/
void UartPutchar(unsigned char c)
&while(!(IFG2 & UCA0TXIFG)); &//待发送为空
&UCA0TXBUF=c;
&IFG2 &=~UCA0RXIFG;
/*********************************UART接收字节数据******************/
unsigned char UartGetchar()
& while(!(IFG2 & UCA0RXIFG)); //等待接收完成
& c=UCA0RXBUF;
& IFG2 &=~UCA0TXIFG;
/******智能控制工作室*******/
&&&MSP430g2553串口通信
MSP430的不同型号,其串行通讯工作模式是一样的。以MSP430G2553为例进行说明。MSP430G2553是20个引脚的16位单片机。具有内置的16位定时器、16k的FLASH和512B的RAM,以及一个通用型模拟比较器以及采用通用串行通信接口的内置通信能力。此外还具有一个10位的模数(A/D)转换器。其引脚排布如图1.1所示。其功能表如表1.1所示。
串行通讯模块主要由三个部分组成:波特率生成部分、发送控制器以及接收控制器。如图1.2所示。
一、UART模式
在异步模式下,接收器自身实现帧的同步,外部的通讯设备并不使用这一时钟。波特率的产生是在本地完成的。异步帧格式由1个起始位、7或8个数据位、校验位(奇/偶/无)、1个地址位、和1或2个停止位。一般最小帧为9个位,最大为13位。
(一)UART的初始化
单片机工作的时钟源来自内部三个时钟或者外部输入时钟,由SSEL1、SSEL0,以决定最终进入模块的时钟信号BRCLK的频率。所以配置串行通讯的第一步就是选择时钟。
通过选择时钟源和波特率寄存器的数据来确定位周期。所以波特率的配置是串行通讯中最重要的一部分。波特率设置用三个寄存器实现:UxBR0(选择控制器0):波特率发生器分频系数低8位。UxBR1(选择控制器1):波特率发生器分频系数高8位。UxMCTL
数据传输的格式,以及数据传输的模式是通过配置控制寄存器UCTL来进行设置。
接收控制部分和发送控制部分。首先需要串行口进行配置、使能以及开启中断。串口接收数据一般采用中断方式,发送数据采用主动发送。当接收到一个完整的数据,产生一个信号:URXIFG0=1(类似于51单片机的接收中断标志位),表示接收完整的数据。当数据正在发送中,UTXIFG0=1,此时不能再发送数据,必须等当前数据发送完毕(UTXIFG0=0)才能进行发送。
二、SPI模式
&&&USTAR下的SPI模式有如下特点:
1、SPI模式支持3线和4线模式;
2、支持主机与从机模式;
3、接受和发送有各自独立的发送移位寄存器和缓冲器;
4、接受和发送都有独立的中断能力;
&5、移位时钟的极性和相位可编程;
6、字符长度可以是7位或者8位。
SPI工作在全双工下,即主机发送的同时也接收数据,传输的速率由编程决定。4线SPI模式用附加数据线,允许从机数据的发送和接收。其信号如下:&SIMO:从进主出,主机模式下,数据输出;从机模式下,数据输入。SOMI:从出主进,主机模式下,数据输入,从机模式下,数据输出。UCLK:USART SPI模式时钟,信号有主机输出,从机输入。CLK时钟只能由主机提供。STE:从机模式发送接收允许控制脚,用于4线模式。
(一)SPI初始化
SPI当中不需要波特率调整,所以UxMCTL=0x0000,SPI的初始化及其复位和UART公用一套寄存器。
在初始化或者重新配置USART的SPI时,必须按照以下顺序进行:
1、UxCTL寄存器的第0位SWRST置位;
2、在SWRST置位的条件下,初始化所有的SPI寄存器,包括UxCTL寄存器;
3、通过置位模块使能寄存器MEx的URXEx和UTXEx位使能SPI的接受和发送使能模块;
4、通过软件复位UxCTL寄存器的第0位SWRST;
5、通过中断使能寄存器IEx的URXIEx和UTXIEx来使能发送和接受中断。
三、寄存器及其功能
通信模块寄存器如下:
(1)控制寄存器UxCTL
控制寄存器内的信息决定了USART的基本操作。如:选择通信协议、通信模式和校验位。在SWRST复位使USART复位操作禁止前,各位应根据选择的模式进行编程。
表3.2&&发送控制寄存器UxCTL
校验允许位
0:校验禁止
1:校验允许
奇偶校验位
停止位选择
0:1位停止位
1:2位停止位
3(LISTEN)
(选择是否发送数据由内部反馈给接收器)
USART模块的模式选择
0:UART模式(异步)
1:SPI模式(同步)
多机模式选择位
0:线路空闲多机协议
1:地址位多机协议
0(SWRST)
控制位(上电置位)
0:USART禁止
1:USART允许
(2)发送控制寄存器UxTCTL(未作说明的位未用)
寄存器UxTCTL控制与发送操作相关的USART硬件。
表3.3&&发送控制寄存器UxTCTL
时钟相位控制位
0:正常UCLK时钟
1:UCLK时钟延迟半个周期
时钟极性控制位
0:UCLKI信号与UCLK信号极性相同
1:UCLKI信号与UCLK信号极性相反
5(SSEL1)
时钟源选择
(确定波特率发生器的时钟源)
00:外部时钟UCLKI
01:辅助时钟ACLK
10:系统时钟MCLK
11:子系统时钟SMCLK
4(SSEL0)
发送控制位
0:SPI为4线模式
1:SPI为3线模式
0(TXEPT)
发送器空标志,在异步模式与同步模式时是不一样的
0:正在传输数据或者发送缓冲器(UTXBUF)有数据
1:表示发送移位寄存器和UTXBUF空或者SWRST=1
(3)接收控制寄存器URCTL
URCTL 控制与接收操作相关的USART硬件并保存由最新写入URXBUF的字符引起的出错状况和唤醒条件。若FE、PE、OE、BRK、RXERR 或 RXWake&中的任何一位置位,通过接收下一个字符不能使其复位。它们的复位要通过访问接收缓存URXBUF、USART的软件复位SWRST、系统复位PUC或用指令修改。
表3.4&&接收控制寄存器URCTL
帧错误标志位
0:无帧错误
1:有帧错误
校验错误标志位
0:校验正确
1:校验错误
溢出标志位
打断检测位
3(URXEIE)
接收出错中断允许位
0:禁止中断,不接收出错字符,不改变URXIFG标志
1:允许中断,接收出错字符,置位URXIFG标志
2(URXWIE)
接收唤醒中断允许位
0:接收的所有字符都能够置位URXIFG
1:只有接收到地址字符才置位URXIFG
1(RXWake)
接收唤醒检测位
0:未被唤醒,接收到的字符是数据
1:唤醒,接收的字符是地址
0(RXERR)
接收错误标志位
0:未接收到错误
1:接收到错误
在各种条件下URXEIE和URXWIE对URXIFG的影响:
接收字符后的标志位URXIFG
置位(&接收所&有字符)
(4)波特率选择寄存器和调制控制寄存器
波特率产生器利用波特率选择寄存器UxBR1和UxBR0,以及调整控制寄存器UxMCTL,来产生串行数据流的位定时。UxBR0、UxBR1这两个寄存器是用于存放波特率分频因子的整数部分,若波特率发生器的输入频率BRCLK不是所需波特率的整数倍,带有小数,则整数部分写入UxBR寄存器,小数部分则由调整寄存器UxMCT的内容反映。波特率由以下公式计算:
波特率=BRCLK/(UBR+(M7+M6+ &M0)/8)
寄存器各位如下:
(5)接收数据缓存URXBUF
接收缓存存放移位寄存器最后接收的字符,可由用户访问,读接收缓存可以复位接收时产生的各种错误标志、RXWAKE位和URXIFGx位。如果传输7位数据,接收缓存内容右对齐,最高位为0。当收接和控制条件为真时,接收缓存装入当前接收到的字符。
装入URXBUF
无差错地址字符
所有地址字符
无差错字符
(6)发送数据缓存UTXBUF
发送缓存含有当前要由发送器发送的数据。UTXIFG 标志表示UTXBUF已准备好接收下一个要发送的字符。将数据写入UTXBUF初始化发送功能。如果发送移位寄存器为空或即将为空,数据的发送立即开始。只有当UTXBUF为空时,数据才能写入缓存,否则可能发送不可预料的字符。
表1.1&&MSP430G2553引脚功能表
引脚功能描述
通用I/O口、ADC10模拟输入A0(1)&、Comparator_A+,CA0输入、TIMER _A时钟信号TACLK输入、ACLK信号输出
通用I/O 口、Timer0_A,捕捉:CCI0A输入,比较:Out0输出/ BSL发送、UART模式中USCI_A0接收数据输入、SPI模式中USCI_A0受控器数据输出/主控器输入、ADC10模拟输入A1 、Comparator_A+,CA1输入
通用I/O 口、Timer0_A,捕获:CCI1A输入,比较:Out1输出、UART模式中USCI_A0发送数据输出、SPI 模式中USCI_A0受控器数据输入/主控器输出、ADC10模拟输入A2、Comparator_A+,CA2输入
通用I/O 口、ADC10,转换时钟输出(1)、ADC10模拟输入A3、ADC10负基准电压、Comparator_A+,CA3输入、Comparator_A+,输出
通用I/O 口、Timer0_A,比较:Out0输出/ BSL接收、USCI_B0时钟输入/输出、USCI_A0受控器发送使能、ADC10模拟输入A5、Comparator_A+,CA5输入、JTAG测试模式选择输入终端
通用I/O 口、Timer1_A,捕获:CCI0A输入,比较:Out0输出
通用I/O 口、Timer1_A,捕获:CCI1A输入,比较:Out1输出
通用I/O 口、Timer1_A,捕获:CCI1B输入,比较:Out1输出
通用I/O 口、Timer1_A,捕获:CCI0B输入,比较:Out0输出
通用I/O 口、Timer1_A,捕获:CCI2A输入,比较:Out2输出
通用I/O 口、Timer1_A,捕获:CCI2B输入,比较:Out2输出
通用I/O 口、Timer0_A,比较:Out1输出、、ADC10模拟输入A6、Comparator_A+,CA6输入、SPI模式中USCI_B0受控器输出/主控器输入、I2C 模式中的USCI_B0SCLI2C 时钟、JTAG测试数据输入或测试时钟输入
通用I/O 口、ADC10模拟输入A7、Comparator_A+,CA7输入、Comparator_A+,输出、SPI模式中的USCI_B0受控器输入/主控器输出、I2C 模式中的USCI_B0SDAI2C 数据输入、JTAG测试数据输出终端或测试数据输入
复位、不可屏蔽中断输入、编程及测试期间的两线制(Spy-Bi-Wire) 测试数据输入/输出
为端口1上JTAG引脚选择测试模式、器件保护熔丝连接至TEST、编程及测试期间的Spy-Bi-Wire测试时钟输入
晶体振荡器的输出终端、通用I/O 口
晶体振荡器的输入终端、通用I/O 口、Timer0_A,比较:Out1输出
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网 51hei.com , All Rights ReservedMSP430F149串口与电脑发送接收通信_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
MSP430F149串口与电脑发送接收通信
你可能喜欢

我要回帖

更多关于 msp430串口通讯 的文章

 

随机推荐