|
залипает шина I2C в STM32, на МК режим slave |
|
|
|
 |
Ответов
|
Oct 6 2016, 11:34
|
Профессионал
    
Группа: Свой
Сообщений: 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; }
|
|
|
|
Сообщений в этой теме
Метценгерштейн залипает шина 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|