eddy_em: (Default)
eddy_em ([personal profile] eddy_em) wrote2023-01-08 06:38 pm
Entry tags:

I2C with DMA on STM32G070

Добавил DMA в сниппет I2C под G070. Оказалось все не так уж и сложно: нужно лишь внимательно читать собственный код, чтобы не пропустить косяк, когда ты обнулил I2C1->CCR1, а потом забыл там выставить флаги для чтения/записи по DMA.
Основной недостаток — "подвисание" DMA в случае NAK или других проблем. Поэтому нужно периодически проверять флаги I2C, и чуть какие ошибки — заново его настраивать, чтобы все эти зависоны сбросить.
А еще обнаружил, что подопытный SHT30 — та еще гадость. На малейшую ошибку (скажем, не ту команду дал или не в тот регистр попытался записать) он подвешивает линию I2C! Нужно четко запомнить: всегда питание устройств I2C нужно вешать на управляемый ключ, иначе одна зараза может лишить доступа к другим устройствам.
Пожалуй, на этом игры с G070 на какое-то время прекращу. Да и вообще, G0 по сравнению с F0 практически никаких плюсов не имеет (кроме, разве что, DMAMUX), зато имеет гору минусов. В общем, ну его нафиг! Да еще и каналов DMA на 64-ногий корпус всего лишь 7. Ну что за извращение? Хочу хотя бы 32. А вообще, по-хорошему, надо бы наделать мультиплексоров столько, чтобы было хотя бы 128 каналов DMA. И прерываний хотя бы 256 — чтобы не было этой необходимости делить одно и то же прерывание между несколькими разными интерфейсами.

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org