本帖最后由 any012 于 2017-5-16 14:58 编辑
我现在改用SPI中断模式了。
结果还是有问题。
现在是这么实现的,PC6上升沿时,开启SPI中断接收函数。
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (HAL_GPIO_ReadPin(EN_3V3_GPIO_Port, EN_3V3_Pin) == GPIO_PIN_SET)
{
HAL_SPI_Receive_IT(&hspi2, (uint8_t *) spi2RecvDate, 0x09);
}
}
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)
{
printf(
"\r\n Spi2 interruped recived OK. %04x, %04x, %04x, %04x, %04x, %04x, %04x, %04x, %04x",
spi2RecvDate[0], spi2RecvDate[1], spi2RecvDate[2], spi2RecvDate[3],
spi2RecvDate[4], spi2RecvDate[5], spi2RecvDate[6], spi2RecvDate[7],
spi2RecvDate[8]);
// HAL_GPIO_TogglePin(ERR_GPIO_Port, ERR_Pin);
}
现象是,主设备启动后,然后给从设备下载程序,则从设备接收正常,串口可输出正确的数据。
主从设备断电后同时重启,则从设备接收就不正常了,SPI数据溢出错误。
1秒时间到。
Spi2 interruped recived OK. 3a08, 010a, 0200, 01ff, 03ff, 07ff, 0fff, 5d71, 0000
1秒时间到。
Spi2 interruped recived OK. 3a08, 010a, 0200, 01ff, 03ff, 07ff, 0fff, 5d71, 0000
1秒时间到。
Spi2 interruped recived OK. 3a08, 010a, 0200, 01ff, 03ff, 07ff, 0fff, 5d71, 0000
1秒时间到。
Spi2 interruped recived OK. 3a08, 010a, 0200, 01ff, 03ff, 07ff, 0fff, 5d71, 0000
Version: 4DA 1.2.5
1秒时间到。spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.spi ovr err.
1秒时间到。spi ovr err.
1秒时间到。spi ovr err.
1秒时间到。spi ovr err.
1秒时间到。spi ovr err.
1秒时间到。spi ovr err.
1秒时间到。spi ovr err.
1秒时间到。spi ovr err.
1秒时间到。spi ovr err.
|