Например TDA7294

Форум РадиоКот • Просмотр темы - [Решено]stm32 spi
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 11:09:25

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: [Решено]stm32 spi
СообщениеДобавлено: Пн окт 16, 2017 16:40:09 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Чт дек 29, 2011 16:25:56
Сообщений: 83
Рейтинг сообщения: 0
Добрый день, форумчане.
Решил поиграться с дисплеем nokia 5510 и настроил передачу данных через dma, но возникла проблема с тем, что ножку CE отпускаю в прерывании дожидаясь флага BSY, но все равно рано, т.е. последний байт не успевает дойти до дисплея и пришлось вносить задержку. Послед задержки все работает. А как это правильно сделать? Чтобы без задержек?
На скрине с анализатора видно, что линия CE и DC подымаются раньше...
Спасибо.

Код:
void PCD8544_Init()
{
    RCC->AHBENR  |= RCC_AHBENR_DMA1EN;
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_SPI1EN | RCC_APB2ENR_AFIOEN;

    PCD8544_GPIO->CRL = (PCD8544_GPIO->CRL & ~(GPIO_CRL_CNF4 | GPIO_CRL_MODE4 | GPIO_CRL_CNF5 | GPIO_CRL_MODE5 |
                                       GPIO_CRL_CNF6 | GPIO_CRL_MODE6 | GPIO_CRL_CNF7 | GPIO_CRL_MODE7)) |
                                      (GPIO_CRL_MODE4 | GPIO_CRL_MODE6 | GPIO_CRL_CNF5_1 | GPIO_CRL_CNF7_1 |
                                       GPIO_CRL_MODE5 | GPIO_CRL_MODE7);

    PCD8544_GPIO->CRH = (PCD8544_GPIO->CRH & ~(GPIO_CRH_CNF9 | GPIO_CRH_MODE9 | GPIO_CRH_CNF10 | GPIO_CRH_MODE10)) |
                        (GPIO_CRH_MODE9 | GPIO_CRH_MODE10);

    pin_set(PCD8544_DC | PCD8544_RST | PCD8544_CE);
    pin_reset(PCD8544_LIGHT);

    SPI1->CR1 |= SPI_CR1_BR_2 | SPI_CR1_CPHA | SPI_CR1_CPOL;
    SPI1->CR1 |= SPI_CR1_SSI | SPI_CR1_SSM; // software NSS
    SPI1->CR1 |= SPI_CR1_MSTR | SPI_CR1_SPE;
    SPI1->CR2 |= SPI_CR2_TXDMAEN;

    DMA1_Channel3->CPAR  = (uint32_t)&SPI1->DR;
    DMA1_Channel3->CCR  |= DMA_CCR1_PL_1 | DMA_CCR1_MINC | DMA_CCR1_CIRC | DMA_CCR1_DIR |DMA_CCR1_TCIE;

    NVIC_EnableIRQ(DMA1_Channel3_IRQn);
}


Код:
extern "C" void DMA1_Channel3_IRQHandler(void)
{
    if((DMA1->ISR & DMA_ISR_TCIF3) == DMA_ISR_TCIF3)
    {
        DMA1_Channel3->CCR &= ~DMA_CCR1_EN;
        DMA1->IFCR |= DMA_IFCR_CTCIF3;

        while((SPI1->SR & SPI_SR_BSY) != SPI_SR_BSY);

        pin_set(PCD8544_CE | PCD8544_DC);
    }
}


Вложение:
spi.png [25.41 KiB]
Скачиваний: 701


Последний раз редактировалось gruffi Пн окт 16, 2017 19:14:37, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 spi
СообщениеДобавлено: Пн окт 16, 2017 17:06:39 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 253
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2090
Рейтинг сообщения: 1
но возникла проблема с тем, что ножку CE отпускаю в прерывании дожидаясь флага BSY

