共2条
1/1 1 跳转至页
【求助】关于串口通信程序问题

问
使用的是MSP430F12X系列单片机,在串口通信仿真时,程序就在判断是否发送完一个字节的语句中跳不出来了,请问各位有谁碰到过这个问题,该怎么解决?谢谢!!
ps:怕自己寄存器设置有错,采用自带的例程初始化语句,加了自己改了发送的内容。
请问程序有问题吗?
#include <MSP430x12x.h>
void main(void)
{int Data[6]={10,88,55,66,55,33};
int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
UCTL0 = CHAR; // 8-bit character
UTCTL0 = SSEL0; // UCLK = ACLK
UBR00 = 0x0D; // 32k/2400 - 13.65
UBR10 = 0x00; //
UMCTL0 = 0x6B; //
ME2 |= UTXE0 + URXE0; // Enabled USART0 TXD/RXD
IE2 |= URXIE0; // Enabled USART0 RX interrupt
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
P3DIR |= 0x10; // P3.4 output direction
for(i=0;i<=6;i++)
{
TXBUF0=Data[i];
while ((IFG2 & UTXIFG0) != UTXIFG0); //试过其他的几种方式也不行
}
} 答 1: 确认一下,你用的是串口0还是1,你程序里0和1混用了,好像是的.如果是0的话,ME2应该改为ME1,还有IFG2改为IFG1 答 2: 没有混用,12X系列只有1个串口,就是UASRT0,这应该没错,按照它的寄存器结构来的 答 3: 那你把ME2,IE2,IFG2都改为1试试看呢 答 4: 多谢!找到原因了,原来是寄存器设置上弄错了,串口没正常工作,仿真成功,但愿在硬件上跑不要出什么问题。 答 5: 应该没有问题的 ^_^ 答 6: wish
初级会员
注册日期: Jul 2004
帖子: 6
精华: 0
现金: 0 元
资产: 0 元
声望: 10
多谢!找到原因了,原来是寄存器设置上弄错了,串口没正常工作,仿真成功,但愿在硬件上跑不要出什么问题
楼主能不能告诉我你的经验,能不能给我发一个你的程序我看看。sir5163.com.谢谢
搂住 答 7: 其实也不叫经验之说了,例程IAR自带的就有,关键是要把自己用的型号的单片机的几个关于串口发送有关的寄存器弄清楚,设置正确就对了,一般不会有别的问题。 答 8: 那你怎么知道你的数据发对了。上位机的接受程序你用的是哪个?我现在正在调试串口程序,项目已经拖期两周,急需你的帮助。请问你的单片机的例子用的是那个,上位机的程序用的有是哪个?接口芯片用的是那个,我用的是max3232,请帮忙谢谢!!!!sir5163.com 答 9: 上位机用的是串口调试工具,利而达资料库中下载的;接口芯片用的是max232,其它的都行,这都无所谓的,只要芯片没问题就行。
我现在只是调试例程,用的是自带的,我用的是MSP430F123单片机;多看看datasheet和user guide。
慢慢来,我也摸索了很久。 答 10: 引用:
ps:怕自己寄存器设置有错,采用自带的例程初始化语句,加了自己改了发送的内容。
请问程序有问题吗?
#include <MSP430x12x.h>
void main(void)
{int Data[6]={10,88,55,66,55,33};
int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
UCTL0 = CHAR; // 8-bit character
UTCTL0 = SSEL0; // UCLK = ACLK
UBR00 = 0x0D; // 32k/2400 - 13.65
UBR10 = 0x00; //
UMCTL0 = 0x6B; //
ME2 |= UTXE0 + URXE0; // Enabled USART0 TXD/RXD
IE2 |= URXIE0; // Enabled USART0 RX interrupt
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
P3DIR |= 0x10; // P3.4 output direction
for(i=0;i<=6;i++)
{
TXBUF0=Data[i];
while ((IFG2 & UTXIFG0) != UTXIFG0); //试过其他的几种方式也不行

}
} 答 1: 确认一下,你用的是串口0还是1,你程序里0和1混用了,好像是的.如果是0的话,ME2应该改为ME1,还有IFG2改为IFG1 答 2: 没有混用,12X系列只有1个串口,就是UASRT0,这应该没错,按照它的寄存器结构来的 答 3: 那你把ME2,IE2,IFG2都改为1试试看呢 答 4: 多谢!找到原因了,原来是寄存器设置上弄错了,串口没正常工作,仿真成功,但愿在硬件上跑不要出什么问题。 答 5: 应该没有问题的 ^_^ 答 6: wish
初级会员
注册日期: Jul 2004
帖子: 6
精华: 0
现金: 0 元
资产: 0 元
声望: 10
多谢!找到原因了,原来是寄存器设置上弄错了,串口没正常工作,仿真成功,但愿在硬件上跑不要出什么问题
楼主能不能告诉我你的经验,能不能给我发一个你的程序我看看。sir5163.com.谢谢
搂住 答 7: 其实也不叫经验之说了,例程IAR自带的就有,关键是要把自己用的型号的单片机的几个关于串口发送有关的寄存器弄清楚,设置正确就对了,一般不会有别的问题。 答 8: 那你怎么知道你的数据发对了。上位机的接受程序你用的是哪个?我现在正在调试串口程序,项目已经拖期两周,急需你的帮助。请问你的单片机的例子用的是那个,上位机的程序用的有是哪个?接口芯片用的是那个,我用的是max3232,请帮忙谢谢!!!!sir5163.com 答 9: 上位机用的是串口调试工具,利而达资料库中下载的;接口芯片用的是max232,其它的都行,这都无所谓的,只要芯片没问题就行。
我现在只是调试例程,用的是自带的,我用的是MSP430F123单片机;多看看datasheet和user guide。
慢慢来,我也摸索了很久。 答 10: 引用:
共2条
1/1 1 跳转至页
回复
打赏帖 | |
---|---|
C语言函数宏的三种封装方式被打赏50分 | |
【STM32F769】记一次由于开启D-Cache之后DMA数据传输出错的问题查找与解决被打赏35分 | |
嵌入式LinuxC语言程序调试和宏使用技巧被打赏50分 | |
让代码中包含最新的编译时间信息被打赏50分 | |
【分享开发笔记,赚取电动螺丝刀】STM32F769LVGL优化显示被打赏26分 | |
rtthread硬件加密--2crc加密分析被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】STM32F769驱动ST7789以及显示优化被打赏36分 | |
【分享开发笔记,赚取电动螺丝刀】S32K146 PAL模拟I2C驱动适配被打赏23分 | |
我想要一部加热台+电源硬件设计规范被打赏16分 | |
我想要一部加热台+LED背光驱动芯片RT9293知识被打赏18分 |