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

 
 
33 страниц V  « < 25 26 27 28 29 > »   
Closed TopicStart new topic
> STM32 – вопросы – проблемы - решения.
dezna
сообщение Feb 10 2012, 12:43
Сообщение #391


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 18-03-11
Пользователь №: 63 690



Цитата(Penchev @ Feb 10 2012, 13:51) *
Спасибо за наводку,но с этими битами я попробую разобратся если понадобится аппаратно NSS дергать,а пока я это делаю софтово.


у меня используется SPI2, но суть та же
вот его инициализация:

GPIOB->BSRR = 1<<12; //собственно установка NSS в единицу
SPI2->CR2 = SPI_CR2_SSOE;
SPI2->CR1 = SPI_CR1_MSTR | SPI_CR1_BR_1;
SPI2->CR1 |= SPI_CR1_SPE;

у меня также NSS используется софтово. и если его не установить перед инициализацией в 1, то SPI переходит в SLAVE.
был такой косяк.
Go to the top of the page
 
+Quote Post
Penchev
сообщение Feb 10 2012, 13:36
Сообщение #392





Группа: Новичок
Сообщений: 9
Регистрация: 8-03-10
Пользователь №: 55 853



Цитата(Сергей Борщ @ Feb 10 2012, 15:34) *
А вы не допускаете, что между записью в SPI1->DR и чтением отладчиком содержимого SPI1->SR проходит некоторе время, за которое байт успевает уйти из буфера и буфер таки оказывается действительно пуст?

Не допускаю, что он успевает тогда бы работало без задержки и при Fclck/4,8,16,32 не приходилось бы увеличивать эту же самую задержку.
Сейчас попробую Ваши советы,правда к осцилографу щупов нет, уменьшу ка я скорость передачи и вместо проверки бита TXE коприровать значение SPI1_SR в переменные.

Цитата(dezna @ Feb 10 2012, 16:43) *
у меня используется SPI2, но суть та же
вот его инициализация:

GPIOB->BSRR = 1<<12; //собственно установка NSS в единицу
SPI2->CR2 = SPI_CR2_SSOE;
SPI2->CR1 = SPI_CR1_MSTR | SPI_CR1_BR_1;
SPI2->CR1 |= SPI_CR1_SPE;

у меня также NSS используется софтово. и если его не установить перед инициализацией в 1, то SPI переходит в SLAVE.
был такой косяк.


ПопробовалС Вашей настройкой И все так же работает, TXE бит стоит как вкопаный, правда RXNE поднимается но только на один такт, и сразу Же сбрасываетя...
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Feb 11 2012, 12:12
Сообщение #393


Знающий
****

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



Цитата(Penchev @ Feb 10 2012, 14:36) *
И все так же работает, TXE бит стоит как вкопаный

SPI имеет двойную буферизацию: после SPI->DR = data байт/слово переписывается в сдвиговый регистр, начинается его выдвижение, а DR тут же готов принять на грудь еще - TXE "стоит". Ткните быстро два раза данные в SPI->DR, и бит TXE "упадет".

Сообщение отредактировал KnightIgor - Feb 11 2012, 12:13
Go to the top of the page
 
+Quote Post
Penchev
сообщение Feb 11 2012, 13:29
Сообщение #394





Группа: Новичок
Сообщений: 9
Регистрация: 8-03-10
Пользователь №: 55 853



Сейчас нет под рукой железяки, в понедельник проверю, так что для отправки байта делать такую запись
SPI1->DR = Cmd;
SPI1->DR = Cmd;
while(!((SPI1->SR)&SPI_SR_TXE));
я правильно Вас понял?
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Feb 11 2012, 16:01
Сообщение #395


Знающий
****

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



Цитата(Penchev @ Feb 11 2012, 14:29) *
Сейчас нет под рукой железяки, в понедельник проверю, так что для отправки байта делать такую запись
SPI1->DR = Cmd;
SPI1->DR = Cmd;
while(!((SPI1->SR)&SPI_SR_TXE));
я правильно Вас понял?

В качестве эксперимента - да, но в реальном приложении так заморачиваться совсем не обязательно: если надо передавать последовательность байт, просто кидайте их в пасть SPI, - и все. Если же Вы хотите после передачи байта каждый раз там дергать NSS, то TXE - не тот флаг, чтобы отслеживать начало-завершение передачи. См. бит BSY.
Go to the top of the page
 
+Quote Post
Penchev
сообщение Feb 11 2012, 16:39
Сообщение #396





Группа: Новичок
Сообщений: 9
Регистрация: 8-03-10
Пользователь №: 55 853



Я уже работал с SPI PIC'ков и LPC так там таких проблем не было, есть флаг опустошения или заполнения буфера вот он и опрашивается.
Ладно уже окончательно этими флагами сломал голову, BSY тоже не поднимается.В примерах на передачу я видел опрос TXE.Надо бы SPI2 попробовать мало ли.
Go to the top of the page
 
+Quote Post
Danis
сообщение Feb 11 2012, 20:22
Сообщение #397


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Не знаю, может и не в тему, особо не вникал.
Моя передача по SPI с ожиданием завершения передачи 1-го байта

