|
STM32 – вопросы – проблемы - решения. |
|
|
|
 |
Ответов
(390 - 404)
|
Feb 10 2012, 12:43
|
Участник

Группа: Участник
Сообщений: 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. был такой косяк.
|
|
|
|
|
Feb 10 2012, 13:36
|
Группа: Новичок
Сообщений: 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 поднимается но только на один такт, и сразу Же сбрасываетя...
|
|
|
|
|
Feb 11 2012, 13:29
|
Группа: Новичок
Сообщений: 9
Регистрация: 8-03-10
Пользователь №: 55 853

|
Сейчас нет под рукой железяки, в понедельник проверю, так что для отправки байта делать такую запись SPI1->DR = Cmd; SPI1->DR = Cmd; while(!((SPI1->SR)&SPI_SR_TXE)); я правильно Вас понял?
|
|
|
|
|
Feb 11 2012, 16:39
|
Группа: Новичок
Сообщений: 9
Регистрация: 8-03-10
Пользователь №: 55 853

|
Я уже работал с SPI PIC'ков и LPC так там таких проблем не было, есть флаг опустошения или заполнения буфера вот он и опрашивается. Ладно уже окончательно этими флагами сломал голову, BSY тоже не поднимается.В примерах на передачу я видел опрос TXE.Надо бы SPI2 попробовать мало ли.
|
|
|
|
|
Feb 11 2012, 20:22
|

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
|
|
|
|
|
Feb 14 2012, 19:38
|
Знающий
   
Группа: Участник
Сообщений: 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
|
|
|
|
|
Feb 18 2012, 07:22
|
Группа: Участник
Сообщений: 14
Регистрация: 24-01-12
Пользователь №: 69 851

|
Чтобы не создавать новую тему. Имеется отладочная платка, 5 на 5 см с stm32f417 144 ноги. Плата простая, выведено большинство ног на разъемы плюс житаг. Из дополнительных элементов тока конденсаторы по питанию согласно даташиту. Запущен микроконтроллер от внутреннего rc генератора на 168мГц. Проблема в том, что при поднесении пальца руки к микроконтроллеру в области ближе к углу где расположены 1, 144 пины, происходит насколько я смог понять срыв тактирования. Для этого даже не нужно касаться самого корпуса. Если прикасаться в других местах, все хорошо. Ну и вопрос, как такое поведение победить? Подскажите в какую сторону искать.
--------------------
|
|
|
|
|
Feb 18 2012, 08:24
|
Группа: Участник
Сообщений: 14
Регистрация: 24-01-12
Пользователь №: 69 851

|
не указал, RST подтянут резистором 100кОм к питанию, у житага только вывод RTCK резистором 100кОм на землю
--------------------
|
|
|
|
|
Feb 19 2012, 09:15
|
Участник

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

|
Объясните пожалуйста, что происходит? Запутался в том какие файлы надо обязательно подключать к проекту. Такое чувство, что наподключал лишнего, теперь не могу понять за какую веревочку дернуть, чтобы это узел развязался. Второй день втыкаю, не могу понять. Состав проекта
В симуляторе, после включения питания, в RCC CR появляются галки, что включен внутренний генератор, внешний и ФАПЧ. Откуда эти биты? В каком из подключенных файлов произошла такая инициализация? В дальнейшем не могу сбросить PLLON и HSEON, т.к. хочу тактировать от внутреннего генератора напрямую. Текст функции инициализации тактирования, на верхнем рисунке, первоначальный, потом пробовал писать в HSEON,PLLON и "0" и "1", стоят как вкопанные.
Если можно объясните "на пальцах".
Сообщение отредактировал valera_o - Feb 19 2012, 09:32
|
|
|
|
|
Feb 19 2012, 11:39
|
Знающий
   
Группа: Участник
Сообщений: 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().
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|