MCU作为SPI从机,读取数据
我有一个我无法控制的主机,它只是发送带有数据的时钟。我将stm32f4配置为全双工从机。我设法使它们与HAL功能同步:MCU作为SPI从机,读取数据,c,spi,master-slave,keil,hal,C,Spi,Master Slave,Keil,Hal,我有一个我无法控制的主机,它只是发送带有数据的时钟。我将stm32f4配置为全双工从机。我设法使它们与HAL功能同步: HAL_SPI_TransmitReceive(&hspi1, (uint8_t*)spi_buffer, (uint8_t *)spi_buffer, 16, 2000); // receive 16 bytes then send them for debugg 为了调试,我从从从机发送从主机获取的字节, 而且数据是相同的,所以它完全同步,看起来就
HAL_SPI_TransmitReceive(&hspi1, (uint8_t*)spi_buffer, (uint8_t *)spi_buffer, 16, 2000);
// receive 16 bytes then send them for debugg
为了调试,我从从从机发送从主机获取的字节,
而且数据是相同的,所以它完全同步,看起来就像从机读取所有主数据发送。以下是图片(抱歉,无法使用stackoverflow加载,因为我的点数不足):
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_USB_DEVICE_Init();
MX_SPI1_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
uint8_t collect_bits[16] = {0};
char string_array[21] = {0};
uint8_t spi_buffer[16] ={0} ;
uint8_t flag_when_start_print = 0;
spi_buffer[0] = 5;
uint8_t spi_transmit[16] = {0};
HAL_SPI_Init(&hspi1); //init spi
while (1)
{
HAL_SPI_TransmitReceive(&hspi1, (uint8_t*)spi_buffer, (uint8_t *)spi_buffer, 16, 2000);
if (spi_buffer[0] == 0xFE) // just tring to catch 0xFE, doesnt work
{
sprintf(string_array, "%X", spi_buffer[0]); // just simple convertation for PC output
CDC_Transmit_FS((uint8_t*)string_array, sizeof(string_array)); // print result. }
}
}
重要的一点是,我想要捕获的消息总是以0xFE0010开始,因此在这些字节之后,我需要读取接下来的13个字节请不要通过指向外部站点的图像链接。请将它们包含在问题中。在调用
HAL\u spi\u TransmitReceive
后,是否可以打印缓冲区spi\u buffer
。这将指示接收到的数据,您可以看到预期的数据是否处于偏移位置,或者它与您预期的不同。此外,在不了解主机的情况下,很难说它是如何发送数据的。