共2条
1/1 1 跳转至页

问
主机程序:
#include <MSP430x14x.h>
static unsigned char Data[17];
static unsigned char flag=0,j=0;
void main(void)
{
auto int i;
for(i=0;i<17;i++) Data[i]=0;
WDTCTL=WDTPW+WDTHOLD;//CLOSE WATHCDOG
//测试晶振是否起振
BCSCTL1&=~XT2OFF;
do
{
IFG1&=~OFIFG;
for(i=0;i<=0xff;i++);
}
while(( IFG1 & OFIFG)==1);
BCSCTL2|=SELM1+SELS;//MCLK=SMCLK=XT2
//同步信号使能STE控制
P2DIR=0XFF;//输出
P2OUT=0XFE;
//初始化SPI串口
UCTL1=CHAR+SYNC+MM;//SPI主模式,8位数据
UTCTL1|=STC+SSEL0;//选定ACLK(32KHZ晶振)为时钟源,3线SPI模式
UBR01=0x02;//波特率分频因子为2
UBR11=0x00;
UMCTL1=0x00;
UCTL1&=~SWRST;//SWRST复位,USART允许
ME2|=USPIE1;//SPI0模块允许
P5SEL|=0x0F;//P5.0~P5.3为模块占用P5.4,5 = USART0 TXD/RXD
P5DIR=0x0A;//P5.1(SIMO)、P5.3(UCLK)设为输出模式
IE2|=URXIE1;//接收中断允许
//串口初始化
UCTL0=CHAR;
UTCTL0=SSEL1;
UBR00=0X41;
UBR10=0X03;
UMCTL0=0X13;
UCTL0&=~SWRST;
ME1=UTXE0+URXE0;
IE1=URXIE0;
P3SEL |= 0x30; // P3.6,7 = USART0 TXD/RXD
P3DIR |= 0x10;
_EINT();
TXBUF1=0xaa;//开始接收过程
while(1)
{
;;
}
}
interrupt [UART1RX_VECTOR] void UART1RX(void)
{
auto int m;
Data[j]=RXBUF1;
if(flag==0)
{
if(Data[j]==0xFF)
{
flag=1;
j=1;
}
}
else
{
while(( IFG1 & UTXIFG0 )==0);
TXBUF0=Data[j];
for(m=0;m<1200;m++);
j++;
}
if(j<17)
TXBUF1=0xAA;
else
{
j=0;
flag=0;
for(m=0;m<1000;m++);
TXBUF1=0xAA;
}
}
从机程序:
#include <MSP430x13x.h>
static unsigned char Data[17]={0xFF,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
static unsigned char m=0;
static unsigned char j;
void main(void)
{
auto int i;
WDTCTL=WDTPW+WDTHOLD;//CLOSE WATHCDOG
//测试晶振是否起振
BCSCTL1&=~XT2OFF;
do
{
IFG1&=~OFIFG;
for(i=0;i<=0xff;i++);
}
while(( IFG1 & OFIFG)==1);
BCSCTL2|=SELM1+SELS;//MCLK=SMCLK=XT2
//初始化SPI串口
UCTL0=CHAR+SYNC;//SPI从模式,8位数据,4线制,时钟信号来自主机
//UTCTL0=CKPH;//选定UCLK为时钟源,4线SPI模式
UBR00=0x02;//波特率分频因子为2
UBR10=0x00;
UMCTL0=0x00;
UCTL0&=~SWRST;//SWRST复位,USART允许
ME1=USPIE0;//SPI0模块允许
P3SEL|=0x0F;//P3.0~P3.3为模块占用
P3DIR=0x04;//P3.2(SOMI)设为输出模式
IE1|=URXIE0;//接收中断允许
TXBUF0=0;//开始接收过程
_EINT();
while(1);
}
interrupt [UART0RX_VECTOR] void UART0RX(void)
{
j=RXBUF0;
if(j==0xAA)
{
TXBUF0=Data[m];//发送字符串
m++;
if(m>=17) m=0;
}
}
问题是:上电时,有时主机从从机接收到正确的数据,有时接收不到或是错误的数据!如果是后者,断电再通电,有时就又会好了!
哪位大侠能看出来是什么问题?
#include <MSP430x14x.h>
static unsigned char Data[17];
static unsigned char flag=0,j=0;
void main(void)
{
auto int i;
for(i=0;i<17;i++) Data[i]=0;
WDTCTL=WDTPW+WDTHOLD;//CLOSE WATHCDOG
//测试晶振是否起振
BCSCTL1&=~XT2OFF;
do
{
IFG1&=~OFIFG;
for(i=0;i<=0xff;i++);
}
while(( IFG1 & OFIFG)==1);
BCSCTL2|=SELM1+SELS;//MCLK=SMCLK=XT2
//同步信号使能STE控制
P2DIR=0XFF;//输出
P2OUT=0XFE;
//初始化SPI串口
UCTL1=CHAR+SYNC+MM;//SPI主模式,8位数据
UTCTL1|=STC+SSEL0;//选定ACLK(32KHZ晶振)为时钟源,3线SPI模式
UBR01=0x02;//波特率分频因子为2
UBR11=0x00;
UMCTL1=0x00;
UCTL1&=~SWRST;//SWRST复位,USART允许
ME2|=USPIE1;//SPI0模块允许
P5SEL|=0x0F;//P5.0~P5.3为模块占用P5.4,5 = USART0 TXD/RXD
P5DIR=0x0A;//P5.1(SIMO)、P5.3(UCLK)设为输出模式
IE2|=URXIE1;//接收中断允许
//串口初始化
UCTL0=CHAR;
UTCTL0=SSEL1;
UBR00=0X41;
UBR10=0X03;
UMCTL0=0X13;
UCTL0&=~SWRST;
ME1=UTXE0+URXE0;
IE1=URXIE0;
P3SEL |= 0x30; // P3.6,7 = USART0 TXD/RXD
P3DIR |= 0x10;
_EINT();
TXBUF1=0xaa;//开始接收过程
while(1)
{
;;
}
}
interrupt [UART1RX_VECTOR] void UART1RX(void)
{
auto int m;
Data[j]=RXBUF1;
if(flag==0)
{
if(Data[j]==0xFF)
{
flag=1;
j=1;
}
}
else
{
while(( IFG1 & UTXIFG0 )==0);
TXBUF0=Data[j];
for(m=0;m<1200;m++);
j++;
}
if(j<17)
TXBUF1=0xAA;
else
{
j=0;
flag=0;
for(m=0;m<1000;m++);
TXBUF1=0xAA;
}
}
从机程序:
#include <MSP430x13x.h>
static unsigned char Data[17]={0xFF,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
static unsigned char m=0;
static unsigned char j;
void main(void)
{
auto int i;
WDTCTL=WDTPW+WDTHOLD;//CLOSE WATHCDOG
//测试晶振是否起振
BCSCTL1&=~XT2OFF;
do
{
IFG1&=~OFIFG;
for(i=0;i<=0xff;i++);
}
while(( IFG1 & OFIFG)==1);
BCSCTL2|=SELM1+SELS;//MCLK=SMCLK=XT2
//初始化SPI串口
UCTL0=CHAR+SYNC;//SPI从模式,8位数据,4线制,时钟信号来自主机
//UTCTL0=CKPH;//选定UCLK为时钟源,4线SPI模式
UBR00=0x02;//波特率分频因子为2
UBR10=0x00;
UMCTL0=0x00;
UCTL0&=~SWRST;//SWRST复位,USART允许
ME1=USPIE0;//SPI0模块允许
P3SEL|=0x0F;//P3.0~P3.3为模块占用
P3DIR=0x04;//P3.2(SOMI)设为输出模式
IE1|=URXIE0;//接收中断允许
TXBUF0=0;//开始接收过程
_EINT();
while(1);
}
interrupt [UART0RX_VECTOR] void UART0RX(void)
{
j=RXBUF0;
if(j==0xAA)
{
TXBUF0=Data[m];//发送字符串
m++;
if(m>=17) m=0;
}
}
问题是:上电时,有时主机从从机接收到正确的数据,有时接收不到或是错误的数据!如果是后者,断电再通电,有时就又会好了!
哪位大侠能看出来是什么问题?
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 |