Работа с ИК-матрицей MLX90640 STM32

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Аватара пользователя
dkobrusev
Родился
Сообщения: 2
Зарегистрирован: Ср фев 28, 2024 09:21:15

Работа с ИК-матрицей MLX90640 STM32

Сообщение dkobrusev »

Начал работать с матрицей MLX90640 на STM32F407VET6 при помощи библиотеки от производителя (https://github.com/melexis/mlx90640-library/tree/master). При запуске считываются данные из EEPROM. Затем, при попытки их обработки функцией MLX90640_ExtractParameters происходит hardfault_handler. Обнаружил, с какого места появляется ошибка:

Код: Выделить всё

static int ExtractDeviatingPixels(uint16_t *eeData, paramsMLX90640 *mlx90640)
{
    uint16_t pixCnt = 0;
    uint16_t brokenPixCnt = 0;
    uint16_t outlierPixCnt = 0;
    int warn = 0;
    int i;
    
    for(pixCnt = 0; pixCnt<5; pixCnt++)
    {
        mlx90640->brokenPixels[pixCnt] = 0xFFFF; // ТУТ
        mlx90640->outlierPixels[pixCnt] = 0xFFFF;
    }
        
    pixCnt = 0;
...
}
Заметил, что если добавить рядом в цикл mlx90640->brokenPixels[0] = 0xFFFF;, то ошибка больше не выдается, но после этого I2C имеет флаг BUSY и дальнейшая работа с камерой невозможна
Реклама
Аватара пользователя
dkobrusev
Родился
Сообщения: 2
Зарегистрирован: Ср фев 28, 2024 09:21:15

Re: Работа с ИК-матрицей MLX90640 STM32

Сообщение dkobrusev »

Возможно проблема в I2C драйвере для библиотеки в преобразовании указателей, но я не уверен.

Код: Выделить всё

int MLX90640_I2CRead(uint8_t slaveAddr, uint16_t startAddress, uint16_t nMemAddressRead, uint16_t *data)
{

	uint8_t* p = (uint8_t*) data; // <--

	int ack = 0;                               
	int cnt = 0;
	
	ack = HAL_I2C_Mem_Read(&hi2c1, (slaveAddr<<1), startAddress, I2C_MEMADD_SIZE_16BIT, p, nMemAddressRead*2, 500);

	if (ack != HAL_OK)
	{
			return -1;
	}
	

	for(cnt=0; cnt < nMemAddressRead*2; cnt+=2) {
		uint8_t tempBuffer = p[cnt+1];
		p[cnt+1] = p[cnt];
		p[cnt] = tempBuffer;
	}

	return 0;   
} 
Реклама
Аватара пользователя
>TEHb<
Друг Кота
Сообщения: 5738
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж
Контактная информация:

Re: Работа с ИК-матрицей MLX90640 STM32

Сообщение >TEHb< »

У ХАЛа были какие-то проблемы именно с И2Ц. То есть именно ошибки библиотек, пользователь никак повлиять не мог. Может, это оно?
"Привет!" - соврал он.
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 953
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: Работа с ИК-матрицей MLX90640 STM32

Сообщение GARMIN »

Посмотри как я баловался с этим датчиком.
Там две ветки - одна с бесконечным циклом, другая с FreeRTOS.
Я немного переработал библиотеку и засунул во флеш массив коррекции пикселей. Это сэкономило 10кБ ОЗУ.
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «Периферия»