Отговори на тема  [ 16 мнения ]  Отиди на страница 1, 2  Следваща
STM32 HAL_I2C_IsDeviceReady 
Автор Съобщение
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Съб Апр 01, 2023 9:59 am
Мнения: 304
Мнение STM32 HAL_I2C_IsDeviceReady
Здрасти приятели,

Отново се опитвам да подкарам I2C с разни Нуклео бордове и за пореден път резултатите са плачевни. Този опит опитвам с HAL, гледам един туториал в който тестват нещата с HAL_I2C_IsDeviceReady. Нещата изглеждат по този начин:

Код:
  HAL_StatusTypeDef ret = HAL_I2C_IsDeviceReady(&hi2c1, 0b00110010, 10,100); //MPU9250/6500 address: 0b1101000, StevalMKI218V1 address:0b0011000
  if (ret == HAL_OK)
  {
     printf("The device is ready \n");
  }
  else
  {
     printf("The device is !ready \n");
  }


Това нещо не ще да върне HAL_OK. Как ли не го мъчих,сменях адреси , три устройства, две различни платки с контролери, назначавах други пинове, сменях кабели, замервах връзки, така се закучи значи че като че ли изчерпах всичко за което се сещам. Можете ли да помогнете?
Благодаря предварително.


Пон Фев 12, 2024 9:16 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: STM32 HAL_I2C_IsDeviceReady
а гугъл пита ли ... много постове има за тоз "проблем"

_________________
main[-1u]={1};


Пон Фев 12, 2024 9:33 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Съб Апр 01, 2023 9:59 am
Мнения: 304
Мнение Re: STM32 HAL_I2C_IsDeviceReady
Може би не достатъчно. Срещнах че нямало устройство на адреса и това ме подтикна да пробвам с други устройства. Утре ще го мъча отново.


Пон Фев 12, 2024 10:37 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 9:39 pm
Мнения: 2277
Мнение Re: STM32 HAL_I2C_IsDeviceReady
Параметърът DevAddress на функцията HAL_I2C_IsDeviceReady не съвпада нито с 0b1101000, нито с 0b0011000 :!:

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!


Пон Фев 12, 2024 11:16 pm
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Съб Апр 01, 2023 9:59 am
Мнения: 304
Мнение Re: STM32 HAL_I2C_IsDeviceReady
Здрасти Syscop, какво пропускам? Имам 7 битов адрес + бит за четене или писане. В документацията на HAL дават следното:

Цитат:
DevAddress: Target device address: The device 7 bits address value in datasheet must be shifted to the
left before calling the interface.


Дали имаш предвид предвид че не са шифтнати? Ако е така му давам директно 8 битов адрес. Между другото в туториала беше със шифтване, пробвах и с това. Може би съм объркал нещата със смятането на битове. Ще пробвам отново със шифтване или с калкулатор. Като цяло логиката ми е такава: Ако имам адрес: 1101000, от това подавам 1101000<<1 за четене и (1101000<<1) +1 за писане или директно 1101000 или 1101001.


Вто Фев 13, 2024 10:03 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 9:39 pm
Мнения: 2277
Мнение Re: STM32 HAL_I2C_IsDeviceReady
Пример:

Код:
#define MPU9250_I2C_ADDRESS  0b01101000
....
HAL_StatusTypeDef ret = HAL_I2C_IsDeviceReady(&hi2c1, MPU9250_I2C_ADDRESS << 1, 10,100);
...


Вероятността да сбъркаш е по-малка.
Погледни реда, в който викаш функцията HAL_I2C_IsDeviceReady - параметърът DevAddress е различен от този в коментарите след нея, т.е. имаш три различни числа. Кое е вярното?

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!


Вто Фев 13, 2024 10:38 am
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Съб Апр 01, 2023 9:59 am
Мнения: 304
Мнение Re: STM32 HAL_I2C_IsDeviceReady
Благодаря, ще го направя както показваш, в действителност внася организираност. Мисля че използваният адрес е различен е защото последно пробвах с трето устройство, което не бях записал в коментарите. Но сега ще се концентрирам само върху MPU-9250/6500.


Вто Фев 13, 2024 10:46 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: STM32 HAL_I2C_IsDeviceReady
за SPI & I2C е добре да имаш осцилоскоп под ръка ... никога не тръгват от ряз
та почваш от там ... имаш/нямаш сигнали - объркал пиновете
грозни форми - забравил и сгрешил пъл-ъп, предава - не приема, все някой бит/число объркано

но винаги се почва с Гугъл :)

_________________
main[-1u]={1};


Вто Фев 13, 2024 10:54 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Съб Апр 01, 2023 9:59 am
Мнения: 304
Мнение Re: STM32 HAL_I2C_IsDeviceReady
Прав си магьоснико, ама нямам. Ще купя един при първа възможност. Отдавна осъзнах нуждата. Гугъла го ползвам и бота и документация, уж се опитвам да правя нещата както трябва, без да я карам "през просото".

Бях поръчал две устройства защото имам лош спомен от дефектно или повредено от мен устройсто. Току що запоих новото и разгеле върна OK. По едно време вчера бях го захранил с 5V, по невнимание, така че може да съм повредил предното кит-че, но определено не работи.


Вто Фев 13, 2024 11:42 am
Профил
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение Re: STM32 HAL_I2C_IsDeviceReady
Да за тия интерфейси се иска гледане, ако не скоп някакъв евтин логически анализатор, има много. Много често проблема е в имплементацията, понякога в куцо описание, но резултата е все един и същ, я адреса в различен, я режима, и това са неща които се виждат веднага.


