Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32f217 I2C проблема
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
the_spirit
пошаговый дебагер keil показал что не пишутся регистры CR1,CR2, SR1,SR2
функция инициализации
void I2C1_Config(void)
{
I2C_InitTypeDef I2C_InitStruct;

/* I2C1 clock enable */
RCC->AHB1ENR |=((uint32_t)0x00200000);
/* GPIOB clock enable */
RCC->AHB1ENR |=((uint32_t)0x00000002);

/* Connect I2C1 pins to AF4 ************************************************/
GPIOB->AFR[1] |= 5;//GPIOB8 -> SCL(AF5)
GPIOB->AFR[1] |= 5<<4;//GPIOB9 -> SDA(AF5)
/* Configure I2C1 GPIOs *****************************************************/
GPIOB->MODER &= 0xFFF0FFFF;
GPIOB->MODER |= 0x000A0000;//GPIOB8,9 ->AF
GPIOB->OTYPER |=0x30000;//Open drain


//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
//GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
//GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//GPIO_Init1(GPIOB, &GPIO_InitStructure);

/* Configure I2C1 ***********************************************************/
/* I2C DeInit */
RCC->APB1RSTR=((uint32_t)0x00200000);
/* Release I2C1 from reset state */
RCC->APB1RSTR &= ~((uint32_t)0x00200000);


/* Enable the I2C peripheral */
I2C1->CR1 |= 0x01;

/* Set the I2C structure parameters */
I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStruct.I2C_OwnAddress1 = 0xFE;
I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;
I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStruct.I2C_ClockSpeed = 30000;

/* Initialize the I2C peripheral w/ selected parameters */
I2C_Init(I2C1, &I2C_InitStruct);
}
функции использую стандартные библиотечные
the_spirit
Цитата(the_spirit @ Apr 12 2012, 20:32) *
пошаговый дебагер keil показал что не пишутся регистры CR1,CR2, SR1,SR2
функция инициализации
void I2C1_Config(void)
{
I2C_InitTypeDef I2C_InitStruct;

/* I2C1 clock enable */
RCC->AHB1ENR |=((uint32_t)0x00200000);
/* GPIOB clock enable */
RCC->AHB1ENR |=((uint32_t)0x00000002);

/* Connect I2C1 pins to AF4 ************************************************/
GPIOB->AFR[1] |= 5;//GPIOB8 -> SCL(AF5)
GPIOB->AFR[1] |= 5<<4;//GPIOB9 -> SDA(AF5)
/* Configure I2C1 GPIOs *****************************************************/
GPIOB->MODER &= 0xFFF0FFFF;
GPIOB->MODER |= 0x000A0000;//GPIOB8,9 ->AF
GPIOB->OTYPER |=0x30000;//Open drain


//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
//GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
//GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//GPIO_Init1(GPIOB, &GPIO_InitStructure);

/* Configure I2C1 ***********************************************************/
/* I2C DeInit */
RCC->APB1RSTR=((uint32_t)0x00200000);
/* Release I2C1 from reset state */
RCC->APB1RSTR &= ~((uint32_t)0x00200000);


/* Enable the I2C peripheral */
I2C1->CR1 |= 0x01;

/* Set the I2C structure parameters */
I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStruct.I2C_OwnAddress1 = 0xFE;
I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;
I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStruct.I2C_ClockSpeed = 30000;

/* Initialize the I2C peripheral w/ selected parameters */
I2C_Init(I2C1, &I2C_InitStruct);
}
функции использую стандартные библиотечные

