Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: посоветуйте STM32 cortex M3
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2
Метценгерштейн
А то на моей отладке, где проц STM32L152RBT6 SPI этот больше 2 МГц не держит, хотя обещано 16. Кто реально пользовался SPI и может порекомендовать модель проца, чтобы не глючило?
HHIMERA
Что значит не держит??? Нонсенс!!!
Настройте как положено пины...
jcxz
Цитата(Метценгерштейн @ Feb 15 2013, 03:32) *
А то на моей отладке, где проц STM32L152RBT6 SPI этот больше 2 МГц не держит, хотя обещано 16. Кто реально пользовался SPI и может порекомендовать модель проца, чтобы не глючило?
LPC17xx, LPC177x - CPU up to 100/120Mhz, SSP - сам пользую на 25/30МГц (не глючит (почти wink.gif).
Метценгерштейн
вот вам и нонсенс

да только STM32 освоил, лень на др. перелазить. Программатор где-то брать надо будет.
demiurg_spb
Цитата(Метценгерштейн @ Feb 15 2013, 09:10) *
Программатор где-то брать надо будет.
Изначально стоило брать универсальный, например j-link.
А если у вас st-link на stm32, так его можно перешить версалуном....
Метценгерштейн
буду иметь ввиду- не знал.

а по STM32- кто с SPI работал успешно?
dac
QUOTE (Метценгерштейн @ Feb 15 2013, 12:19) *
буду иметь ввиду- не знал.

а по STM32- кто с SPI работал успешно?

а в чем проблема то? у меня работал stm32f105, 107, 205. частоты на память не помню, но не 2Мгц точно. точнее на 10х не мерил, неинтересно было, на 205 30Мгц при 120 тактовой - соответсвенно даташиту

приведите свой код инициализациии, включая инициализацию RCC, чтоб не гадать
dimka76
Цитата(Метценгерштейн @ Feb 15 2013, 09:10) *
Программатор где-то брать надо будет.


Все ARMы и Cortexы шьются по UART или USB встроееными загрузчиками.
Genadi Zawidowski
Цитата(Метценгерштейн @ Feb 15 2013, 10:19) *
буду иметь ввиду- не знал.

а по STM32- кто с SPI работал успешно?

Я, использовал в режиме без DMA. STM32F101 (36 МГц) - на 9 МГц точно работает... 18 МГц не помню точно, но но на SCK импульсы были.
kan35
На STM32F107 запускал на 18М - нет проблем ( и по DMA работал без нареканий и программно). Кстати, в STM32F4 - SPI 40МГц.
VAI
Если Вы используете библиотеку CMSIS:
У меня SPI в STM32F205 нормально работает. Компилю кейлом. При инициализации я использую библиотеку CMSIS.
В начале работы с проектом столкнулся с несоответствием скоростей USART ожидаемым.
В файле stm32f2xx.h есть строки
Код
#if !defined  (HSE_VALUE)
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */

Или подправьте там или вставьте в проект глобальный дефайн, чтоб HSE_VALUE стала равняться частоте вашего кварца. Из этой константы клоки высчитываются.

Цитата
Программатор где-то брать надо будет
купите самый дешёвый STM32___Discovery и будет Вам ST-Link.
Метценгерштейн
так я и купил STM32 -Discovery плату.

Код
#define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz*/

внешний кварц как раз 8 МГц. Там частота шины всего 32 Мгц.

вот код
CODE
#include "stm32l1xx.h"
#include "USART1.h"
#include "stm32l1xx_gpio.h"

uint8_t temp, send_data = 0x01;

//Инициализация GPIO
void gpio_init()
{
RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN; //Тактирование портов A, B
//Линини SPI1 (Master)
//PA12(MOSI), PA11(MISO), PA5(SCK), PA4(NSS) - AF, Push-Pull, AF5(SPI1)
GPIOA->MODER |= GPIO_MODER_MODER12_1 | GPIO_MODER_MODER11_1 | GPIO_MODER_MODER5_1 | GPIO_MODER_MODER4_1; //Alternate function
GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_12 | GPIO_OTYPER_OT_11 | GPIO_OTYPER_OT_5 | GPIO_OTYPER_OT_4); //Push-Pull
GPIOA->AFR[1] |= (5<<16 | 5<<12); //PA12 = AF5, PA11 = AF5
GPIOA->AFR[0] |= (5<<20 | 5<<16); //PA5 = AF5, PA4 = AF5



RCC->AHBENR |= RCC_AHBENR_GPIOAEN; //настравиваем вывод порта PA8
GPIOA->MODER |= GPIO_MODER_MODER8_1;
GPIOA->OTYPER &= ~GPIO_OTYPER_OT_8;
GPIOA->PUPDR &= ~GPIO_PUPDR_PUPDR8;
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR8;
GPIOA->AFR[1] &= ~GPIO_AFRH_AFRH8;
RCC->CFGR &= ~RCC_CFGR_MCOPRE;

}
//Инициализация SPI1, SPI2
void spi_init()
{
/*Настройка SPI1 (Master)
8 бит данных, MSB передается первым, программный режим управления NSS,
вывод NSS (PA4) разрешено использовать в качестве выхода*/
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; //Тактирование модуля SPI1
SPI1->CR1 |= SPI_CR1_BR; //Baud rate = Fpclk/256
SPI1->CR1 &= ~SPI_CR1_CPOL; //Полярность тактового сигнала
SPI1->CR1 &= ~SPI_CR1_CPHA; //Фаза тактового сигнала
SPI1->CR1 &= ~SPI_CR1_DFF; //8 бит данных
SPI1->CR1 &= ~SPI_CR1_LSBFIRST; //MSB передается первым
SPI1->CR1 |= SPI_CR1_SSM; //Программный режим NSS
SPI1->CR1 |= SPI_CR1_SSI; //Аналогично состоянию, когда на входе NSS высокий уровень
SPI1->CR2 |= SPI_CR2_SSOE; //Вывод NSS - выход управления slave select
SPI1->CR1 |= SPI_CR1_MSTR; //Режим Master
SPI1->CR1 |= SPI_CR1_SPE; //Включаем SPI1

}

