Показать сообщение отдельно
Старый 28.04.2011, 17:23   #1
123kill12
Junior Member
 
Регистрация: 07.04.2011
Возраст: 29
Сообщений: 12
Вес репутации: 100/26
123kill12 will become famous soon enough123kill12 will become famous soon enough
По умолчанию STM32F103 SPI1. осцильником не видно нечего.

использую простой код.
Код:
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.

но осцильником хочу посмотреть частоту и нечего(((( смотрел и другие пины. там тоже пусто.
123kill12 вне форума   Ответить с цитированием