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

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> STM32F050 I2C, не работает
Golikov A.
сообщение Jun 23 2014, 21:03
Сообщение #46


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
И в чем была причина? Во-первых нам любопытно, а во вторых, возможно,

как я понял не был выставлен режим мастера для I2C...
Go to the top of the page
 
+Quote Post
glags
сообщение Jun 24 2014, 14:44
Сообщение #47


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 9-05-13
Из: Львов, Украина
Пользователь №: 76 782



Привет всем. sm.gif
Ну что господа, родил я код. Привожу ниже, может кому пригодится. А то я сам намучался, хочу и другим облегчить жизнь.
Код
    uint_fast16_t I2CLM75(void)
    {   uint32_t i;
        while ((I2C1->ISR & I2C_ISR_TXE)==0);    //while TXE ==0, buffer is full
        // Задать адрес приёмника и длину данных
        i=I2C1->CR2;
        i &= (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | I2C_CR2_RD_WRN | I2C_CR2_START | I2C_CR2_STOP));
        i |= ((0x90 & I2C_CR2_SADD) | ((1 << 16 ) & I2C_CR2_NBYTES) | I2C_CR2_RELOAD | I2C_CR2_START);
        I2C1->CR2=i;
        while ( (I2C1 -> ISR & I2C_ISR_TXIS) == 0);
         I2C1->TXDR = 0;//Передача номера регистра для чтения из STLM75
         while ((I2C1->ISR & I2C_ISR_TCR)==0);//ждём окончание передачи
         I2C1->CR2 |= I2C_CR2_STOP;//Делаем стоп :) здесь собака зарыта
         i=I2C1->CR2;
         i &= (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | I2C_CR2_RD_WRN | I2C_CR2_START | I2C_CR2_STOP));
         i |= ((0x90 & I2C_CR2_SADD) | ((2 << 16 ) & I2C_CR2_NBYTES) | I2C_CR2_RD_WRN | I2C_CR2_START);
         I2C1->CR2=i;
         while ( ( I2C1 -> ISR & I2C_ISR_RXNE ) == 0);
         i=I2C1->RXDR;
         i<<=8;
         while ( ( I2C1 -> ISR & I2C_ISR_RXNE ) == 0);
         i |=I2C1->RXDR;
         I2C1->CR2|=(90<<0)|(1<<16)| I2C_CR2_RELOAD;    //address SLAVE 7bits
         I2C1->CR2 &=~ I2C_CR2_RD_WRN;  //write
         I2C1->CR2 |= I2C_CR2_STOP; // Stop Transmit
        while ( ( I2C1 -> ISR & I2C_ISR_STOPF ) == 0 );
        I2C1 -> ICR = I2C_ICR_STOPCF;
        return i;}

PS: Всем огромаднейшее спасибо за поддержку!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 02:25
Рейтинг@Mail.ru


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