Перейти к содержанию

опросить магнетометр на stm32f3descovery


Рекомендуемые сообщения

Не могу опросить магнитометр по 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;}

 

Ссылка на комментарий
Поделиться на другие сайты

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

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...