msp430 串口调试不通,我用那个调试助手软件了,不知道是我程序找错了还是怎样?帮帮忙啊!谢谢啊~~~~
我的msp430是EZ430-F2013,我把F2013拿下来,换上了F2132.插在电脑上,com6.下面那个是我在TI网站上找的程序,是调试串口的吗?我用调试助手发送...
我的msp430是EZ430-F2013,我把F2013拿下来,换上了F2132. 插在电脑上,com6.
下面那个是我在TI网站上找的程序,是调试串口的吗?我用调试助手发送数据,选了com6,9600. 没反应。 但我发送数据给com3就有返回的数据,不知道为什么……搞得我很郁闷,谁能帮帮我啊,谢谢了!!
//******************************************************************************
// MSP430F21x2 Demo - USCI_A0, 9600 UART Echo ISR, DCO SMCLK
//
// Description: Echo a received character, RX ISR used. Normal mode is LPM0.
// USCI_A0 RX interrupt triggers TX Echo.
// Baud rate divider with 1MHz = 1MHz/9600 = ~104.2
// ACLK = n/a, MCLK = SMCLK = CALxxx_1MHZ = 1MHz
//
// MSP430F21x2
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P3.4/UCA0TXD|------------>
// | | 9600 - 8N1
// | P3.5/UCA0RXD|<------------
//
// A. Dannenberg
// Texas Instruments Inc.
// April 2006
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.41A
//******************************************************************************
#include "msp430x21x2.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
while(1); // If calibration constants erased
// do not load, trap CPU!!
}
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
}
咳,我的意思是,我发送数据给我插MSP430的com6,没反应
但给com3(我也不知道为什么它好用),竟然有反应……
大家不用管com3了,忽略好了
现在我就不知道是不是那段代码有问题?如果代码没问题,那应该是什么问题呢? 展开
下面那个是我在TI网站上找的程序,是调试串口的吗?我用调试助手发送数据,选了com6,9600. 没反应。 但我发送数据给com3就有返回的数据,不知道为什么……搞得我很郁闷,谁能帮帮我啊,谢谢了!!
//******************************************************************************
// MSP430F21x2 Demo - USCI_A0, 9600 UART Echo ISR, DCO SMCLK
//
// Description: Echo a received character, RX ISR used. Normal mode is LPM0.
// USCI_A0 RX interrupt triggers TX Echo.
// Baud rate divider with 1MHz = 1MHz/9600 = ~104.2
// ACLK = n/a, MCLK = SMCLK = CALxxx_1MHZ = 1MHz
//
// MSP430F21x2
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P3.4/UCA0TXD|------------>
// | | 9600 - 8N1
// | P3.5/UCA0RXD|<------------
//
// A. Dannenberg
// Texas Instruments Inc.
// April 2006
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.41A
//******************************************************************************
#include "msp430x21x2.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
while(1); // If calibration constants erased
// do not load, trap CPU!!
}
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
}
咳,我的意思是,我发送数据给我插MSP430的com6,没反应
但给com3(我也不知道为什么它好用),竟然有反应……
大家不用管com3了,忽略好了
现在我就不知道是不是那段代码有问题?如果代码没问题,那应该是什么问题呢? 展开
3个回答
展开全部
这段程序本身没问题,可能出现问题的地方说一下,你参考:
1,F2013和F2132的外围端口一样不一样,这个我找了资料,没搜到EZ430F2013和EZ430F2132的资料,相信你自己应该有。MSP430F2013和MSP4302132这两款芯片的资料我到是看到了,封装都不一样,不知道你那两种外围端口一样不一样,需要你确定一下。
2,这段程序是对应的芯片是MSP430F21系列的。EZ系列的我不知道是不是有区别,你应该清楚。
2,弱弱的问你一句,你的串口调试软件是按照十六进制发送的嘛,如果不是,那么请调节成16进制发送(串口调试助手上面发送选项有个地方是“按照16进制发送”这个选中)。发送的数据是0x01之类的数据,就是说你要确定串口调试助手发送的数据必须是16进制发送出去的。
3,请你确认你的硬件上的晶振是不是1MHz,如果不是(可能性很大,一般学习板上的晶振都不是1MHz),那么波特率就出错,按照你的晶振大小,重新就算UCA0BR0 和UCA0BR1的值。
4,确认串口有没有问题:串口的2和3短接,自发自收,看是否正常,如果能接收和发送一样的数据,则说明串口没有问题,否则就是串口的问题。
5,如果串口没问题,在P3.1和P3.2端口看看是否有波形数据。如果有数据你在在程序上找问题。
1,F2013和F2132的外围端口一样不一样,这个我找了资料,没搜到EZ430F2013和EZ430F2132的资料,相信你自己应该有。MSP430F2013和MSP4302132这两款芯片的资料我到是看到了,封装都不一样,不知道你那两种外围端口一样不一样,需要你确定一下。
2,这段程序是对应的芯片是MSP430F21系列的。EZ系列的我不知道是不是有区别,你应该清楚。
2,弱弱的问你一句,你的串口调试软件是按照十六进制发送的嘛,如果不是,那么请调节成16进制发送(串口调试助手上面发送选项有个地方是“按照16进制发送”这个选中)。发送的数据是0x01之类的数据,就是说你要确定串口调试助手发送的数据必须是16进制发送出去的。
3,请你确认你的硬件上的晶振是不是1MHz,如果不是(可能性很大,一般学习板上的晶振都不是1MHz),那么波特率就出错,按照你的晶振大小,重新就算UCA0BR0 和UCA0BR1的值。
4,确认串口有没有问题:串口的2和3短接,自发自收,看是否正常,如果能接收和发送一样的数据,则说明串口没有问题,否则就是串口的问题。
5,如果串口没问题,在P3.1和P3.2端口看看是否有波形数据。如果有数据你在在程序上找问题。
更多追问追答
追问
我是按16进制发送的,晶振不清楚……囧,我试了一下8mhz的,还是不行。
可不可以把中断里的东西拿到void main里头,我试了下,然后run,结果while (!(IFG2&UCA0TXIFG)); 这句就跳不过去了……
谢谢你啊~
追答
在while (!(IFG2&UCA0TXIFG)); 这句之前,不知道你是不是在TXBUF中付过一次值,进行一次发送,如果没有,UCA0TTXIFG是不会被置位的。这个我忽略了,你先付次值试试看
展开全部
在我的电脑--设备管理器--端口 里看看 你用的串口工具对应的是com3 还是com6
如果是com3 你上面的问题已经解决了
如果是com6 恭喜你 问题同样也解决了 ( 如果是com6 那com3回的是谁的数据??)
如果是com3 你上面的问题已经解决了
如果是com6 恭喜你 问题同样也解决了 ( 如果是com6 那com3回的是谁的数据??)
追问
是com6,我确定,没解决啊……
com3的问题先不研究了吧……
我发现我的receive 和 transmit 的口其实应该是port1
P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
这句话我给改成 P1SEL = TX_PIN+RX_PIN (可以这样写吗?因为我看到头文件里的这个:
#define TX_PIN BIT1 // output
#define RX_PIN BIT2 // input)
改了还是不行,一直在发送,就是没有接受的数据。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
请看原理图,确定你的硬件连接,其他的都是扯淡。
2、你的仿真器是不是和这个系统板子在一起,是不是这个仿真器虚拟了一个COM口出来,你要看你的到底是连接了哪个口,不要不确定就在那里下载一个代码随便搞,你能学到什么东西呢,起码的对待这个事情的态度要对。
3、一般如果TXD和RXD短接了也会直接回发数据的,硬件很重要。
4、不明白的联系我
请看原理图,确定你的硬件连接,其他的都是扯淡。
2、你的仿真器是不是和这个系统板子在一起,是不是这个仿真器虚拟了一个COM口出来,你要看你的到底是连接了哪个口,不要不确定就在那里下载一个代码随便搞,你能学到什么东西呢,起码的对待这个事情的态度要对。
3、一般如果TXD和RXD短接了也会直接回发数据的,硬件很重要。
4、不明白的联系我
追问
//Port1
#define TX_PIN BIT1 // output
#define RX_PIN BIT2 // input
// Port 3
#define TX_A BIT4 // output unless externally driven
#define RX_A BIT5 // output unless externally driven
我也不懂要用哪个了,不过我两个都试了,都没有数据发回。
我的是com6啊,我去任务管理器看了
怎么回事?到底是哪错了?
谢谢你啊!!我折腾这个东西好几天了
追答
你看一下EZ430的板子的电路图再说,手上没有这个图,没法和你说啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询