Вто Фев 13, 2024 8:07 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Нед Окт 19, 2008 7:26 pm
Мнения: 673
Мнение Re: STM32 HAL_I2C_IsDeviceReady
примерно за LM75A
#define MY_I2C hi2c2
#define LM75_ADDRESS ((0x48 | 0x00) << 1 )
uint8_t reg
Първо давам
MX_I2C2_Init();

HAL_I2C_Master_Transmit( &MY_I2C, LM75_ADDRESS, &reg, 1, 500 ); ////////////// HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c,
////////////// uint16_t DevAddress,
////////////// uint8_t *pData,
//////////////// uint16_t Size,
//////////////// uint32_t Timeout);

_________________
Вниманиене съмвишист....ИЙ.


Съб Фев 17, 2024 8:25 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Нед Окт 19, 2008 7:26 pm
Мнения: 673
Мнение Re: STM32 HAL_I2C_IsDeviceReady
Да питам за STM32F103C6T6
Правя си една платка да ми следи едни сигнали.
Имам 3 масива uint16_t по 820 елемента.
Те съдържат измервания на 3 ADC канала в разстояние на 42mkS по 820 измервания на канал.
Трябва да ги пратя през USB на пакети uint8_t 64 байта. В mine.c изпращането на репорта е ОК. Но когато функцията за изпращане на пакета се вика в друга моя функция, нещата се омазват. Усетих се че е от размера на стека. В линкера промених Stack Size от 0x400 на 0x500.
И нещата се оправиха. но не ми е много ясно какво стана. Какво означава това съпоставено с дълбочината на стека Или с броя на запомнените Пр. адреси и препълване на стека . 0x400 или 0x500 какво точно променя ???

_________________
Вниманиене съмвишист....ИЙ.


Нед Май 05, 2024 7:37 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Юни 05, 2006 1:48 pm
Мнения: 4906
Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
Мнение Re: STM32 HAL_I2C_IsDeviceReady
RM написа:
Да питам за STM32F103C6T6
Правя си една платка да ми следи едни сигнали.
Имам 3 масива uint16_t по 820 елемента.
Те съдържат измервания на 3 ADC канала в разстояние на 42mkS по 820 измервания на канал.
Трябва да ги пратя през USB на пакети uint8_t 64 байта. В mine.c изпращането на репорта е ОК. Но когато функцията за изпращане на пакета се вика в друга моя функция, нещата се омазват. Усетих се че е от размера на стека. В линкера промених Stack Size от 0x400 на 0x500.
И нещата се оправиха. но не ми е много ясно какво стана. Какво означава това съпоставено с дълбочината на стека Или с броя на запомнените Пр. адреси и препълване на стека . 0x400 или 0x500 какво точно променя ???

Ми що не направиш един кръговнбуфер. Интам да буташ от една страна данните от ацп , а от друга да четеш и да пращаш по усб?
Така няма дастека няма да има нужда да го уголемяваш илибдантинендинамичен..

_________________
... ако трети ден не ти се работи... това означава, че е сряда !


Нед Май 05, 2024 8:19 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Съб Фев 06, 2016 8:29 pm
Мнения: 237
Мнение Re: STM32 HAL_I2C_IsDeviceReady
RM написа:
... 0x400 или 0x500 какво точно променя ???


Препълване стека може да се получи ако виканите функции използват повечко локални променливи.
Например:
Код:
void A(void)
{
   uint8_t buf[256];
   ....
}

void B(void)
{
   uint8_t buf[256];
   ....
  A();
}

Тук ще трябва стек поне 512 + 8 байта.


Нед Май 05, 2024 10:54 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Нед Окт 19, 2008 7:26 pm
Мнения: 673
Мнение Re: STM32 HAL_I2C_IsDeviceReady
iss написа:
RM написа:
... 0x400 или 0x500 какво точно променя ???


Препълване стека може да се получи ако виканите функции използват повечко локални променливи.
Например:
Код:
void A(void)
{
   uint8_t buf[256];
   ....
}

void B(void)
{
   uint8_t buf[256];
   ....
  A();
}

Тук ще трябва стек поне 512 + 8 байта.




Тука вече съвсем не ме иска
Код:
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint8_t tx_buffer[64];      
uint8_t report_buffer[64];      
uint8_t flag = 0;         
uint8_t USBflag_rx = 0;         
char msgbuf[64];     //AO!

uint8_t tmp[64];
uint16_t tx_buffer1[32];
uint16_t input_array[832];
uint8_t output_arrays[25][64];


uint8_t ADC_FLAG;
#define TRUE 1
#define FALSE 0
#define adc_buff 832
uint16_t adc1_buff[adc_buff];
uint16_t adc2_buff[adc_buff];
uint16_t adc3_buff[adc_buff];
uint16_t adc_counter=0;
uint8_t   ADC_conversion_START=1;
/* USER CODE END PV */


/* USER CODE END 0 */



Промяната на реда 0х400 на 0х500 не промени нещата ... нещо се бях заблудил.

Код:
Stack_Size      EQU     0x400   

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp




Пуснах симулация на това което искам да следя ... оказа се че е невъзможно според познанията ми.
Измерване на нарастване на фронт от 0V до 2.84V с продължителност 1.32 микроСекунди !!!

_________________
Вниманиене съмвишист....ИЙ.


Пон Май 06, 2024 2:21 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 16 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни