Jump to content

Денис216

Members
  • Content Count

    1
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Денис216

  • Rank
    Новенький

Электроника

  • Стаж в электронике
    3-5 лет
  1. Не могу опросить магнитометр по I2C. На линиях какие-то сигналы проскакивают, но никакого результата не могу достичь. Кто-то что-то знает по этому поводу? Как заставить работать его. #include "stm32f30x.h" int a1=0, j=0; int main(void) { RCC->AHBENR|=RCC_AHBENR_GPIOBEN;// тактирование портa B включено RCC->AHBENR|=RCC_AHBENR_GPIOEEN;//21 тактирование портa Е включено RCC->APB1ENR|=RCC_APB1ENR_I2C1EN;// тактирование I2C1 включено GPIOB->MODER|=0x0000A000; // альтернативная функция линий PB7,PB6 GPIOB->OTYPER|=(1<<6); //настройка линии PB7 на выход открытый сток GPIOB->OTYPER|=(1<<7); //настройка линии PB6 на выход открытый сток GPIOB->OSPEEDR=0xFFFFFFFF; GPIOB->AFR[0] |= 0x44000000; //настройка линий PB7,PB6 на функцию AF4 GPIOE->MODER=0x55555555; //настройка порта Е на выход EXTI->EMR=1<<23; EXTI->IMR=1<<23; NVIC_EnableIRQ(I2C1_EV_IRQn); //инициализация I2C мастер I2C1->CR1=(0<<0); //PE=0 I2C1->TIMINGR=(0x4<<28);//PRESC[3:0]: Timing prescaler I2C1->TIMINGR=(0x8<<20);//SCLDEL[3:0]: Data setup time I2C1->TIMINGR=(0x8<<16);//SDADEL[3:0]: Data hold time I2C1->TIMINGR=(0xC3<<8);//SCLH[7:0]: SCL high period (master mode) I2C1->TIMINGR=(0xC7<<0);//SCLL[7:0]: SCL low period (master mode) I2C1->CR1=(0<<17);//для мастера = 0 NOSTRETCH: Clock stretching disable I2C1->CR1=(1<<6);//TCIE: Transfer Complete interrupt enable I2C1->CR1=(1<<2);//RXIE: RX Interrupt enable(RXNE) I2C1->CR1=(1<<1);//TXIE: TX Interrupt enable(TXIS) I2C1->CR2=(0<<11);//ADD10=0 -7 bits I2C1->CR2=(0<<10);//RD_WRN=0 передача I2C1->CR2=(1<<25);//AUTOEND I2C1->CR1|=(1<<0); //PE=1 I2C1->CR2 = 0x03<<1;//adress I2C1->CR2|=1<<13;//start ?????? a1=I2C1->RXDR; while (1){ // I2C1->CR2|=1<<13;//start if((a1&0x1)>0) GPIOE->ODR =1<<9; else GPIOE->ODR =(0<<9); if((a1 & 0x2)>0) GPIOE->ODR |=1<<10; else GPIOE->ODR &= ~(1<<10); if((a1 & 0x4)>0) GPIOE->ODR |=1<<11; else GPIOE->ODR &= ~(1<<11); if((a1 & 0x8)>0) GPIOE->ODR |=1<<12; else GPIOE->ODR &= ~(1<<12); if((a1 & 0x10)>0) GPIOE->ODR |=1<<13; else GPIOE->ODR &= ~(1<<13); if((a1 & 0x20)>0) GPIOE->ODR |=1<<14; else GPIOE->ODR &= ~(1<<14); if((a1 & 0x40)>0) GPIOE->ODR |=1<<15; else GPIOE->ODR &= ~(1<<15); if((a1 & 0x80)>0) GPIOE->ODR |=1<<8; else GPIOE->ODR &= ~(1<<8); }} void I2C1_EV_EXTI23_IRQHandler () {a1=2;}
×
×
  • Create New...