Цитата(serglg @ May 1 2018, 05:52)

Когда я после ногодрыга для I2C на Z8 впервые запустил аппаратный I2C на STM32L476, то вообще ничего не заметил. :-)
Потому что Куб всё сгенерил, я вставил HAL-строки и всё. Память 64К пишется, читается.
Предыдущая верси той платы, с которой колега возится, была тоже на L476, и никаких проблем с ней небыло.
Они начались на новой плате с 452-м.
В общем я решил помочь коллеге, и взял пару платок поиграться.
Сразу скажу - в отличие от его экспериментов, я не заметил никакой разницы между платаи так и в том запускать под дебаггером или не под дебаггером.
Отдал ему результаты. пусть дальше сам возится.
Но(!), кое-какие нестыковки я все-же заметил. Причем из серии "этого не может быть, потому что этого не может быть никогда".
Поясняю - простенькая программка на калохале, ничего кроме i2c в ней нет.
Хал пробовался и 1.8.1 и 1.11.0, разницы в поведении между ними не выявлено.
I2C Fast, 400kHz. и обычный на 100кгц. Константу делителя менял вручную.
Проверено было 4 варианта источника тактовой - MSI_8MHz, MSI_16MHz, HSI_16MHz, HSE_24MHz.
При этом переключался делитель PLLM соответственно 2-4-4-6, т.е. частот на входе PLL была во всех случаях неизменна - 4Мгц.
Для контроля, на MCO выводитась частота с текущего источника деленая на 8 дя 8мгц и на 16 для остальных.
Остальные настойки не менялись вообще. Каждый источник был проверен 2 раза, с разными константами делителя i2c.
В основном цикле, с привязкой к систику (т.е. с периодом 1мс) читался по i2c регистр аккселерометра LSM6DS3.
Сразу скажу - цикл 1мс во всех случаях был правильный, в отличие от не совсем точной частоты на MCO и полного балагана с частотой SCL.
Просомтр в дебаггере регистров i2c криминала не вявил - что просили, то туда и записалось.
Результаты:
Код
MSI_8: MCO=0.98 MHz, SCL100 = 38 kHz, SCL400 = 155 kHz.
MSI_16: MCO=0.987 MHz, SCL100 = 152 kHz, SCL400 = 550 kHz.
HSI_16: MCO=0.982 MHz, SCL100 = 140 kHz, SCL400 = 536 kHz.
HSE_24: MCO=1.5 MHz, SCL100 = 113 kHz, SCL400 = 425 kHz.
Т.е. частота MCO правильная, систика - тоже правильная, а SCK - более-менее правильная только для внешнего кварца.
Напомню еще раз - во всех случаях. на входе PLL частота 4мгц, от которой и шло дальнейшее тактирование всего. Менялся только источник этих 4-х мгц.
P.S. Да, я понмаю, калокуб и всякое тому подобное, но сгенерированый им исходник ведь не менялся.
Тактирование - на вход PLL