I2C on STM32G070
Jan. 7th, 2023 08:39 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Добавил и I2C. В простейшем случае (без DMA) все решилось элементарным переносом с F0. Дольше провозился, разгребая все по разным файлам и переделывая proto.c.
Проверял на недавно купленном датчике SHT30 (у старых я всех подтяжки поотпаивал, чтобы к "апельсинке" присоединить, а новых аж 4 разных, но у остальных трех нужно гребенки паять — лень). Правда, у SHT30 зачем-то регистры 16-битные сделали (хоть там тех регистров и на 4 бита за глаза), так что пришлось еще добавить возможность чтения регистров с 16-битными адресами. Статусные регистры показывает, грелку включает/выключает, в однократном или непрерывном режиме температуру и влажность показывает. Температура плавает в районе ±0.05℃, влажность — в районе ±2%. По-хорошему, конечно, надо будет всю эту кучу датчиков потом в эдакий термостат засунуть, да посмотреть по калиброванному термометру, насколько врут. Еще бы чем-нибудь их показания влажности измерить… Ах, да: врет он по температуре безобразно: кажет аж 26℃ в квартире (все китайские домашние термометры 24 показывают). Если менять параметр "repeatability" (точность, видать), вообще ничего не меняется. Хотя точность обещали ±0.3℃, ну, обещанного три года ждут (а уж с китайскими датчиками, похоже, все очень плохо).
Завтра в 8 утра на работу вставать, надо долго не засиживаться, но чуть-чуть хочется еще потыкать палочкой возможность запуска I2C через DMA.
Проверял на недавно купленном датчике SHT30 (у старых я всех подтяжки поотпаивал, чтобы к "апельсинке" присоединить, а новых аж 4 разных, но у остальных трех нужно гребенки паять — лень). Правда, у SHT30 зачем-то регистры 16-битные сделали (хоть там тех регистров и на 4 бита за глаза), так что пришлось еще добавить возможность чтения регистров с 16-битными адресами. Статусные регистры показывает, грелку включает/выключает, в однократном или непрерывном режиме температуру и влажность показывает. Температура плавает в районе ±0.05℃, влажность — в районе ±2%. По-хорошему, конечно, надо будет всю эту кучу датчиков потом в эдакий термостат засунуть, да посмотреть по калиброванному термометру, насколько врут. Еще бы чем-нибудь их показания влажности измерить… Ах, да: врет он по температуре безобразно: кажет аж 26℃ в квартире (все китайские домашние термометры 24 показывают). Если менять параметр "repeatability" (точность, видать), вообще ничего не меняется. Хотя точность обещали ±0.3℃, ну, обещанного три года ждут (а уж с китайскими датчиками, похоже, все очень плохо).
Завтра в 8 утра на работу вставать, надо долго не засиживаться, но чуть-чуть хочется еще потыкать палочкой возможность запуска I2C через DMA.