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

 
 
> STM32F103 SPI1. осцильником не видно нечего.
123kill12
сообщение Apr 28 2011, 13:19
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 12-05-10
Пользователь №: 57 217



использую простой код.
Код
void SPI_init(void)
{
  // Òàêòèðîâàíèå àëüòåðíàòèâíûõ ôóíêöèé GPIO.
  RCC->APB2ENR  |= RCC_APB2ENR_AFIOEN;
  //âêëþ÷åíèå òàêòèðîâàíèÿ SPI1
  RCC->APB2ENR  |= RCC_APB2ENR_SPI1EN;
  
  //íàñòðîéêà âûâîäîâ
  //NSS -PA4  -out
  GPIOB->CRL |=GPIO_CRL_MODE4;//áûò ÿâëÿåòñÿ âûõîäíûì ñ ÷àñòîòîé ïåðåêëþ÷åíèÿ 50 MHz
  GPIOB->CRL &=~GPIO_CRL_CNF4;
  GPIOB->CRL |=GPIO_CRL_CNF4_1;
  //CLK -PA5  -out
  GPIOB->CRL |=GPIO_CRL_MODE5;//áûò ÿâëÿåòñÿ âûõîäíûì ñ ÷àñòîòîé ïåðåêëþ÷åíèÿ 50 MHz
  GPIOB->CRL &=~GPIO_CRL_CNF5;
  GPIOB->CRL |=GPIO_CRL_CNF5_1;
  //MISO -PA6 -in
  GPIOB->CRL &=~GPIO_CRL_MODE6;
  GPIOB->CRL &=~GPIO_CRL_CNF6;
  GPIOB->CRL |=GPIO_CRL_CNF6_1;
  //MOSI -PA7 -out
  GPIOB->CRL |=GPIO_CRL_MODE7;//áûò ÿâëÿåòñÿ âûõîäíûì ñ ÷àñòîòîé ïåðåêëþ÷åíèÿ 50 MHz
  GPIOB->CRL &=~GPIO_CRL_CNF7;
  GPIOB->CRL |=GPIO_CRL_CNF7_1;
  
  //íàñòðàèâàåì àëüòåíðíàòèâíûå ôóíêöèè ââîäîâ
  AFIO->MAPR &=~AFIO_MAPR_SPI1_REMAP;
  
  //buard detect
  SPI1->CR1&=~SPI_CR1_BR_0;
  SPI1->CR1&=~SPI_CR1_BR_1;
  SPI1->CR1&=~SPI_CR1_BR_2;
  //CHOL=1
  SPI1->CR1|=SPI_CR1_CPOL;
  //CPHA=1  
  SPI1->CR1|=SPI_CR1_CPHA;
  //DFF
  SPI1->CR1&=~SPI_CR1_DFF;
  //íàïðàâëåíèå ñäâèãà
  SPI1->CR1&=~SPI_CR1_LSBFIRST;
  //óïðàâëåíèå íîãîé NSS
  SPI1->CR1&=~SPI_CR1_SSM;
  SPI1->CR2|=SPI_CR2_SSOE;
  //âèä óñòðîéñòâà ìàñòåð
  SPI1->CR1|=SPI_CR1_MSTR;
  
  //ðàçðåøàåì ïðåðûâàíèÿ ïî ïðèåìó è ïåðåäà÷è
  //SPI1->CR2|=SPI_CR2_TXEIE;
  //SPI1->CR2|=SPI_CR2_RXNEIE;
  
  //NVIC->ISER[1] |= ena_SPI1; // Ðàçðåøèòü ïðåðûâàíèå SPI1_IRQn â NVIC.  
  //çàïóñê SPI
  SPI1->CR1|=SPI_CR1_SPE;
}


Код
void main(void)
{  
   //èíèöèëèçàöèÿ ÷àñòîòû ðàáîòû
   SystemInit();
   RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
   RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
   RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;

   SPI_init();
   SPI1->DR=0x45;
   while(1)
   {
     tmp=SPI1->SR;
     if((tmp&0x80) == SPI_SR_BSY)
     {
        tmp=SPI1->SR;
     }
     else
     {
        //++++++++++
        tmp=SPI1->DR;
        tmp=SPI1->SR;
        //++++++++++
        SPI1->DR=0x45;
        tmp=SPI1->SR;
     }
   }


статусный регистр меняется правильно. когда я передаю. в нем стоит 0х80. мониторю флаг BSY. если его нет то считываю статусный регистр. где уже 0x03. вижу что новые данные пришли. хотя я нечего и не принимаю. он так работает. если из регистра выталкивается то что то в него заталкивается. (странно то что при приеме получаю FE). снова смотрю статус там уже 0х02. записываю новые данные и в статусном снова 0х80.

но осцильником хочу посмотреть частоту и нечего(((( смотрел и другие пины. там тоже пусто.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
AHTOXA
сообщение Apr 28 2011, 14:55
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Попробуйте такой порядок:
  • включить тактирование GPIO и AFIO;
  • включить ремап;
  • включить тактирование SPI;
  • сконфигурировать ноги;
  • сконфигурировать SPI;

В принципе порядок не обязательно именно такой, главное -- сначала включить ремап, а уже потом тактирование модуля SPI.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
123kill12
сообщение May 3 2011, 05:55
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 12-05-10
Пользователь №: 57 217



да. с порядком у меня все норм. вначале подумал что частоту слишком высокую зарубил. при питании ядра 72 я поставил делитель всего на 2(buard detect - 000). поставил делитель на 8(buard detect - 010) все равно такая хрень. на пинах нечего нет. а флаги меняются и он говорит что передает((((. кто знает что все таки может быть не так?
Go to the top of the page
 
+Quote Post
123kill12
сообщение May 3 2011, 07:21
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 12-05-10
Пользователь №: 57 217



все ошибку нашел))))) перепутал GPIOB и GPIOA
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:01
Рейтинг@Mail.ru


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