Все пофиксил, косяки с дефайнами были.
в конечном итоге инициализация так выглядит:
void I2C1_Config(void)
{
I2C_InitTypeDef I2C_InitStruct;
/* I2C1 clock enable */
/* GPIOB clock enable */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
GPIOB->AFR[1] |= 4;//GPIOB8 -> SCL(AF5)
GPIOB->AFR[1] |= 4<<4;//GPIOB9 -> SDA(AF5)
GPIOB->MODER &= 0xFFF0FFFF;
GPIOB->MODER |= 0x000A0000;//GPIOB8,9 ->AF
/* Speed mode configuration */
GPIOB->OSPEEDR &= 0xFFF0FFFF;
GPIOB->OSPEEDR |= 0x00000000;
/* Output mode configuration*/
GPIOB->OTYPER |= 0x180;
/* Pull-up Pull down resistor configuration*/
GPIOB->PUPDR &=0xFFF0FFFF;
GPIOB->PUPDR |=0x00050000;
RCC->APB1ENR|=((uint32_t)0x00200000);
/* I2C1 clock enable */




/* Configure I2C1 ***********************************************************/


/* Enable the I2C peripheral */


/* Set the I2C structure parameters */

I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStruct.I2C_OwnAddress1 = 0xFE;
I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;
I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStruct.I2C_ClockSpeed = 30000;

/* Initialize the I2C peripheral w/ selected parameters */
I2C_Init(I2C1, &I2C_InitStruct);
I2C_Cmd(I2C1, ENABLE);
}
the_spirit
Цитата(the_spirit @ Apr 12 2012, 20:32) *
пошаговый дебагер keil показал что не пишутся регистры CR1,CR2, SR1,SR2
функция инициализации
void I2C1_Config(void)
{
I2C_InitTypeDef I2C_InitStruct;

/* I2C1 clock enable */
RCC->AHB1ENR |=((uint32_t)0x00200000);
/* GPIOB clock enable */
RCC->AHB1ENR |=((uint32_t)0x00000002);

/* Connect I2C1 pins to AF4 ************************************************/
GPIOB->AFR[1] |= 5;//GPIOB8 -> SCL(AF5)
GPIOB->AFR[1] |= 5<<4;//GPIOB9 -> SDA(AF5)
/* Configure I2C1 GPIOs *****************************************************/
GPIOB->MODER &= 0xFFF0FFFF;
GPIOB->MODER |= 0x000A0000;//GPIOB8,9 ->AF
GPIOB->OTYPER |=0x30000;//Open drain


//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
//GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
//GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//GPIO_Init1(GPIOB, &GPIO_InitStructure);

/* Configure I2C1 ***********************************************************/
/* I2C DeInit */
RCC->APB1RSTR=((uint32_t)0x00200000);
/* Release I2C1 from reset state */
RCC->APB1RSTR &= ~((uint32_t)0x00200000);


/* Enable the I2C peripheral */
I2C1->CR1 |= 0x01;

/* Set the I2C structure parameters */
I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStruct.I2C_OwnAddress1 = 0xFE;
I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;
I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStruct.I2C_ClockSpeed = 30000;

/* Initialize the I2C peripheral w/ selected parameters */
I2C_Init(I2C1, &I2C_InitStruct);
}
функции использую стандартные библиотечные

Все пофиксил, косяки с дефайнами были.
в конечном итоге инициализация так выглядит:
void I2C1_Config(void)
{
I2C_InitTypeDef I2C_InitStruct;
/* I2C1 clock enable */
/* GPIOB clock enable */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
GPIOB->AFR[1] |= 4;//GPIOB8 -> SCL(AF5)
GPIOB->AFR[1] |= 4<<4;//GPIOB9 -> SDA(AF5)
GPIOB->MODER &= 0xFFF0FFFF;
GPIOB->MODER |= 0x000A0000;//GPIOB8,9 ->AF
/* Speed mode configuration */
GPIOB->OSPEEDR &= 0xFFF0FFFF;
GPIOB->OSPEEDR |= 0x00000000;
/* Output mode configuration*/
GPIOB->OTYPER |= 0x180;
/* Pull-up Pull down resistor configuration*/
GPIOB->PUPDR &=0xFFF0FFFF;
GPIOB->PUPDR |=0x00050000;
RCC->APB1ENR|=((uint32_t)0x00200000);
/* I2C1 clock enable */




/* Configure I2C1 ***********************************************************/


/* Enable the I2C peripheral */


/* Set the I2C structure parameters */

I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStruct.I2C_OwnAddress1 = 0xFE;
I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;
I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStruct.I2C_ClockSpeed = 30000;

/* Initialize the I2C peripheral w/ selected parameters */
I2C_Init(I2C1, &I2C_InitStruct);
I2C_Cmd(I2C1, ENABLE);
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.