Разве дожидаться нужно не сброса BSY?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 spi
СообщениеДобавлено: Пн окт 16, 2017 17:07:20 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 1
что ножку CE отпускаю в прерывании дожидаясь флага BSY

Цитата:
When BSY is set, it indicates that a data transfer is in progress on the SPI

дождаться сброса флага, а не его взведения?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: stm32 spi
СообщениеДобавлено: Пн окт 16, 2017 17:26:36 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Чт дек 29, 2011 16:25:56
Сообщений: 83
Рейтинг сообщения: 0
Спасибо, не дочитал. Сейчас все нормально отпускает вовремя. После очистки экрана он заливается черным цветом. Буду проверять настройки.

Код:
//----------
void PCD8544_Init()
{
    for(uint16_t i = 0; i < BUFFER_SIZE; i++)
    {
        PCD8544_Buffer[i] = 0x00;
    }

    uint8_t buffer[6] =
    {
        0x21,
        0xC8,
        0x06,
        0x13,
        0x20,
        0x0C
    };

    PCD8544_SendData(buffer, sizeof(buffer), TYPE_CMD);
}
//----------
void LCD_Clear()
{
    LCD_Goto(0, 0);

    uint8_t buffer[BUFFER_SIZE];

    for(uint16_t i = 0; i < BUFFER_SIZE; i++)
    {
        buffer[i] = 0x00;
    }

    PCD8544_SendData(buffer, BUFFER_SIZE, TYPE_DATA);

    LCD_Goto(0, 0);
}
//----------
void LCD_Goto(uint8_t y, uint8_t x)
{
    y |= 0x40;
    x |= 0x80;

    uint8_t buffer[2] =
    {
        x, y
    };

    PCD8544_SendData(buffer, 2, TYPE_CMD);
}
//----------
void PCD8544_SendData(const uint8_t* buffer, const uint16_t size, const type_t cmd)
{
    pin_reset(PCD8544_CE);

    if(cmd == TYPE_CMD)
    {
        pin_reset(PCD8544_DC);
    }
    else
    {
        pin_set(PCD8544_DC);
    }

    DMA1_Channel3->CMAR   = (uint32_t)buffer;
    DMA1_Channel3->CNDTR  = size;
    DMA1_Channel3->CCR   |= DMA_CCR1_EN;
}


Добавлено after 9 minutes:
Снова ошибся и был включен режим инверсии :). Спасибо.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: [РЕШЕНО]stm32 spi
СообщениеДобавлено: Пт фев 09, 2018 13:21:25 
Родился

Зарегистрирован: Сб май 07, 2016 16:19:58
Сообщений: 13
Рейтинг сообщения: 0
Кто может подсказать про настройку и отправку данных по SPI на stm32f103. Хочу постепенно перейти от HAL на CMSIS. Через куб настроил SPI1, подключил к нему si4463, настроил и считываю с него информацию. Меняю функцию отправки на CMSIS
Код:
#define SPI1_DR_8bit          (*(__IO uint8_t *)((uint32_t)&(SPI1->DR)))

uint8_t si4463_spiByte(uint8_t writeData)
{
//  uint8_t readData;
//   HAL_SPI_TransmitReceive(&hspi1, &writeData, &readData, 1, 100); //readData=SPI.transfer(writeData);
//   return readData;
   
   uint8_t readData;
   while((SPI1->SR & SPI_SR_TXE) == RESET){}
      SPI1_DR_8bit = writeData;
      
    while (!(SPI1->SR & SPI_SR_RXNE)){
       // wait till data is available in the DR register
    }      
        readData = SPI1_DR_8bit;
      
   return readData;
}

И данная функция не работает.. Но если в кубе настроить SPI2, то данная функция отлично работает! Почему так? Читал что SPI1 и I2C1 вместе не работает там даже в ERRATE, по моему так называется документ, об этом написано. Но у мня кроме SPI ничего не включено. Вся настройка от куба, только отправка на CMSIS. Подскажите, что может быть?


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y