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

 
 
> залипает шина I2C в STM32, на МК режим slave
Метценгерштейн
сообщение Oct 6 2016, 08:51
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



STM32 подключен слейвом к другому процу АРМ на Линуксе.
Все работает, но поведение странное. Периодически отваливается шина I2C и мой STM не получает никакие команды из вне. Написана на регистрах инициализация. Подтяжки шины к +3,3 по 7,5 К.
Куда можно смотреть? Может что не проинициализировал в МК?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Метценгерштейн
сообщение Oct 6 2016, 11:34
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



выложу инициализацию I2C. Может у кого глаз зацепится за что-то некорректное.
Проц STM32F030
На всякий случай сейчас еще раз перевыкачал CubeMX, так с ним шину I2C Линукс даже не сканирует. Сразу глючит. HAL вообще здесь не применим.

Код
void init(void)
{
    i2c.max_rx_count = sizeof(incoming);
    i2c.state = st_idle;
    uint_fast32_t bus_clk;    
    uint_fast32_t scale;
    static const struct gpio_configuration pinconf =
    {
      .open_drain=1,
      .output=0,
      .analog=0,
      .alter=1,
      .speed=0,
      .pullup=0, // было 1
      .pulldn=0,
      .altfunc = 1, // convenient i2c
      .lock=0
    };

    RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
    gpio_pin_conf(GPIOB, 6,1,&pinconf);
    gpio_pin_conf(GPIOB, 7,1,&pinconf);
    RCC->APB1RSTR |= RCC_APB1RSTR_I2C1RST;
    RCC->APB1RSTR ^= RCC_APB1RSTR_I2C1RST;
    RCC->APB1ENR |= RCC_APB1ENR_I2C1EN;
    SystemCoreClockUpdate();
// get sysclk for apb1
    if((RCC->CFGR3 & RCC_CFGR3_I2C1SW) == 0) // RCC_CFGR3_I2C1SW если 1, то от SystemCoreClock
    {
        bus_clk = HSI_VALUE;
    }
    else
    {
        bus_clk = SystemCoreClock;
        if(RCC->CFGR & RCC_CFGR_PPRE_2)
        {
            uint_fast32_t factor = RCC->CFGR & (RCC_CFGR_PPRE_0 | RCC_CFGR_PPRE_1);
            if(factor & RCC_CFGR_PPRE_0) factor |= 1;
            if(factor & RCC_CFGR_PPRE_1) factor |= 2;
            factor &= 3;
            bus_clk >>= factor + 1;
        }
    }
// general scale factor to 8mhz
scale = bus_clk / (HSI_VALUE/2);
scale -= 1;    
scale &= 0x0f;
myI2C->TIMINGR = scale << 28;
// tclk = 250ns refman page 556 - place config from table 100khz
myI2C->TIMINGR |= 0x13 //scll
        |    (0x0f << 8) //sclh
        |    (0x02 << 16) //sdadel
        | (0x04 << 20); //    scldel
//conf i2c
    NVIC_EnableIRQ(I2C1_IRQn);
//set int mask
    myI2C->CR1 = I2C_CR1_ADDRIE
                        | I2C_CR1_RXIE
                          | I2C_CR1_TXIE

                        //|    I2C_CR1_NACKIE
                        |    I2C_CR1_STOPIE
                        |    I2C_CR1_TCIE
                        |    I2C_CR1_ERRIE;
// enable analog noise filtering or digital
//    myI2C->CR1 |= I2C_CR1_ANFOFF;// currently analog
// clock stretch enabled

// set own address
    myI2C->OAR1 = I2C_OAR1_OA1EN | ((get_slave_address() & 0x7F) << 1);
// enable
    myI2C->CR1 |= I2C_CR1_PE;
}