int main()
{
Init_USART1();
gpio_init(); //Вызов функции инициализации портов
spi_init(); //Вызов функции инициализации модулей SPI

RCC->CFGR |= RCC_CFGR_MCO_SYSCLK; //вывод на PA8 SYSCLK

for ( uint8_t data =0; data <10; data ++)
{
// SPI1->DR = data; //Пишем в буфер передатчика SPI1. После этого стартует обмен данными
// while(!(SPI1->SR & SPI_SR_RXNE)); //Ожидаем окончания приема данных модулем SPI1 (RXNE =1 - приемный буфер содержит данные)
// temp = SPI1->DR;//Считываем данные из приемного буфера SPI1. При этой операции происходит очистка буфера и сброс флага RXNE
//
// Usart1_Send_Byte_HEX (temp);
// Usart1_Send_String ("\r\n");

Usart1_Send_Byte_HEX (data);
Usart1_Send_String ("->");

while(!(SPI1->SR & SPI_SR_TXE))
;

SPI1->DR = data; //Пишем в буфер передатчика SPI1. После этого стартует обмен данными
while(!(SPI1->SR & SPI_SR_RXNE)); //Ожидаем окончания приема данных модулем SPI1 (RXNE =1 - приемный буфер содержит данные)
temp = SPI1->DR;//Считываем данные из приемного буфера SPI1. При этой операции происходит очистка буфера и сброс флага RXNE

Usart1_Send_Byte_HEX (temp);
Usart1_Send_String ("\r\n");

}

for (;;)
{
}
}


и сама тема с проблемой

