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

 
 
> 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



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

 


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


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