У меня есть мастер, которым я не могу управлять, он просто посылает часы с данными.Я настроил свой stm32f4 как полнодуплексный раб.И мне удалось синхронизировать их с функцией HAL:
HAL_SPI_TransmitReceive(&hspi1, (uint8_t*)spi_buffer, (uint8_t *)spi_buffer, 16, 2000);
// receive 16 bytes then send them for debugg
Я посылаю от ведомого устройства байты, которые я получаю от мастера, в целях отладки, и данные такие же, так что он идеально синхронизирован и выглядит как ведомыйЧтение всех данных мастер отправляет.Вот изображения (извините, не могу загрузить его с помощью stackoverflow, потому что у меня мало точек):
- https://imgur.com/wa6rF5J - изображение ocsillo
- https://imgur.com/a/ZVCPaNT - увеличеноup
Проблема в том, что я не знаю, как читать эти данные, их 16 байтов, которые мне нужно каким-то образом читать, не замедляя работу.Все мои попытки сделать это провалились.Вот весь код:
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 байтов