пока что нравится 205-й
PoReX
STM32F207 с Атмеловской флешкой работает на 30MHz.

Цитата(Метценгерштейн @ Feb 15 2013, 14:51) *
так я и купил STM32 -Discovery плату.

Какую именно?
Метценгерштейн
такую
Flexz
Был у нас проект как раз на L151, данные снимались с SPI-датчика и сливались в SPI-флешку. Процессор работал на своих полных 32МГц, флешка вроде бы 16, датчики медленнее, точно скорости не помню уже.. зато помню забавный момент - заменили кварц на вдвое более быстрый, а инициализацию PLL я исправить забыл sm.gif в итоге проц вполне успешно работал на частоте вдвое выше номинала.

PS а вы не пробовали работать по второму SPI? их же два в этих процах.
dac
QUOTE (Метценгерштейн @ Feb 15 2013, 16:51) *
CODE
  SPI1->CR1 |= SPI_CR1_BR; //Baud rate = Fpclk/256
}

строка ни о чем не говорит?
36000000/256 = 140,625 кГц
Метценгерштейн
здесь я уже все комбинации перепробовал. Это одна из них.

при настройке в утилите тактовой частоты PCLK2 на 8 МГц через делитель APB2 prescaler, при этом сама частота шины = 32 МГц, вне зависимости от кварца или RC, то все работает.
Так же поднимал частоту системную до 12 МГц- все работало.
Получается, что наш SPI не хочет тактироваться от частот выше 12 МГц (а при частоте шины 32 МГц больше 8 МГц и не выставить)

2-й SPI не пробовал. По-любому другой проц брать надо.
dac
QUOTE (Метценгерштейн @ Feb 16 2013, 22:48) *
здесь я уже все комбинации перепробовал. Это одна из них.

при настройке в утилите тактовой частоты PCLK2 на 8 МГц через делитель APB2 prescaler, при этом сама частота шины = 32 МГц, вне зависимости от кварца или RC, то все работает.
Так же поднимал частоту системную до 12 МГц- все работало.
Получается, что наш SPI не хочет тактироваться от частот выше 12 МГц (а при частоте шины 32 МГц больше 8 МГц и не выставить)

2-й SPI не пробовал. По-любому другой проц брать надо.

так больше 2Мгц как в первом посте, или больше 8Мгц не работает?
Метценгерштейн
8 МГц- это частота PCLK2 - при ней может работать только до частоты клоков 2 МГц или ниже. Если делителем не выставлять PCLK2, то на нее идет 32 МГц- вообще не работает.

Скажите, какой код написать для проверки, что где выставить и я это проверю.

Я замыкаю МИСО на МОСИ, получаю эхо. Должно же так работать тоже.
mempfis_
Цитата(dimka76 @ Feb 15 2013, 12:19) *
Все ARMы и Cortexы шьются по UART или USB встроееными загрузчиками.


Не правда. Сталкивался с такими, которые можно прошить только по SWD - например Kinetis от Freescale. В документации ни слова не упоминается про наличие встроенного загрузчика.
dac
Цитата(Метценгерштейн @ Feb 17 2013, 14:45) *
8 МГц- это частота PCLK2 - при ней может работать только до частоты клоков 2 МГц или ниже. Если делителем не выставлять PCLK2, то на нее идет 32 МГц- вообще не работает.

Скажите, какой код написать для проверки, что где выставить и я это проверю.

Я замыкаю МИСО на МОСИ, получаю эхо. Должно же так работать тоже.

для stm32L делал давно и сейчас проверить неначем, исходники тоже на работе, появлюсь там через пару недель.
для 103, 105, 107 при PCLK 32МГц все работало при делителе SPI 2 и 4.

для приведенного ниже кода PCLK 36МГц
Update - код из рабочего проекта на stm32f105V, соответсвенно SPICLK=18МГц. работает с AT25DF321
CODE
void sFLASH_LowLevel_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