Код
void gpio_pin_conf(
    GPIO_TypeDef *gp,
    uint8_t    num,
    uint8_t    value,
    const struct gpio_configuration *conf)
{
    volatile uint32_t *altreg;
    uint32_t msk2 = 1 << (num*2);
    uint32_t msk4 = 1 << ((num & 0x07)*4);
    num &= 0x0f;
    gp->MODER &= ~(3*msk2);
    if(conf->output) gp->MODER |= msk2;
    if(conf->analog) gp->MODER |= 3*msk2;
    if(conf->alter) gp->MODER |= 2*msk2;

    if(conf->open_drain) gp->OTYPER |= 1 << num;
    else gp->OTYPER &= ~(1 << num);

    gp->OSPEEDR &= ~(3*msk2);
    gp->OSPEEDR |= conf->speed * msk2;

    gp->PUPDR &= ~(3*msk2);
    if(conf->pullup) gp->PUPDR |= msk2;
    if(conf->pulldn) gp->PUPDR |= 2*msk2;

    //set value
    gp->BSRR |= 1 << (num + value?0:16);
    //set af
    altreg = &gp->AFR[(num >= 8)];
    *altreg &= ~(0x0F * msk4);
    *altreg |= conf->altfunc * msk4;
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Метценгерштейн   залипает шина I2C в STM32   Oct 6 2016, 08:51
- - Jury093   Цитата(Метценгерштейн @ Oct 6 2016, 11:51...   Oct 6 2016, 10:23
|- - Метценгерштейн   Цитата(Jury093 @ Oct 6 2016, 13:23) так п...   Oct 6 2016, 10:33
- - gerber   Изъездил аппаратный I2C Slave на STM32 вдоль и поп...   Oct 6 2016, 10:59
- - gerber   Как по мне, сбрасывать периферию, не включив её кл...   Oct 6 2016, 11:59
- - Метценгерштейн   ну а так в целом- все регистры проинициализированы...   Oct 6 2016, 12:05
|- - gerber   Цитата(Метценгерштейн @ Oct 6 2016, 15:05...   Oct 6 2016, 12:08
- - Метценгерштейн   КодRCC->AHBENR |= RCC_AHBENR_GPIOBEN; RCC-...   Oct 6 2016, 12:16
|- - gerber   Цитата(Метценгерштейн @ Oct 6 2016, 15:16...   Oct 6 2016, 12:25
|- - Метценгерштейн   Цитата(gerber @ Oct 6 2016, 15:25) Я бы с...   Oct 6 2016, 12:30
|- - gerber   Цитата(Метценгерштейн @ Oct 6 2016, 15:30...   Oct 6 2016, 12:38
- - Метценгерштейн   Можно как-то попросить поделиться драйвером вашим?...   Oct 6 2016, 12:42
- - k155la3   Цитата(Метценгерштейн @ Oct 6 2016, 11:51...   Oct 6 2016, 13:56
- - Метценгерштейн   на ночь оставлю на прогоне девайс- посмотрим к утр...   Oct 6 2016, 14:54
|- - k155la3   Может помеха - наводка быть. Импульсные блоки пита...   Oct 6 2016, 15:17
- - Метценгерштейн   Такое ощущение происходило, что именно со стороны ...   Oct 6 2016, 17:05
|- - k155la3   Цитата(Метценгерштейн @ Oct 6 2016, 20:05...   Oct 7 2016, 07:07
- - Метценгерштейн   Ну что. Ночь отстояло. 2 стенда сразу. Ничего нигд...   Oct 7 2016, 06:55
- - Метценгерштейн   а еще такой момент- не указал нигде в коде, что пр...   Oct 7 2016, 13:02
|- - k155la3   Цитата(Метценгерштейн @ Oct 7 2016, 16:02...   Oct 7 2016, 14:34
- - gerber   После RESET, насколько я помню, в STM32 все перифе...   Oct 7 2016, 15:13
- - Метценгерштейн   глюк вот какой замечен. Связка- мастер Линукс, сле...   Oct 7 2016, 15:20
|- - k155la3   Цитата(Метценгерштейн @ Oct 7 2016, 18:20...   Oct 8 2016, 09:55
- - Метценгерштейн   в понедельник дам ответ. Заодно посмотрим- за выхо...   Oct 8 2016, 17:42
- - Метценгерштейн   k155la3, все выходные простояло нормально. С утра...   Oct 10 2016, 07:41
|- - k155la3   Цитата(Метценгерштейн @ Oct 10 2016, 10:4...   Oct 10 2016, 09:08
- - Метценгерштейн   Пробую. Перезагрузка софта- есть Линукс. На нем...   Oct 10 2016, 10:17
|- - k155la3   Цитата(Метценгерштейн @ Oct 10 2016, 13:1...   Oct 10 2016, 10:32
- - Метценгерштейн   там идет пачка пакетов. Я выхватил что-то посереди...   Oct 10 2016, 13:28
|- - Jury093   Цитата(Метценгерштейн @ Oct 10 2016, 16:2...   Oct 11 2016, 16:12
|- - Метценгерштейн   Цитата(Jury093 @ Oct 11 2016, 19:12) как ...   Oct 11 2016, 18:30
- - Nixon   Месяц ждать? А на месте купить? Запрос "salea...   Oct 10 2016, 14:20
- - Метценгерштейн   сегодня куплю вечером его. Утром будет у меня уже....   Oct 10 2016, 14:56
|- - gerber   Цитата(Метценгерштейн @ Oct 10 2016, 17:5...   Oct 10 2016, 14:59
|- - Метценгерштейн   Цитата(gerber @ Oct 10 2016, 17:59) Вроде...   Oct 10 2016, 15:13
- - Метценгерштейн   да, правильно. на 9-м бите в нуле зеленый луч. Это...   Oct 10 2016, 15:04
|- - gerber   Цитата(Метценгерштейн @ Oct 10 2016, 18:0...   Oct 10 2016, 15:13
- - gerber   Ну, фронты не только мастер определяет, в случае б...   Oct 10 2016, 15:22
- - Метценгерштейн   зеленый луч- зачастую слейв отвечает. После SCL сл...   Oct 10 2016, 15:31
- - Nixon   Мастер растягивать SCL умеет? STM по-умолчанию дел...   Oct 10 2016, 18:35
- - Метценгерштейн   мастер может и умеет, но я туда не лезу. Может гд...   Oct 10 2016, 18:56
|- - k155la3   Цитата(Метценгерштейн @ Oct 10 2016, 21:5...   Oct 11 2016, 06:46
- - Метценгерштейн   http://prntscr.com/cseh7b вот кусок с анализатора...   Oct 11 2016, 08:09
- - Nixon   Анализатор пишет адрес с учетом сдвига. Там еще на...   Oct 11 2016, 09:40
- - Метценгерштейн   может быть, что зависания происходят из-за того, ч...   Oct 11 2016, 09:57
- - Метценгерштейн   Вроде локализовали проблему. Прога на Линуксе не в...   Oct 12 2016, 14:23
- - Nixon   C этого и начинать нужно было. Не стоит нагружать ...   Oct 12 2016, 16:22
- - Метценгерштейн   у вас код if else if другими словами, в прерывании...   Oct 13 2016, 07:53
- - Timmy   Цитата(Метценгерштейн @ Oct 13 2016, 10:5...   Oct 13 2016, 09:20


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

 


RSS Текстовая версия Сейчас: 3rd July 2025 - 09:40
Рейтинг@Mail.ru


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