Jump to content

I2C STM32F0


Стальной
 Share

Recommended Posts

Приветствую. Не получается запустить I2C на STM32F030F4P6 для общения с EEPROM. Использую StdPeriph. Сначала пробовал сам писать, потом взял код отсюда. Результат одинаков: На линиях активности нет, висит 3В. Через CubeMX все работает.

Последний код, который я пробовал:


void I2C_EEPROM_Init(void)
{
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
	GPIOA->MODER |= GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1;			// Режим альтернативной функции
	GPIOA->OTYPER |= GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10;				// Открытый коллектор
	GPIOA->OSPEEDR |= 0xFF<<18;	// Максимальная скорость
	// Выбор альтернативной функции
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource9,  GPIO_AF_1);	// I2C1_SCL
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);	// I2C1_SDA

	I2C_InitTypeDef I2C_InitStruct;
	I2C_InitStruct.I2C_Timing = 0x00402D42;
	I2C_InitStruct.I2C_AnalogFilter = I2C_AnalogFilter_Disable;
	I2C_InitStruct.I2C_DigitalFilter = 0x00;
	I2C_InitStruct.I2C_Mode = I2C_Mode_I2C ;
	I2C_InitStruct.I2C_OwnAddress1 = 0xDD;
	I2C_Init( I2C1, &I2C_InitStruct);
	I2C_Cmd(I2C1, ENABLE);
}


int main()

{
	/*
	 * ВКЛЮЧЕНИМЕ IWDG
	 */
	// включаем LSI
	RCC_LSICmd(ENABLE);
	while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);
	// разрешается доступ к регистрам IWDG
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
	// устанавливаем предделитель
	IWDG_SetPrescaler(IWDG_Prescaler_256);
	// значение для перезагрузки
	IWDG_SetReload(0xEA);
	// перезагрузим значение
	IWDG_ReloadCounter();
	// LSI должен быть включен
	//IWDG_Enable();
	/*
	 * ВКЛЮЧЕНИМЕ IWDG ЗАВЕРШЕНО
	 */


	/*
	 * Запуск ФАПЧ
	 * Основная частота 48 МГц
	 * UART от HSI
	 */
	RCC->CFGR |= 0xAA<<18; //pll mul = 12
	RCC->CFGR |= 5<<8; //APB prescaller = 4
	RCC->CFGR3 |= 3; //USART clock from HSI
	RCC->CR |= RCC_CR_PLLON;
	while ((RCC->CR | RCC_CR_PLLRDY) == 0);
	RCC->CFGR |= 2; //PLL as SYSCLK
	/*
	 * Настройка ФАПЧ завершена
	 */
	//RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
//	I2C_Initialization();

	I2C_EEPROM_Init();

	while (1)
	{
		I2C_TransferHandling(I2C1, 0xA0, 1, I2C_Reload_Mode, I2C_Generate_Start_Write);//devAddr
		while(I2C_GetFlagStatus(I2C1, I2C_ISR_TXE) == RESET);//TXDR empty
		I2C_SendData(I2C1, 0);//memAddr
		while(I2C_GetFlagStatus(I2C1, I2C_ISR_TCR) == RESET);//transmition complete
		I2C_TransferHandling(I2C1, 0xA0, 1, I2C_AutoEnd_Mode, I2C_No_StartStop);
		while(I2C_GetFlagStatus(I2C1, I2C_ISR_TXE) == RESET);
		I2C_SendData(I2C1, 25);
		while(I2C_GetFlagStatus(I2C1, I2C_ISR_STOPF) == RESET);
		I2C_ClearFlag(I2C1, I2C_ICR_STOPCF);

		for (long int i = 0; i < 30000; i++)
			IWDG_ReloadCounter();
	}
}

 

Прошу помощи с этой проблемой. Спасибо.

Link to comment
Share on other sites

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Участвуйте в розыгрыше купонов 5000 ₽, 10000 ₽ и 15000 ₽! Выиграй купон и забирай на эту сумму любые электронные компоненты, радиодетали или любой другой товар из нашего каталога

Проигравших не будет, без подарков никто не останется! ТМ дарит всем участникам розыгрыша 5000 баллов на счёт весь декабрь скидка 10% по промокоду UHUHU23, а ещё 15% кэшбэк и бесплатная доставка! Ну... вздрогнем!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

и можно еще не забыть, что в 0-вках резисторы подтяжки уже встроены и включить их

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Link to comment
Share on other sites

Материалы вебинара «Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока»

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...