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

 
 
> STM32F103, SPI master output
MySOL
сообщение Apr 13 2014, 05:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 17-06-12
Пользователь №: 72 370



Здравствуйте друзья! Нужна помощь в поимке особо опасной ошибки, скрывающейся в глубинах моего кода. Пытаюсь настроить SPI в режиме мастера и передать простой код. При отладке в KEIL'е все регистры встают на место, а вот при попытке записать данные в SPI1-DR ничего не происходит: регистр как был пустой, так и остался. Пытался брать примеры из интернета - тоже не отсылается ничего. Спасибо! P.S. хотелось бы реализовать всё без std_periph
CODE
#include "stm32f10x.h"
void InitAll(void);

void InitAll(void)
{
//Clock source
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;

//Initial GPIO
//SPI1_NSS alternate output push-pull
GPIOB->CRH &=~GPIO_CRH_CNF12;
GPIOB->CRH |=GPIO_CRH_CNF12_1;

GPIOB->CRH &=~GPIO_CRH_MODE12;
GPIOB->CRH |=GPIO_CRH_MODE12_1 | GPIO_CRH_MODE12_0;

//SPI1_SCK alternate output push-pull
GPIOB->CRH &=~GPIO_CRH_CNF13;
GPIOB->CRH |=GPIO_CRH_CNF13_1;

GPIOB->CRH &=~GPIO_CRH_MODE13;
GPIOB->CRH |=GPIO_CRH_MODE13_1 | GPIO_CRH_MODE13_0;

//SPI1_MISO input with pull-up/down
GPIOB->CRH &=~GPIO_CRH_CNF14;

GPIOB->CRH |=GPIO_CRH_CNF14_1;

GPIOB->CRH &=~GPIO_CRH_MODE14;

//SPI1_MOSI alternate output push-pull
GPIOB->CRH &=~GPIO_CRH_CNF15;
GPIOB->CRH |=GPIO_CRH_CNF15_1;

GPIOB->CRH &=~GPIO_CRH_MODE15;
GPIOB->CRH |=GPIO_CRH_MODE15_1 | GPIO_CRH_MODE15_0;

//SPI1_INIT
SPI1->CR1 |=SPI_CR1_MSTR | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_SPE;

}

int __main(void)
{
InitAll();
while(1)
{
SPI1->DR =0xFF;
}
}


Сообщение отредактировал IgorKossak - Apr 13 2014, 14:15
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adnega
сообщение Apr 13 2014, 10:41
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Смотрим Таблицу 56 RM0008.
Для SPI1.
При ремап = 0 ноги PA4-PA7
при ремап = 1 ноги PA15, PB3-PB5

У Вас скорее всего SPI2.
Go to the top of the page
 
+Quote Post
MySOL
сообщение Apr 13 2014, 11:01
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 17-06-12
Пользователь №: 72 370



Цитата(adnega @ Apr 13 2014, 14:41) *
Смотрим Таблицу 56 RM0008.
Для SPI1.
При ремап = 0 ноги PA4-PA7
при ремап = 1 ноги PA15, PB3-PB5

У Вас скорее всего SPI2.

Вы оказались правы. Я даже не подумал об этом. Пользуюсь отладочной платой Pinboard и бездумно доверился шелкографии на плате. Надо было сразу проверить. Спасибо! Но теперь возникла другая радость: стал проверять сигналы на MOSI и SCK и ужаснулся. У меандров очень сильное перерегулирование на переднем и задних фронтах, плюс на SCK сигнал 1.8 В вместо 3.3. не знаете в чём может быть проблема?
Прикрепленное изображение


Сообщение отредактировал MySOL - Apr 13 2014, 11:08
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Apr 13 2014, 15:19
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(MySOL @ Apr 13 2014, 12:01) *
Вы оказались правы. Я даже не подумал об этом. Пользуюсь отладочной платой Pinboard и бездумно доверился шелкографии на плате. Надо было сразу проверить. Спасибо! Но теперь возникла другая радость: стал проверять сигналы на MOSI и SCK и ужаснулся. У меандров очень сильное перерегулирование на переднем и задних фронтах, плюс на SCK сигнал 1.8 В вместо 3.3. не знаете в чём может быть проблема?

Не верьте всему, что показывает осциллограф:
- как упоминали, надо щуп x10
- щуп надо отстроить (согласовать) на тестовом сигнале (как правило, есть такой выход у осца) вращением подстроечных резисторов
- хорошо ли сидит земля щупа на земле платы
- щуп есть микроскоп Гейзенберга. Без него выбросов скорее всего нет. Критерием может служить лишь надежность передачи данных.
Go to the top of the page
 
+Quote Post
MySOL
сообщение Apr 13 2014, 16:28
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 17-06-12
Пользователь №: 72 370



Цитата(KnightIgor @ Apr 13 2014, 19:19) *
Не верьте всему, что показывает осциллограф:
- как упоминали, надо щуп x10
- щуп надо отстроить (согласовать) на тестовом сигнале (как правило, есть такой выход у осца) вращением подстроечных резисторов
- хорошо ли сидит земля щупа на земле платы
- щуп есть микроскоп Гейзенберга. Без него выбросов скорее всего нет. Критерием может служить лишь надежность передачи данных.

Понял, спасибо!

Цитата(adnega @ Apr 13 2014, 16:46) *
Да хоть 36МГц.
Какой делитель на пробнике? Нужен 1:10.
Ноги должны быть настроены на вывод на частоте 50МГц (у Вас это так, судя по коду).

Попробую, спасибо!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 21:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01436 секунд с 7
ELECTRONIX ©2004-2016