
Никто не в курсе, что это за чудо природы?
Код: Выделить всё
void TIM4_IRQHandler(void) {
TIM4->SR = ~TIM_SR_UIF;
GPIOA->ODR ^= 1;
}Код: Выделить всё
void TIM4_IRQHandler(void) {
GPIOA->ODR ^= 1;
TIM4->SR = ~TIM_SR_UIF;
}
Код: Выделить всё
void TIM4_IRQHandler(void) {
GPIOA->ODR ^= 1;
TIM4->SR = ~TIM_SR_UIF;
TIM4->SR;
}Дебилы вы сраные -- мысленно обращаюсь я к составителям документации -- из-за вас только время лишнее потерял. Не в адресе должен быть "LSB reset", а следующий бит после адреса. При этом, перед записью в I2C_DR, 7 бит адреса должны быть выравняны влево, а оставшийся младший бит уже определять тип операции запись/чтение. Но про это в RM0008 ни пол слова.The master can decide to enter Transmitter or Receiver mode depending on the LSB of the
slave address sent.
In 7-bit addressing mode,
- To enter Transmitter mode, a master sends the slave address with LSB reset.
- To enter Receiver mode, a master sends the slave address with LSB set
Дебилы вы сраные -- мысленно обращаюсь я к составителям документации -- из-за вас только время лишнее потерял. Не в адресе должен быть "LSB reset", а следующий бит после адреса. При этом, перед записью в I2C_DR, 7 бит адреса должны быть выравняны влево, а оставшийся младший бит уже определять тип операции запись/чтение. Но про это в RM0008 ни пол слова.[/uquote]The master can decide to enter Transmitter or Receiver mode depending on the LSB of the
slave address sent.
In 7-bit addressing mode,
- To enter Transmitter mode, a master sends the slave address with LSB reset.
- To enter Receiver mode, a master sends the slave address with LSB set
Код: Выделить всё
#define EE_HW_ADR 0 //Адрес заданный ножками A0,A1,A2 на микросхеме 24C512
#define EE_I2C_PORT I2C1 //I2C-порт процессора
EE_24C eeprom(EE_I2C_PORT,EE_HW_ADR); //Создаём объект EEPROM
//Конструктор
EE_24C::EE_24C(I2C_TypeDef *pi2c, uint8_t hw_adr)
{
pI2C=pi2c;
w_adr=0xA0+((hw_adr&0x7)<<1);
r_adr=0xA1+((hw_adr&0x7)<<1);
};
//Чтение байта по адресу
bool EE_24C::ReadByte(uint16_t adr, uint8_t *data)
{
while((pI2C->SR2 & I2C_SR2_BUSY));
pI2C->CR1 = I2C_CR1_PE | I2C_CR1_START;
while(!(pI2C->SR1 & I2C_SR1_SB));
pI2C->DR = w_adr; // w_adr = 0xA0
while(!(pI2C->SR1 & I2C_SR1_ADDR))
{
if(pI2C->SR1 & I2C_SR1_AF)
{
pI2C->CR1 = I2C_CR1_PE | I2C_CR1_STOP;
return false;
}
};
pI2C->SR2;
while(!(pI2C->SR1 & I2C_SR1_TXE));
pI2C->DR = adr>>8;
while(!(pI2C->SR1 & I2C_SR1_TXE));
pI2C->DR = adr;
while(!((pI2C->SR1 & I2C_SR1_TXE) && (pI2C->SR1 & I2C_SR1_BTF)));
pI2C->CR1 = I2C_CR1_PE | I2C_CR1_START | I2C_CR1_ACK; //START
while(!(pI2C->SR1 & I2C_SR1_SB));
pI2C->DR = r_adr; // r_adr = 0xA1
while(!(pI2C->SR1 & I2C_SR1_ADDR));
pI2C->SR2;
pI2C->CR1 = I2C_CR1_PE | I2C_CR1_STOP;
while(!(pI2C->SR1 & I2C_SR1_RXNE));
*data = pI2C->DR;
return true;
};

Это вы только что из носа выковыряли или мож вам пойти самому вику почитать, которой вы надысь козыряли? Это ничего, что семибитная адресация в I2C ? "Младший бит", в вашей системе координат, восьмым тогда получается. Семибитная адресация восемью битами, да? Это популярное изложение от и для умственно-отсталых?Младший бит адреса отвечает за направление передачи.
Вы за себя ответить не можете, но замахиваетесь, как обычно, на ответ за всех. Поздравляю!У всех работает, только ты один д'Артаньян
Для вас это означает худшее -- у вас все плохо не с английским или зрением, а со зрением и английским одновременно. На этой картинке семь бит в адресе и два вне его. Хоть усрись, а менять LSB в адресе ни к чему хорошему не приведет. Стыдобища!Неужели никогда вот такую картинку не видел?