共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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |