Категории:

  • Программирование


  • Изобразительное искусство


  • Программирование встраиваемых систем


  • Компьютерная графика


  • WEB Разработка


  • Музыка


  • Инженерия


  • iVARIOUS


  • Mobil App


  • STM32. Работа с акселерометром

    Акселерометр LIS3DSH установленный на плате Discovery STM32F407VG прекрасно подходит для изучения интерфейсов SPI. Для лучшего изучения устройств и разных датчиков, необходимо будет купить переходник RS232->USB, чтоб в режиме реального времени смотреть график значений с осей акселерометра, и установить терминал имитирующий COM порт на компьютере.
    LIS3DSH Программа SPI передача проходит следующим образом:
    Инициализация.
    1)Ножка PE3 прижимается к нулю, что символизирует начало сеанса.
    2)В SPI1_DR отправляем значение 0x20, это адрес регистра в акселерометре CTRL_REG4.
    3)Ждем в цикле while пока не установится бит RXNE регистра SPI_SR в микроконтроллере, что будет символизировать о получении в ответ данных от акселерометра.
    4)Читаем данные которые пришли в этот же регистр SPI1_DR, они нам не нужны, но прочитать нужно (SPIData=SPI1_DR;).
    5)Тут же отправляем в регистр SPI1_DR настройки - значение для ранее подготовленного регистра CTRL_REG4 (установки осей, включения скорости считывания, что является одновременно и стартом работы акселерометра, значение = 0х97).
    6)Ждем пока не придут ответные данные (они нам не нужны, но прочитать их нужно).
    7)PE3 Ножку прижимаем к единице, что символизирует конец сеанса.

    Чтение осей.
    1)Ножка PE3 прижимается к нулю, что символизирует начало сеанса.
    2)В SPI1_DR отправляем значение 0xA9 (адрес регистра OUT_X_H в акселерометре с выставленным старшим битом "чтение").
    3)Ждем в цикле while пока не установится бит RXNE регистра SPI_SR в микроконтроллере, что будет символизировать о получении в ответ данных от акселерометра.
    4)Читаем данные которые пришли в этот же регистр SPI1_DR, они нам не нужны, это всего-лишь данные в ответ на отправку адреса (mems_data = SPI1_DR;).
    5)Тут же отправляем в регистр SPI1_DR пустое значение - чтоб запустить процесс отправки уже полезных данных с осей акселерометра нам, SPI1_DR=0x00;.6)Ждем пока не придут ответные данные, это уже данные значения осей акселерометра.
    7)PE3 Ножку прижимаем к единице, что символизирует конец сеанса.
    stm32 mems

    Адреса регистров SPI
    Адреса регистров USART
    Адреса регистров GPIO


    void SystemInit(void)
    {
    }

    void USART2_ini(void)
    {
    RCC_GPIO|=0x1;//A
    GPIOA_MODER|=0xA0;
    GPIOA_AFRL|=0x7700;
    RCC_UART2|=0x20000;
    USART2_BRR=0x683;
    USART2_CR3|=0x80;
    USART2_CR1|=0xC;
    USART_Mode_Rx;
    USART2_CR1|=0x2000;
    }

    void SPI_ini(void)
    {
    RCC_GPIO=0x19;
    GPIOA_MODER|=0xA800;
    GPIOA_OSPEEDR=0xA800;
    GPIOA_AFRL=0x55500000;

    GPIOE_MODER|=0x40;
    GPIOE_OSPEEDR=0x80;
    GPIOE_PUPDR=0x40;
    GPIOE_BSRR=0x8;

    RCC_SPI1=0x1000;
    SPI1_CR1 |= 0x0002 |0x0001;
    SPI1_CR1 |=0x0300|0x0028;
    SPI1_CR1 |=0x04 ;
    SPI1_CRCPR=7;
    //SPI1_CR2|=0x3;
    SPI1_CR1|=0x0040;
    }

    void MEMS_ini(void)
    {
    uint8_t SPIData;
    GPIOE_BSRR=0x80000;
    SPI1_DR=0x20;
    while (!(SPI1_SR&0x1)==0x1);
    SPIData=SPI1_DR;
    SPI1_DR=0x97;
    while (!(SPI1_SR&0x1)==0x01);
    SPIData =SPI1_DR;
    GPIOE_BSRR=0x8;
    }
    short int mems_data(read_reg)
    {
    uint8_t mems_data;
    GPIOE_BSRR=0x80000;
    SPI1_DR=read_reg;
    while (!(SPI1_SR&0x1)==0x1);
    mems_data = SPI1_DR;
    SPI1_DR=0x00;
    while (!(SPI1_SR&0x1)==0x01);
    mems_data=SPI1_DR;
    GPIOE_BSRR=0x8;
    return -(mems_data+128);
    }

    void USART2_tx(data)
    {
    USART2_DR=data;
    while(!(USART2_SR&0x40)){};
    }


    int main(void)
    { uint8_t x=0xA9;// Адрес регистра нужной оси
    USART2_ini();
    SPI_ini();
    MEMS_ini();
    while(1)
    {
    USART2_tx(mems_data(x));
    }}



    Читайте больше в категории: Программирование встраиваемых систем

    2016-04-07 15:53:12



    Другие статьи:

    PHP. $_COOKIE

    Основы рисунка

    Maya. Операции Booleans

    STM32. Передача данных по USART

    WinAPI. График Функций.

    Maya. bend, sine, squash, twist, wave, flare.

    HTML. Создаем меню

    Психология: как рождается музыка.

    Java. Графики функций - продолжение

    Рисунок. Деревья