/*!< sFLASH_SPI_CS_GPIO, sFLASH_SPI_MOSI_GPIO, sFLASH_SPI_MISO_GPIO
and sFLASH_SPI_SCK_GPIO Periph clock enable */
RCC_APB2PeriphClockCmd(sFLASH_CS_GPIO_CLK | sFLASH_SPI_MOSI_GPIO_CLK |
sFLASH_SPI_MISO_GPIO_CLK | sFLASH_SPI_SCK_GPIO_CLK, ENABLE);

/*!< sFLASH_SPI Periph clock enable */
if (sFLASH_SPI == SPI1)
RCC_APB2PeriphClockCmd(sFLASH_SPI_CLK, ENABLE);
else
RCC_APB1PeriphClockCmd(sFLASH_SPI_CLK, ENABLE);
/*!< Configure sFLASH_SPI pins: SCK */
GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_SCK_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(sFLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);

/*!< Configure sFLASH_SPI pins: MOSI */
GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MOSI_PIN;
GPIO_Init(sFLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);

/*!< Configure sFLASH_SPI pins: MISO */
GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MISO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(sFLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);

/*!< Configure sFLASH_CS_PIN pin: sFLASH Card CS pin */
GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure);
}

unsigned char sFLASH_SendByte(unsigned char byte)
{
/*!< Loop while DR register in not emplty */
while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_TXE) == RESET);

/*!< Send byte through the SPI1 peripheral */
SPI_I2S_SendData(sFLASH_SPI, byte);

/*!< Wait to receive a byte */
while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_RXNE) == RESET);

/*!< Return the byte read from the SPI bus */
return SPI_I2S_ReceiveData(sFLASH_SPI);
}



void sFLASH_Init(void)
{
SPI_InitTypeDef SPI_InitStructure;

sFLASH_LowLevel_Init();

/*!< Deselect the FLASH: Chip Select high */
sFLASH_CS_HIGH();

/*!< SPI configuration */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) || defined (STM32F10X_CL)
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
#else
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
#endif

SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(sFLASH_SPI, &SPI_InitStructure);

/*!< Enable the sFLASH_SPI */
SPI_Cmd(sFLASH_SPI, ENABLE);
}
Метценгерштейн
я не вижу никаких особых отличий, кроме того, что я не через структуру все сделал- плохой тон)

если замыкать МИСО на МОСИ, должен же эхо корректно получать?
dac
QUOTE (Метценгерштейн @ Feb 17 2013, 17:13) *
я не вижу никаких особых отличий, кроме того, что я не через структуру все сделал- плохой тон)

если замыкать МИСО на МОСИ, должен же эхо корректно получать?

а не особые отличия какие?
должен. осциллографом шину смотрели?
Метценгерштейн
смотрел, конечно. Там, что тему с проблемой приводил- мне W5100 wiznet выдает число 13, а я своим STM32 не могу его прочитать. Начал копать и отрыл, что на скоростях больше 2 МБит глючит.

Отличия- что через структуру. Я и так тоже делал.
dac
QUOTE (Метценгерштейн @ Feb 17 2013, 19:58) *
смотрел, конечно. Там, что тему с проблемой приводил- мне W5100 wiznet выдает число 13, а я своим STM32 не могу его прочитать. Начал копать и отрыл, что на скоростях больше 2 МБит глючит.

Отличия- что через структуру. Я и так тоже делал.

в той теме не совсем понятно, поэтому спрошу
1. эхо на высоких частотах работает?
2. осциллограммы сняты, лог. анализатором, проведите еще снятые осциллографом в нормальном аналоговом режиме
3. попробуйте в 16-битном режиме поработать, я когда с ads7843 разбирался, она у меня в 8-битном тоже отказывалась нормально работать, причину чесно говоря не выяснил, да и лень было sad.gif
Метценгерштейн
эхо только на низких частотах. На высоких глючит.
да фронты не завалены были. смотрел тоже. Что именно посмотреть?
а 16 бит и 8 бит режимы чем отличаются?
dac
QUOTE (Метценгерштейн @ Feb 17 2013, 23:15) *
да фронты не завалены были. смотрел тоже. Что именно посмотреть?
а 16 бит и 8 бит режимы чем отличаются?

