Перейти к содержанию
    

Помогите разобраться с программированием микросхемы через микроконтроллер.

Здравствуйте, вот даташит драйвера микросхемы: https://www.compel.ru/item-pdf/2ca117b3fb3721979994a935337fcc2d/pn/novosens~nsa2860x-dqnr.pdf  . На странице 33 представлено, как пользоваться i2c для данной схемы.

Если нужно (подозреваю, что нет), то вот даташиты микроконтроллера, который подключен к микросхеме: https://www.st.com/resource/en/reference_manual/CD00171190-.pdf  и https://www.st.com/resource/en/datasheet/stm32f103c8.pdf .

Вот начальные условия: выходы микроконтроллера (pb6 и pb7) подключены к микросхеме. Необходимо отправить сигнал и получить его. С помощью библиотеки HAL я настроил его, но возникли проблемы: сигнал скорее всего не отправляется и не читается соответственно.

Фрагмент кода представлен ниже:

image.png.93f7dad4324cdf2b822a0b33fae313ff.png

0x6D адрес ведомого,  EEPR_REG_SPARE1 адрес регистра (0xcf). 

Кроме этого я пытаюсь отправить весь массив, а в итоге отправляется только нулевой элемент и всё. Считывается тоже только нулевой элемент. Что я делаю не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Короче говоря, я исправил код, но он по-прежнему не работает. Теперь он выглядит так.

 

image.thumb.png.fa4487003f11ac77473c301bc8a965a2.png

 

Вот, что показывается стэке.

image.png.eeca064954f8b9064c93a53118c6fbc7.png

Это странно. Какое значение бы я ни ввел, все равно будет c8 и 02. С чем это может быть связано?

Изменено пользователем anton2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/23/2023 at 2:06 PM, anton2 said:

Короче говоря, я исправил код, но он по-прежнему не работает. Теперь он выглядит так.

......

Это странно. Какое значение бы я ни ввел, все равно будет c8 и 02. С чем это может быть связано?

Вы знаете как работает шина I2C ?
У вас обработчик прерываний на прием и передачу по I2C реализован ?

On 11/23/2023 at 2:06 PM, anton2 said:

Вот, что показывается стэке.

Что такое стэке ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И не будет работать. Либо _IT уберите, либо проверяйте окончание операции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделйте так:

	HAL_StatusTypeDef  I2CRes;
	..........
	I2CRes = HAL_I2C_IsDeviceReady(&hi2c1, addr, 5,5);
	

И посмотрите чему равна переменная. Пока эта функция не вернет ноль (HAL_OK) - дальше двигаться смысла нет.

Не забудьте поставить резисторы (пуллапы) на оба сигнала!

addr - это Ваше (0x6D1<<1), только я не уверен что тут надо сдвигать влево.

И при чтении не надо делать "|1" - функция чтения сама это сделает, когда нужно.

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...