реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32 I2C
dimone
сообщение Mar 26 2012, 07:50
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 102
Регистрация: 23-02-09
Пользователь №: 45 242



При окончании записи в eеprom бит STOP СR1 остается не сброшенным , и при следующем сеансе записи подпрограмма затыкется, подскажите пожалуйста надо ли принудительно сбрасывать этот бит , в примерах такого не видел sad.gif
Go to the top of the page
 
+Quote Post
PoReX
сообщение Mar 26 2012, 08:15
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 112
Регистрация: 1-05-09
Из: Ростов-на-Дону
Пользователь №: 48 518



Reference manual
Цитата
STOP : Stop generation
The bit is set and cleared by software, cleared by hardware when a Stop condition is
detected, set by hardware when a timeout error is detected.

In Master Mode:
0: No Stop generation.
1: Stop generation after the current byte transfer or after the current Start condition is sent.

In Slave mode:
0: No Stop generation.
1: Release the SCL and SDA lines after the current byte transfer.

Note: When the STOP, START or PEC bit is set, the software must not perform any write
access to I2C_CR1 before this bit is cleared by hardware. Otherwise there is a risk of
setting a second STOP, START or PEC request.

Может ошибка записи вылазит? Код в студию.


--------------------
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»
Go to the top of the page
 
+Quote Post
dimone
сообщение Mar 26 2012, 10:49
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 102
Регистрация: 23-02-09
Пользователь №: 45 242



-первый вызов-отлично,
во второй не встают MSL \ BUSY


byt_wrt(0, my_var);
byt_wrt(0, my_var);


-функция записи однго байта по адресу:
Код
void byt_wrt(short adr,  char data)    {

i2c1_adr=i2c_epr_adr|((adr>>7)&0x06);    
*(i2c1_tp+1)=adr;    
*i2c1_tp=data;      
    
i2c1_tc=2;
i2c1_sts=i2c_bus;          
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)){};       
I2C_GenerateSTART(I2C1, ENABLE);
}


-обработчик:
Код
     switch (I2C_GetLastEvent(I2C1))
     {
     /* Start condition released */
     case I2C_EVENT_MASTER_MODE_SELECT:        
        I2C_Send7bitAddress(I2C1, i2c1_adr, I2C_Direction_Transmitter); //sending ADDR with TX attr.
     break;
          
     /* slave confirmed ADDR */    
     case I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED:                      
        I2C_SendData(I2C1, *(i2c1_tp+--i2c1_tc));//sending the first byte
     break;              
    
     /* byte has gone */               
     case I2C_EVENT_MASTER_BYTE_TRANSMITTED:
                
       if(i2c1_tc>0){
        I2C_SendData(I2C1, *(i2c1_tp+--i2c1_tc));}//sendin' the following byte, if such exists        
        else {
            I2C_GenerateSTOP(I2C1, ENABLE); i2c1_sts=i2c_don; } //no more transmissions needed - sending STOP
     break;}
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 01:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01352 секунд с 7
ELECTRONIX ©2004-2016