Код
u8  spi_process_8(u8 data)
{
  SPI1->DR = data;
  while ( (SPI1->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET );

  return SPI1->DR;
}


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Feb 14 2012, 19:38
Сообщение #398


Знающий
****

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



Цитата(Penchev @ Feb 11 2012, 17:39) *
.Надо бы SPI2 попробовать мало ли.

Разницы нет.
Вы бы задачку обрисовали, что именно нужно.
Если просто идут передачи, то достаточно ПЕРЕД записью проверить готовность регистра данных (наличие флага TXE).
Если же необходимо точно знать, что передача (и прием, который имеет место одновременно с передачей в режиме мастера) завершилась, чтобы после этого "поднять" ногу селекции периферии, то следует использовать метод, указаный Danis в предыдущем посте, немного его модифицировав для передачи потока данных:

1). вначале дождаться отсутствия бита BSY,
2). "опустить" ногу селекции периферии,
3). прочитать DR, гарантируя сброс RXNE,
4). дождаться готовности TXE,
5). вкинуть данные в DR,
6). дождаться готовности RXNE, который взведется после самого последнего такта SCLK,
7). прочитать и, возможно, сохранить принятый DR, если надо,
8). перейти к 4)., если есть еще что для передачи/приема.
9). "поднять" ногу селекции периферии.

Сообщение отредактировал KnightIgor - Feb 14 2012, 21:26
Go to the top of the page
 
+Quote Post
xheli
сообщение Feb 18 2012, 07:22
Сообщение #399





Группа: Участник
Сообщений: 14
Регистрация: 24-01-12
Пользователь №: 69 851



Чтобы не создавать новую тему.
Имеется отладочная платка, 5 на 5 см с stm32f417 144 ноги. Плата простая, выведено большинство ног на разъемы плюс житаг. Из дополнительных элементов тока конденсаторы по питанию согласно даташиту. Запущен микроконтроллер от внутреннего rc генератора на 168мГц. Проблема в том, что при поднесении пальца руки к микроконтроллеру в области ближе к углу где расположены 1, 144 пины, происходит насколько я смог понять срыв тактирования. Для этого даже не нужно касаться самого корпуса. Если прикасаться в других местах, все хорошо. Ну и вопрос, как такое поведение победить? Подскажите в какую сторону искать.


--------------------
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 18 2012, 07:27
Сообщение #400


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Может быть, плавают некоторые управляющие линии типа RST, JTAG? Если так, то добавить внешние подтяжки там, где необходимо.
Go to the top of the page
 
+Quote Post
xheli
сообщение Feb 18 2012, 08:24
Сообщение #401





Группа: Участник
Сообщений: 14
Регистрация: 24-01-12
Пользователь №: 69 851



не указал, RST подтянут резистором 100кОм к питанию, у житага только вывод RTCK резистором 100кОм на землю


--------------------
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 18 2012, 08:36
Сообщение #402


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Ну и нужно внимательно посмотреть, как подключены VDDA, VSSA, потому что от них запитывается PLL. Там желательно правильно разводить цепи, не забыть рекомендованный конденсатор 10 нФ.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Feb 18 2012, 20:51
Сообщение #403


Знающий
****

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



Цитата(xheli @ Feb 18 2012, 09:24) *
не указал, RST подтянут резистором 100кОм к питанию, у житага только вывод RTCK резистором 100кОм на землю

100кОм - много! На порядок уменьшить RST и на два порядка RTCK.
Go to the top of the page
 
+Quote Post
valera_o
сообщение Feb 19 2012, 09:15
Сообщение #404


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 2-04-08
Пользователь №: 36 402



Объясните пожалуйста, что происходит?
Запутался в том какие файлы надо обязательно подключать к проекту. Такое чувство, что наподключал лишнего, теперь не могу понять за какую веревочку дернуть, чтобы это узел развязался. Второй день втыкаю, не могу понять.
Состав проекта
Прикрепленное изображение


В симуляторе, после включения питания, в RCC CR появляются галки, что включен внутренний генератор, внешний и ФАПЧ. Откуда эти биты? В каком из подключенных файлов произошла такая инициализация? В дальнейшем не могу сбросить PLLON и HSEON, т.к. хочу тактировать от внутреннего генератора напрямую. Текст функции инициализации тактирования, на верхнем рисунке, первоначальный, потом пробовал писать в HSEON,PLLON и "0" и "1", стоят как вкопанные.

Прикрепленное изображение


Если можно объясните "на пальцах".

Сообщение отредактировал valera_o - Feb 19 2012, 09:32
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Feb 19 2012, 11:39
Сообщение #405


Знающий
****

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



Цитата(valera_o @ Feb 19 2012, 10:15) *
Объясните пожалуйста, что происходит?
Запутался в том какие файлы надо обязательно подключать к проекту. Такое чувство, что наподключал лишнего, теперь не могу понять за какую веревочку дернуть, чтобы это узел развязался. Второй день втыкаю, не могу понять.

Гляньте startup_xxx.s (ассемблер) файл:
Код
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR     R0, =SystemInit
                BLX     R0              
                LDR     R0, =__main
                BX      R0
                ENDP

Сначала вызывается SystemInit, где генераторы настраиваются и запускаются, и лишь после этого идет переход на main().
Go to the top of the page
 
+Quote Post

33 страниц V  « < 25 26 27 28 29 > » 
Closed TopicStart new topic
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

 


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


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