Например TDA7294

Форум РадиоКот • Просмотр темы - STM32 SPI
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Ср мар 03, 2021 08:55:04

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


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



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32 SPI
СообщениеДобавлено: Вс дек 06, 2020 12:53:21 
Родился

Зарегистрирован: Пн июл 31, 2017 10:53:04
Сообщений: 5
Рейтинг сообщения: 0
Приветствую. При пересылке нескольких байт данных по SPI логический анализатор выдает следующую картинку (прикрепил).
не могу понять почему spi не работает (на анализаторе какая-то фигня). Также имеется вопрос. Настроил ногу PA4 (CS пин) с подтяжкой к +, а подтяжки почему-то нет.
Код проекта:
Код:
#include "stm32f4xx_hal.h"

void init_SPI(void);
void init_port(void);
void send_frame(int frame);

#define CS_LOW  do { GPIOA->BSRR |= GPIO_BSRR_BR4; } while (0)
#define CS_HIGH do { GPIOA->BSRR |= GPIO_BSRR_BS4; } while (0)

void mymain(void) {
   init_port();
   init_SPI();
   while (1) {
      send_frame(0x02);
      send_frame(0x0F);
      send_frame(0x54);
      send_frame(0x8D);
      send_frame(0x56);
      send_frame(0x3E);
      send_frame(0x5A);
      send_frame(0x1E);
      send_frame(0x58);
      send_frame(0x0);
      send_frame(0x4C);
      send_frame(0x70);
      send_frame(0x2A);
      send_frame(0x40);
      send_frame(0x22);
      send_frame(0x3D);

   }
}

void init_port(void) {
   //PA4 - CS ; PA5 -  SCK ; PA6 - MISO ; PA7 - MOSI
   RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // вкл тактирование порта А

   GPIOA->MODER |= GPIO_MODER_MODER4_0; // PA4 - не имеет альтернативной функции
   GPIOA->MODER |= GPIO_MODER_MODER5_1 | GPIO_MODER_MODER6_1 | GPIO_MODER_MODER7_1; // 5_1 - альтерн функция
   GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR4_0| GPIO_OSPEEDER_OSPEEDR5_0
         | GPIO_OSPEEDER_OSPEEDR6_0 | GPIO_OSPEEDER_OSPEEDR7_0; //  high_speed
   GPIOA->PUPDR |=  GPIO_PUPDR_PUPD5_1| GPIO_PUPDR_PUPD6_1 | GPIO_PUPDR_PUPD7_1; // pull-down
   GPIOA->PUPDR |=  GPIO_PUPDR_PUPD4_0; // pull-up
   //назначаем выводам необходимые альтернативные ф-ции
   GPIOA->AFR[0] |= (0x05<<5*4);
   GPIOA->AFR[0] |= (0x05<<6*4);
   GPIOA->AFR[0] |= (0x05<<7*4);
}

void init_SPI(void) {
   RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; // вкл тактирование SPI
/*
 * двухпроводный режим (BIDIMODE  = 0)
 * CRC отсутствуует (CRCEN = 0)
 * данные - 8 бит (DFF = 0)
 * MSB - первый бит
 */
   SPI1->CR1 |= SPI_CR1_BR;                //Baud rate = Fpclk/256
   SPI1->CR1 |= SPI_CR1_MSTR;              //Mode Master
   SPI1->CR1 &= ~SPI_CR1_CPOL;             //Polarity signal CPOL = 0;
   SPI1->CR1 &= ~SPI_CR1_CPHA;             //Phase signal    CPHA = 0;
   SPI1->CR1 |= SPI_CR1_SSM | SPI_CR1_SSI; // включаем так как режим мастер. Nss актуальна только для слейва
   SPI1->CR1 |= SPI_CR1_SPE;                //Enable SPI1
}

void send_frame(int frame) {
   CS_LOW; //активируем Chip Select
   while(!(SPI1->SR & SPI_SR_TXE));
      SPI1->DR = frame; //отправляем данные
   CS_HIGH;
}


Вложения:
Screenshot_3.png [36.95 KiB]
Скачиваний: 76
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 SPI
СообщениеДобавлено: Вс дек 06, 2020 13:08:32 
Это не хвост, это антенна

Карма: 20
Рейтинг сообщений: 218
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 1331
Рейтинг сообщения: 1
Ты проверил TXE, записал байт и сразу CS подымаешь, а в это время может только первый бит передается. Нужно ждать окончания передачи, на разных версиях SPI это делается по-разному...


Вернуться наверх
 
Друзья! Скоро Новый Год! Китайский! Но мы работаем и в праздники тоже!

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: STM32 SPI
СообщениеДобавлено: Вт дек 08, 2020 17:28:22 
Мучитель микросхем
Аватар пользователя

Карма: 6
Рейтинг сообщений: 87
Зарегистрирован: Вс янв 09, 2011 23:05:37
Сообщений: 449
Откуда: СССР
Рейтинг сообщения: 1
В простейшем случае подождать пока установится флаг BUSY, затем подымать CS.

_________________
Иван Сусанин - первый полупроводник :solder:


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

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


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

Сейчас этот форум просматривают: bob1 и гости: 7


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

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


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