Jump to content

    
Sign in to follow this  
Метценгерштейн

посоветуйте STM32 cortex M3

Recommended Posts

на схеме нигде PA5 не задействован

плата такая

 

буду пробовать на SPI2 сделать тоже самое. Человека просил на такой же плате проверить на глюки- подтвердил, что тоже самое наблюдает. Т.е. это не только моей платы косяк.

Share this post


Link to post
Share on other sites

у осцилла стояло DC, т.е. открыт. Так ведь?

 

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

Edited by Метценгерштейн

Share this post


Link to post
Share on other sites

на пине платы меряю. Вот не знаю, смогу ли на ножку проца встать.

попробую

 

на ножке проца та же картина. И Амплитуда маленькая. пол вольта где-то первый клок. И почему так?

Edited by Метценгерштейн

Share this post


Link to post
Share on other sites
потихоньку проясняется

c3ebfc859acat.jpg

это SCK

 

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

желательно посмотреть такую же осциллограмму с линией MISO на втором канале

если меряете на ножке дискавери (pin20 header28 по схеме) и он не идет к вашей схеме, и там такое, тогда,

1. осциллограф - полосы пропускания достаточно? ограничение полосы отключено? режим выборки какой?

2. битый вывод проца

3. неправильная иницилизация GPIO - скорость GPIO правильно выставили? отладчиком глянтье состояние gpio на момент передачи.

 

визуально осциллогамма выглядит, будто заряжается большая емкость или

Share this post


Link to post
Share on other sites

инициализация портов и 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 Мгц- вообще все красиво по фронтам.

Edited by Метценгерштейн

Share this post


Link to post
Share on other sites
инициализация портов и 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;

Share this post


Link to post
Share on other sites
инициализация портов и 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_OSPEEDR5 = 3;

Share this post


Link to post
Share on other sites

щуп осцилла 1:10

 

пробую порты

 

да!

все четко! Фронты в норме.

GPIOA->OSPEEDR |=GPIO_OSPEEDER_OSPEEDR5 | GPIO_OSPEEDER_OSPEEDR11 | GPIO_OSPEEDER_OSPEEDR12;  //ноги 40 МГц

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

или вход не надо?

 

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

Edited by Метценгерштейн

Share this post


Link to post
Share on other sites
а все 3 ноги надо 40 МГц выставить? MOSI MISO SCK ?

или вход не надо?

 

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

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

 

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

 

и еще, если отдельную плату будете разводить, желательно последовательные резисторы 33-51Ом, чтоб звона не было и подтяжки 100кОм

Share this post


Link to post
Share on other sites

а не будет из-за последоват. резисторов RC цепь на частотах? Для чего они?

А подтяжки зачем? Програмных не достаточно?

Share this post


Link to post
Share on other sites
а не будет из-за последоват. резисторов RC цепь на частотах? Для чего они?

А подтяжки зачем? Програмных не достаточно?

как раз и надо RC-фильтр чтоб звон погасить, мешать не будет, такие даже на DDR 400МГц стоят. а вот избежать трудноуловимых глюков помогут.

подтяжки чтоб пока контроллер не загрузился (программные еще не включены), помехи чего попало куда попало не записали. как минимум на CS - обязательно, остальные по желанию.

а если SD-карта на SPI, то строго обязательно - это культовое место посещения граблей :)

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this