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

stm32F1 24c32n проблема с адресами ячеек

у меня возникла проблема записи на 24c32n.Вернее 4 двухбайтные числа записывает и сохраняет .Я записываю а повторно вхожу в меню после ресета пишет или 255 или 476? Я так понял что проблема в адресе ячеек памяти.Что можете посоветовать.А да  найти адресацию в данной памяти и как понят.Счисление адреса.?Зарание спасибо.

Спойлер


     I2C1->CR1&=~ I2C_CR1_POS;
         I2C1->CR1|=I2C_CR1_ACK;
        I2C1->CR1|= I2C_CR1_START ;
        while (!(I2C1->SR1& I2C_SR1_SB)){};
        (void) I2C1->SR1;
        I2C1->DR =  0b10100000 ;
        while (!(I2C1->SR1& I2C_SR1_ADDR)){};
       (void) I2C1->SR1;
        (void) I2C1->SR2;
        I2C1->DR = 0;
          while (!(I2C1->SR1 & I2C_SR1_TXE)){};
          I2C1->DR = 1;
        while (!(I2C1->SR1 & I2C_SR1_TXE)){};
        I2C1->CR1|= I2C_CR1_START;
         while (!(I2C1->SR1& I2C_SR1_SB)){};
        (void) I2C1->SR1;
        I2C1->DR = 0b10100001;
        while (!(I2C1->SR1& I2C_SR1_ADDR)){};
        (void) I2C1->SR1;
        (void) I2C1->SR2;
        while (!(I2C1->SR1& I2C_SR1_RXNE)){};
         tm1= I2C1->DR;
         while (!(I2C1->SR1& I2C_SR1_RXNE)){};
          tm2= I2C1->DR;
         I2C1->CR1&=~I2C_CR1_ACK;
         I2C1->CR1|= I2C_CR1_STOP;

                I2C1->CR1&=~ I2C_CR1_POS;
                 I2C1->CR1|=I2C_CR1_ACK;
                I2C1->CR1|= I2C_CR1_START ;
                while (!(I2C1->SR1& I2C_SR1_SB)){};
                (void) I2C1->SR1;
                I2C1->DR = 0b10100000;
                while (!(I2C1->SR1& I2C_SR1_ADDR)){};
               (void) I2C1->SR1;
                (void) I2C1->SR2;
                I2C1->DR = 2;
                  while (!(I2C1->SR1 & I2C_SR1_TXE)){};
                  I2C1->DR = 3;
                while (!(I2C1->SR1 & I2C_SR1_TXE)){};
                I2C1->CR1|= I2C_CR1_START;
                 while (!(I2C1->SR1& I2C_SR1_SB)){};
                (void) I2C1->SR1;
                I2C1->DR = 0b10100001;
                while (!(I2C1->SR1& I2C_SR1_ADDR)){};
                (void) I2C1->SR1;
                (void) I2C1->SR2;
                while (!(I2C1->SR1& I2C_SR1_RXNE)){};
                   b1= I2C1->DR;
                 while (!(I2C1->SR1& I2C_SR1_RXNE)){};
                    b2= I2C1->DR;
                 I2C1->CR1&=~I2C_CR1_ACK;
                 I2C1->CR1|= I2C_CR1_STOP;

                 I2C1->CR1&=~ I2C_CR1_POS;
                 I2C1->CR1|=I2C_CR1_ACK;
                I2C1->CR1|= I2C_CR1_START ;
                while (!(I2C1->SR1& I2C_SR1_SB)){};
                (void) I2C1->SR1;
                I2C1->DR =0b10100000;
                while (!(I2C1->SR1& I2C_SR1_ADDR)){};
               (void) I2C1->SR1;
                (void) I2C1->SR2;
                I2C1->DR= 4;
                  while (!(I2C1->SR1 & I2C_SR1_TXE)){};
                  I2C1->DR= 5;
                while (!(I2C1->SR1 & I2C_SR1_TXE)){};
                I2C1->CR1|= I2C_CR1_START;
                 while (!(I2C1->SR1& I2C_SR1_SB)){};
                (void) I2C1->SR1;
                I2C1->DR = 0b10100001;
                while (!(I2C1->SR1& I2C_SR1_ADDR)){};
                (void) I2C1->SR1;
                (void) I2C1->SR2;
                while (!(I2C1->SR1& I2C_SR1_RXNE)){};
                c1= I2C1->DR;
                 while (!(I2C1->SR1& I2C_SR1_RXNE)){};
                 c2= I2C1->DR;
                 I2C1->CR1&=~I2C_CR1_ACK;
                 I2C1->CR1|= I2C_CR1_STOP;

                 I2C1->CR1&=~ I2C_CR1_POS;
                 I2C1->CR1|=I2C_CR1_ACK;
                I2C1->CR1|= I2C_CR1_START ;
                while (!(I2C1->SR1& I2C_SR1_SB)){};
                (void) I2C1->SR1;
                I2C1->DR = 0b10100000;
                while (!(I2C1->SR1& I2C_SR1_ADDR)){};
               (void) I2C1->SR1;
                (void) I2C1->SR2;
                I2C1->DR= 6;
                  while (!(I2C1->SR1 & I2C_SR1_TXE)){};
                  I2C1->DR= 7;
                while (!(I2C1->SR1 & I2C_SR1_TXE)){};
                I2C1->CR1|= I2C_CR1_START;
                 while (!(I2C1->SR1& I2C_SR1_SB)){};
                (void) I2C1->SR1;
                I2C1->DR = 0b10100001;
                while (!(I2C1->SR1& I2C_SR1_ADDR)){};
                (void) I2C1->SR1;
                (void) I2C1->SR2;
                while (!(I2C1->SR1& I2C_SR1_RXNE)){};
                d1= I2C1->DR;
                 while (!(I2C1->SR1& I2C_SR1_RXNE)){};
                 d2= I2C1->DR;
                 I2C1->CR1&=~I2C_CR1_ACK;
                 I2C1->CR1|= I2C_CR1_STOP;

                            I2C1->CR1|= I2C_CR1_START ;
                            while (!(I2C1->SR1& I2C_SR1_SB)){};
                            (void) I2C1->SR1;
                            I2C1->DR = 0b10100000;
                            while (!(I2C1->SR1& I2C_SR1_ADDR)){};
                           (void) I2C1->SR1;
                            (void) I2C1->SR2;
                            I2C1->DR= 10;
                              while (!(I2C1->SR1 & I2C_SR1_TXE)){};
                              I2C1->DR= 11;
                            while (!(I2C1->SR1 & I2C_SR1_TXE)){};
                            I2C1->CR1|= I2C_CR1_START;
                             while (!(I2C1->SR1& I2C_SR1_SB)){};
                            (void) I2C1->SR1;
                            I2C1->DR = 0b10100001;
                            while (!(I2C1->SR1& I2C_SR1_ADDR)){};
                            (void) I2C1->SR1;
                            (void) I2C1->SR2;
                            while (!(I2C1->SR1& I2C_SR1_RXNE)){};
                            a1= I2C1->DR;
                             while (!(I2C1->SR1& I2C_SR1_RXNE)){};
                             a2= I2C1->DR;
                             I2C1->CR1&=~I2C_CR1_ACK;
                             I2C1->CR1|= I2C_CR1_STOP;


                  a=((unsigned int )a1<<8)|a2;
                 b=((unsigned int ) b1<<8)|b2;
                 c=((unsigned int )c1<<8)|c2;
                 d=((unsigned int ) d1<<8)|d2;
               tm=((unsigned int ) tm1<<8)|tm2;

Вот кусок кода он рабочий кроме параметра "a". 

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


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

5 minutes ago, dimir said:

Ау вы где спецы?

https://ww1.microchip.com/downloads/en/DeviceDoc/doc0336.pdf

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


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

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

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

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

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

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

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

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

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

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