- 打卡等级:初来乍到
- 打卡总天数:5
- 最近打卡:2026-01-08 00:43:08
已绑定手机
注册会员
- 积分
- 63
|
硬件连接:
32g144 为mcu1-----ai8052为mcu2
mcu1串口1串口发送数据,然后通过spi复用传到mcu2,mcu2再串口1发送到电脑PC
结果:只有PC端自动发送开启后,打开单片机电源,开机前2秒左右,mcu1是能通过PC通过spi发到mcu2,传给PC 过了几秒后就不行了
mcu1 ,mcu的spi是例程里的,都是40M,配为spi2串口模式
mcu1-spi2 初始
void usart2_spi_init(void)
{
S2SPI_S0 = 1; //切换S2SPI到p7.4 p7.5 p7.6 p7.7
S2SPI_S1 = 1;
S2CON = 0x10; //使能接收,必须设置为串口模式0
USART2CR1 = 0x10; //使能USART2的SPI模式
// USART2CR1 |= 0x40; //DORD=1
USART2CR1 &= ~0x40; //DORD=0
// USART2CR1 |= 0x04; //从机模式
USART2CR1 &= ~0x04; //主机模式
USART2CR1 |= 0x00; //CPOL=0, CPHA=0
// USART2CR1 |= 0x01; //CPOL=0, CPHA=1
// USART2CR1 |= 0x02 ; //CPOL=1, CPHA=0
// USART2CR1 |= 0x03; //CPOL=1, CPHA=1
// USART2CR4 = 0x00; //SPI速度为SYSCLK/4
// USART2CR4 = 0x01; //SPI速度为SYSCLK/8
USART2CR4 = 0x02; //SPI速度为SYSCLK/16
// USART2CR4 = 0x03; //SPI速度为SYSCLK/2
USART2CR1 |= 0x08; //使能SPI功能
ES2 = 1;
B_TX2_Busy = 0;
TX2_Cnt = 0; //初始化配对使用有记忆存放,提取了数据要清空要同步=0
RX2_Cnt = 0;
}
mcu2 spi初始
void usart2_spi_init(void)
{
S2SPI_S0 = 0; //切换S2SPI到p4.3 p4.2 p4.1 p4.0
S2SPI_S1 = 1;
S2CON = 0x10; //使能接收,必须设置为串口模式0
USART2CR1 = 0x10; //使能USART2的SPI模式
// USART2CR1 |= 0x40; //DORD=1
USART2CR1 &= ~0x40; //DORD=0
USART2CR1 |= 0x04; //从机模式
// USART2CR1 &= ~0x04; //主机模式
USART2CR1 |= 0x00; //CPOL=0, CPHA=0
// USART2CR1 |= 0x01; //CPOL=0, CPHA=1
// USART2CR1 |= 0x02 ; //CPOL=1, CPHA=0
// USART2CR1 |= 0x03; //CPOL=1, CPHA=1
// USART2CR4 = 0x00; //SPI速度为SYSCLK/4
// USART2CR4 = 0x01; //SPI速度为SYSCLK/8
USART2CR4 = 0x02; //SPI速度为SYSCLK/16
// USART2CR4 = 0x03; //SPI速度为SYSCLK/2
USART2CR1 |= 0x08; //使能SPI功能
ES2 = 1;
}
/*************************************************
//函 数 名: Usart1Config(void)
//功 能: PC到串口1,串口1到spi串口2 发送
//输入参数: 无
//返 回 值: 无
*************************************************/
void Usart2DoData(void)
{
#ifdef EN_SPI_SPI
S2SS = 0;
if((TX2_Cnt != RX1_Cnt) && (!B_TX2_Busy)) //收到数据, 发送空闲
{
S2BUF = RX1_Buffer[TX2_Cnt];
//SBUF = RX1_Buffer[TX2_Cnt];
B_TX2_Busy = 1;
if(++TX2_Cnt >= UART1_BUF_LENGTH) {TX2_Cnt = 0;S2SS = 1; };//
}
#endif
}
为什么开机前几秒可以,后来就死机了?
|
|