осциллограмму SCL и MISO в аналоговом режиме.
передаются 8 и 16 бит соответсвенно sm.gif
в глючном режиме как отличаются принятый и переданный байты?
попробуйте сделать задержку несколько тактов после выставления флага RNE - ощущение что не успеват записаться последний бит.
muravei
Цитата(Метценгерштейн @ Feb 17 2013, 20:15) *
да фронты не завалены были.

Может, осцил "улучшителем" работает , выдает желаемое за действительное.
Я смотрел С1-65(со щупом) , так выглядело все довольно мерзко.
Метценгерштейн
потихоньку проясняется

это SCK

тут уже начали ошибки сыпаться. Выясняю, что еще сидит на данном пине. Пин на плате в данный момент ни к чему не подпаян. (штырек имеется ввиду)
ViKo
Цитата(Метценгерштейн @ Feb 18 2013, 11:23) *
тут уже начали ошибки сыпаться. Выясняю, что еще сидит на данном пине. Пин в воздухе на плате в данный момент

Пайки проверьте, около площадок, дорожки тоже могут сцепиться тоненькими волосками в самой печатной плате.
Метценгерштейн
на схеме нигде PA5 не задействован
плата такая

буду пробовать на SPI2 сделать тоже самое. Человека просил на такой же плате проверить на глюки- подтвердил, что тоже самое наблюдает. Т.е. это не только моей платы косяк.
muravei
Цитата(Метценгерштейн @ Feb 18 2013, 11:23) *
потихоньку проясняется

А у осц вход открыт?

Может обрыв в SCK?

Цитата
буду пробовать на SPI2

А он же медленнее будет?
ViKo
Надо свое сначала отцепить от Дискавери.
Метценгерштейн
у осцилла стояло DC, т.е. открыт. Так ведь?

вывод SCK оторван от моей схемы. Мерил только на пине голом.
muravei
Цитата
на пине голом

Проца или платы?
Выглядит , как бы клок заряжает емкость. Может обрыв между процом и пином платы.
Метценгерштейн
на пине платы меряю. Вот не знаю, смогу ли на ножку проца встать.
попробую

на ножке проца та же картина. И Амплитуда маленькая. пол вольта где-то первый клок. И почему так?
dac
QUOTE (Метценгерштейн @ Feb 18 2013, 14:23) *
потихоньку проясняется

это SCK

тут уже начали ошибки сыпаться. Выясняю, что еще сидит на данном пине. Пин на плате в данный момент ни к чему не подпаян. (штырек имеется ввиду)

желательно посмотреть такую же осциллограмму с линией MISO на втором канале
если меряете на ножке дискавери (pin20 header28 по схеме) и он не идет к вашей схеме, и там такое, тогда,
1. осциллограф - полосы пропускания достаточно? ограничение полосы отключено? режим выборки какой?
2. битый вывод проца
3. неправильная иницилизация GPIO - скорость GPIO правильно выставили? отладчиком глянтье состояние gpio на момент передачи.

визуально осциллогамма выглядит, будто заряжается большая емкость или
Метценгерштейн
инициализация портов и SPI
Код
RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN; //Тактирование портов A, B
  //Линини SPI1 (Master)
  //PA12(MOSI), PA11(MISO), PA5(SCK), PA4(NSS) - AF, Push-Pull, AF5(SPI1)
  GPIOA->MODER |= GPIO_MODER_MODER12_1 | GPIO_MODER_MODER11_1 | GPIO_MODER_MODER5_1 | GPIO_MODER_MODER4_1; //Alternate function
  GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_12 | GPIO_OTYPER_OT_11 | GPIO_OTYPER_OT_5 | GPIO_OTYPER_OT_4); //Push-Pull
  GPIOA->AFR[1] |= (5<<16 | 5<<12); //PA12 = AF5, PA11 = AF5
  GPIOA->AFR[0] |= (5<<20 | 5<<16); //PA5 = AF5, PA4 = AF5


RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; //Тактирование модуля SPI1          
        SPI1->CR2 = 0;
        SPI1->CR1 = 0
        | 0 * SPI_CR1_BR_2 | 0 * SPI_CR1_BR_1 | 0 * SPI_CR1_BR_0 //Baud rate = Fpclk/2
        | 0 * SPI_CR1_CPOL //Полярность тактового сигнала
        | 0 * SPI_CR1_CPHA //Фаза тактового сигнала
        | 0 * SPI_CR1_DFF //8 бит данных
        | 0 * SPI_CR1_LSBFIRST //MSB передается первым
        | 1 * SPI_CR1_SSM //Программный режим NSS
        | 1 * SPI_CR1_SSI //Аналогично состоянию, когда на входе NSS высокий уровень
        | 1 * SPI_CR1_MSTR //Режим Master
        | 1 * SPI_CR1_SPE; //Включаем SPI1
        ;
        SPI1->CR2 = SPI_CR2_SSOE; //Вывод NSS - выход управления slave select


осцилл 60 МГц. Никаких фильтров не включено. Хотя, фильтр больше 20 Мег отсекает.
вывод MISO замкнут на MOSI и там картина нормальная- скачут биты и уровень и фронты- все четко.

если частоты клоков снизить до 2 Мгц, то еще работает, но фронты начинают валиться. А на 1 Мгц- вообще все красиво по фронтам.
Petka
Цитата(Метценгерштейн @ Feb 18 2013, 14:59) *
инициализация портов и SPI
Код
RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN; //Тактирование портов A, B
  //Линини SPI1 (Master)
  //PA12(MOSI), PA11(MISO), PA5(SCK), PA4(NSS) - AF, Push-Pull, AF5(SPI1)
  GPIOA->MODER |= GPIO_MODER_MODER12_1 | GPIO_MODER_MODER11_1 | GPIO_MODER_MODER5_1 | GPIO_MODER_MODER4_1; //Alternate function
  GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_12 | GPIO_OTYPER_OT_11 | GPIO_OTYPER_OT_5 | GPIO_OTYPER_OT_4); //Push-Pull
  GPIOA->AFR[1] |= (5<<16 | 5<<12); //PA12 = AF5, PA11 = AF5
  GPIOA->AFR[0] |= (5<<20 | 5<<16); //PA5 = AF5, PA4 = AF5


......

Однозначно у вас не настроены порты на максимальную скорость.
Проверил у себя на плате. Осциллограммы совпадают в вашим скриншотом.
Попробуйте установить правильные значения в регистр GPIOA->OSPEEDR.

P.S. Что-то типа:
Код
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR11_0 | GPIO_OSPEEDER_OSPEEDR11_1 |GPIO_OSPEEDER_OSPEEDR12_0 | GPIO_OSPEEDER_OSPEEDR12_1 |GPIO_OSPEEDER_OSPEEDR5_0 | GPIO_OSPEEDER_OSPEEDR5_1 |GPIO_OSPEEDER_OSPEEDR4_0 | GPIO_OSPEEDER_OSPEEDR4_1;
dimka76
У вас щуп осциллографа 1:1 или с делителем 1:10 ?
dac
QUOTE (Метценгерштейн @ Feb 18 2013, 16:59) *
инициализация портов и SPI
[code] RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN; //Тактирование портов A, B
//Линини SPI1 (Master)
//PA12(MOSI), PA11(MISO), PA5(SCK), PA4(NSS) - AF, Push-Pull, AF5(SPI1)
GPIOA->MODER |= GPIO_MODER_MODER12_1 | GPIO_MODER_MODER11_1 | GPIO_MODER_MODER5_1 | GPIO_MODER_MODER4_1; //Alternate function
GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_12 | GPIO_OTYPER_OT_11 | GPIO_OTYPER_OT_5 | GPIO_OTYPER_OT_4); //Push-Pull
GPIOA->AFR[1] |= (5<<16 | 5<<12); //PA12 = AF5, PA11 = AF5
GPIOA->AFR[0] |= (5<<20 | 5<<16); //PA5 = AF5, PA4 = AF5

