Например TDA7294

Форум РадиоКот • Просмотр темы - Помогите совсем начинающему разобраться с SPI
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 17, 2024 00:00:52

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


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



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Помогите совсем начинающему разобраться с SPI
СообщениеДобавлено: Пт мар 10, 2017 13:26:45 
Родился

Зарегистрирован: Пт мар 10, 2017 13:19:28
Сообщений: 3
Рейтинг сообщения: 0
Привет всем.
Раньше как тоигрался с ардуино, а теперь вот решил немного освоить STM32.
Чип у меня STM32F103C8T6. Работать пытаюсь в COOCOX. Знаю что не лучшая система, но Кейл не осилил пока.

Проблема такая:

Создал новый проект. добавил SPI. Автоматом добавились GPIO, RCC и CMSIS.
Почитав много всего в сети, написал такую прогу.
Код:
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_spi.h"



int main(void)
{
   //************************************************************************************
         RCC_DeInit();
         RCC_HSEConfig(RCC_HSE_ON);
         RCC_HCLKConfig(RCC_SYSCLK_Div1);
          RCC_PCLK2Config(RCC_HCLK_Div1);
          RCC_PCLK1Config(RCC_HCLK_Div2);
          RCC_ADCCLKConfig(RCC_PCLK2_Div4);
          RCC_PLLConfig(0x00010000, RCC_PLLMul_9);
          RCC_PLLCmd(ENABLE);
          while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
          {
          }
          RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
          while(RCC_GetSYSCLKSource() != 0x08)
          {
          }
   //************************************************************************************
         SPI_InitTypeDef  SPI_InitStructure;
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

         GPIO_InitTypeDef GPIO_InitStructure;
         GPIO_InitStructure.GPIO_Pin   = (GPIO_Pin_13 | GPIO_Pin_15);
         GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
         GPIO_Init(GPIOB, &GPIO_InitStructure);

         SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
         SPI_Init(SPI2, &SPI_InitStructure);

         SPI_CalculateCRC(SPI2, DISABLE);

         SPI_Cmd(SPI2, ENABLE);
   //************************************************************************************

    while(1)
    {
       while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) { ; }
       SPI_I2S_SendData(SPI2, 0x00);
    }
}


По сути циклически отправляет в SPI код "0".
Теоретически ожидалось что байты будут передаваться подряд без промежутков. Ну или с минимальным промежутком в 1 бит. Но на деле получилось что между байтами промежуток еще в пару байт. Соответственно в несколько раз падает скорость SPI.
Вложение:
IMG_20170310_101111.jpg [34.81 KiB]
Скачиваний: 458

Подозреваю что где то не правильно настроил модуль SPI, но не могу понять где.
Буду рад подсказкам.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите совсем начинающему разобраться с SPI
СообщениеДобавлено: Пт мар 10, 2017 20:31:07 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Возможно тупят функции. Может вот так попробовать?
Код:
while (!(SPI2->SR&SPI_SR_TXE));
SPI2->DR=0x00;


Может чего напутал конечно.
---
В кокосе вроде по умолчанию оптимизация выключена.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите совсем начинающему разобраться с SPI
СообщениеДобавлено: Сб мар 11, 2017 11:00:10 
Родился

Зарегистрирован: Пт мар 10, 2017 13:19:28
Сообщений: 3
Рейтинг сообщения: 0
Z_h_e писал(а):
Возможно тупят функции. Может вот так попробовать?
Код:
while (!(SPI2->SR&SPI_SR_TXE));
SPI2->DR=0x00;


Может чего напутал конечно.
---
В кокосе вроде по умолчанию оптимизация выключена.


Да действительно функции подтормаживают. Сделал как Вы предложили, стало значительно быстрее. Но все же есть еще не большой промежуток между байтами. Думаю быстрее полингом уже не получится. Дальше только DMA.


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Помогите совсем начинающему разобраться с SPI
СообщениеДобавлено: Сб мар 11, 2017 21:05:25 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
ksgroup писал(а):
Дальше только DMA.
У Вас SPI работает на максимальной частоте, да? Поглядите ДШ, если в SPI нет буферного регистра данных, то все равно промежуток будет.

Если хотите чтобы было красиво на осциллограмме, просто понизьте частоту SPI. Можно еще код из ОЗУ выполнять, будет быстрее работать.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Помогите совсем начинающему разобраться с SPI
СообщениеДобавлено: Вс мар 12, 2017 10:21:44 
Родился

Зарегистрирован: Пт мар 10, 2017 13:19:28
Сообщений: 3
Рейтинг сообщения: 0
Z_h_e писал(а):
если в SPI нет буферного регистра данных, то все равно промежуток будет.

Буферный регистр как раз есть и данные следующего байта в него можно писать после передачи SPI первого бита данных, так что тут все в порядке. Просто ядро не успевает это сделать вовремя из за тормозных функций Си. Нужно наверное на ассемблере попробовать.
Z_h_e писал(а):
просто понизьте частоту SPI.

И? Смысл? Естественно на меньшей скорости все будет ОК, но, если вы конечно читали весь топик, нужно то на максимуме!


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

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

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

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


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

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


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

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


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