я не знаю как регисты в иаре выглядят, надо установить
GPIOA_OSPEEDR5 = 3;
Метценгерштейн
щуп осцилла 1:10

пробую порты

да!
все четко! Фронты в норме.
Код
GPIOA->OSPEEDR |=GPIO_OSPEEDER_OSPEEDR5 | GPIO_OSPEEDER_OSPEEDR11 | GPIO_OSPEEDER_OSPEEDR12;  //ноги 40 МГц

а все 3 ноги надо 40 МГц выставить? MOSI MISO SCK ?
или вход не надо?

Как-то упустил совсем из виду это. Спасибо всем)
dac
QUOTE (Метценгерштейн @ Feb 18 2013, 17:58) *
а все 3 ноги надо 40 МГц выставить? MOSI MISO SCK ?
или вход не надо?

Как-то упустил совсем из виду это. Спасибо всем)

вход не надо, а MOSI и CS тоже надо

так вроде уже писали про это, и в примерах приведенных было.

и еще, если отдельную плату будете разводить, желательно последовательные резисторы 33-51Ом, чтоб звона не было и подтяжки 100кОм
Метценгерштейн
а не будет из-за последоват. резисторов RC цепь на частотах? Для чего они?
А подтяжки зачем? Програмных не достаточно?
dac
QUOTE (Метценгерштейн @ Feb 18 2013, 18:38) *
а не будет из-за последоват. резисторов RC цепь на частотах? Для чего они?
А подтяжки зачем? Програмных не достаточно?

как раз и надо RC-фильтр чтоб звон погасить, мешать не будет, такие даже на DDR 400МГц стоят. а вот избежать трудноуловимых глюков помогут.
подтяжки чтоб пока контроллер не загрузился (программные еще не включены), помехи чего попало куда попало не записали. как минимум на CS - обязательно, остальные по желанию.
а если SD-карта на SPI, то строго обязательно - это культовое место посещения граблей sm.gif
Метценгерштейн
спасибо, буду знать.

т.е. просто на + U пит. по 100 КОм ставить?
dac
QUOTE (Метценгерштейн @ Feb 18 2013, 19:35) *
спасибо, буду знать.

т.е. просто на + U пит. по 100 КОм ставить?

да
Golikov A.
забавно... на 1 странице была ссылка на тему с той же проблемой, и в ней я написал что возможно надо настроить порты на макс частоту, но я не был уверен что эта настройка влияет на СПИ. Сам так нагорел, когда пытался системный клок наружу выдать... Что-то упустил что тут тоже стоило бы написать, сорки, думал за той темой следят...
dac
QUOTE (Golikov A. @ Feb 18 2013, 21:35) *
забавно... на 1 странице была ссылка на тему с той же проблемой, и в ней я написал что возможно надо настроить порты на макс частоту, но я не был уверен что эта настройка влияет на СПИ. Сам так нагорел, когда пытался системный клок наружу выдать... Что-то упустил что тут тоже стоило бы написать, сорки, думал за той темой следят...

ТС невнимательно ответы читает, я Ваше сообщение в той теме видел, поэтому сразу не стал на этом внимание акцентировать, думал уже проверено
Метценгерштейн
возможно, как- то читаю, но думаю почему-то про свое. Свою логику развиваю. А она подвела) Будем исправляться)
Всем спасибо еще раз.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.