Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 01.10.2013, 14:43  
alexdos
Временная регистрация
 
Регистрация: 21.01.2010
Сообщений: 36
Сказал спасибо: 2
Сказали Спасибо 14 раз(а) в 3 сообщении(ях)
alexdos на пути к лучшему
По умолчанию STM32F030C8T6 пролема с SPI1

Виснет на ожидании приёма. Байт отправляет, смотрел осцилографом.
Часть кода (по #else) работает, с процессором STM32F100.
Код:
/* Wait to receive a byte */
 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);

код инициализации:

Код:
void SPI_FLASH_Init(void)
{
  SPI_InitTypeDef  SPI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
	
/*  Включим тактирования */	
#ifdef STM32F0XX_VL
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);	
  RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIO_SPI_FLAS  H_CS, ENABLE);	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
 
#else	
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO, ENABLE); 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_SPI_FLA  SH_CS, ENABLE);
  
/*JTAG-DP Disabled and SW-DP Enabled */
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); 
/* Configure REmapped- SPI pins: SCK, MISO and MOSI */
  GPIO_PinRemapConfig(GPIO_Remap_SPI1, ENABLE);
#endif
  
/*  Configure SPI pins:  SCLK=PB3, MOSI=PB5  */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_5;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	
#ifdef STM32F0XX_VL
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
#else	
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
#endif
   GPIO_Init(GPIOB, &GPIO_InitStructure);


/* Configure SPI pins:  MISO=PB4 */
#ifdef STM32F0XX_VL
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
	 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 
   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	 GPIO_Init(GPIOB, &GPIO_InitStructure);
	 
	 GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_0);	
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_0);	
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_0);	
#else
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	 GPIO_Init(GPIOB, &GPIO_InitStructure);
	 GPIO_Init(GPIOB, &GPIO_InitStructure);
#endif

	 


/* Configure SPI pins:  NS=PA15 */								  
   GPIO_InitStructure.GPIO_Pin = SPI_FALSH_CS_PIN;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 
#ifdef STM32F0XX_VL
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
#else
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
#endif
   GPIO_Init(SPI_FALSH_CS_PORT, &GPIO_InitStructure);

  SPI_FLASH_CS_HIGH();
	
/* SPI1 Config -------------------------------------------------------------*/ 
  SPI_StructInit(&SPI_InitStructure);
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; 
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; 
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPI1, &SPI_InitStructure);
	
	SPI_CalculateCRC(SPI1, DISABLE);

/* Enable SPI1 */ 
  SPI_Cmd(SPI1, ENABLE);
передача приём

Код:
uint8_t Flash_ReadWriteByte(uint8_t data)		
{
  /* Loop while DR register in not emplty */
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

/* Send byte through the SPI1 peripheral */
#ifdef STM32F0XX_VL
  SPI_SendData8(SPI1, data);
#else	
  SPI_I2S_SendData(SPI1, data);
#endif
    
/* Wait to receive a byte */
 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);

/* Return the byte read from the SPI bus */
#ifdef STM32F0XX_VL
	return SPI_ReceiveData8(SPI1);
#else
  return SPI_I2S_ReceiveData(SPI1);
#endif	
}
Реклама:
alexdos вне форума  
Непрочитано 01.10.2013, 15:04  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: STM32F030C8T6 пролема с SPI1

Выкинуть SPL и читать до просветления даташит.
Для начала какой размер фрейма ?
Здесь для 8 бит. Для 9 и выше юзаем DR .

Код:
#define SPI1_DR_8b (*(__IO uint8_t *)((uint32_t)SPI1 + 0x0C))
Код:
	SPI1-›CR1 |= 
	         SPI_CR1_BR_0 |     // 
           SPI_CR1_MSTR |
           SPI_CR1_SSI 	|				 
					 SPI_CR1_SSM              
					          ;	
	SPI1-›CR2  = 0x700;   //  8 bit
  
	SPI1-›CR1 |= SPI_CR1_SPE;
Гоним массив без пауз.

Код:
for (line=0; line‹n; line++){
	
		
	 while(!(SPI1-›SR & SPI_SR_TXE)); 
   SPI1-›SPI1_DR_8b=data;	
		
  }
	while((SPI1-›SR & SPI_SR_BSY));
Для ручного тырканья каждого фрейма.

Код:
        SPI1-›SPI1_DR_8b = data;                       
        while (!(SPI1-›SR & SPI_SR_RXNE));    
        
        return (SPI1-›DR);
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 01.10.2013, 15:15  
alexdos
Временная регистрация
 
Регистрация: 21.01.2010
Сообщений: 36
Сказал спасибо: 2
Сказали Спасибо 14 раз(а) в 3 сообщении(ях)
alexdos на пути к лучшему
По умолчанию Re: STM32F030C8T6 пролема с SPI1

"Для начала какой размер фрейма ?" - 8 бит.

Было бы время и даташит протёр, и выкинул бы SPL.
У меня подозрения что засада в переназначении ноги MISO (PB4).
alexdos вне форума  
Непрочитано 01.10.2013, 15:21  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: STM32F030C8T6 пролема с SPI1

Пины кроме CS конфигурируем как AF PP .
По умолчанию SPI1 весит на PA5-PA7 и это соответствует AF0 - то есть ни ремапить ни
конфигурировать AF не надо. Если конечно те же пины юзаем.
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 01.10.2013, 15:29  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: STM32F030C8T6 пролема с SPI1

Сообщение от alexdos Посмотреть сообщение
У меня подозрения что засада в переназначении ноги MISO (PB4).
Ну он так же AF0 .
Миниатюры:
Нажмите на изображение для увеличения
Название: PB4.png
Просмотров: 97
Размер:	45.6 Кб
ID:	52664  
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 01.10.2013, 15:51  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: STM32F030C8T6 пролема с SPI1

Сообщение от dosikus Посмотреть сообщение
По умолчанию SPI1 весит на PA5-PA7 и это соответствует AF0
Дополню и на PB3-PB5 .
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 01.10.2013, 16:15  
alexdos
Временная регистрация
 
Регистрация: 21.01.2010
Сообщений: 36
Сказал спасибо: 2
Сказали Спасибо 14 раз(а) в 3 сообщении(ях)
alexdos на пути к лучшему
По умолчанию Re: STM32F030C8T6 пролема с SPI1

Вставил Вашу инициализацию, код передачи и приёма.
Успешно висим на while (!(SPI1-›SR & SPI_SR_RXNE));
SPI_SR_RXNE - не взводится. Какие могут быть этому причины ? вроде как бы не нужно мастеру такты внешние чтоб "дотикать". По логике он после передачи через короткую паузу должен стать "1".
alexdos вне форума  
Непрочитано 01.10.2013, 16:26  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: STM32F030C8T6 пролема с SPI1

alexdos,
Упс извинюсь, совсем забыл про переключалку FIFO фрейма.
Вот это и для приема и для передачи
Код:
#define SPI1_DR_8b (*(__IO uint8_t *)((uint32_t)SPI1 + 0x0C))
Spi_Init (void)
{
SPI1-›CR1 |= 
	         SPI_CR1_BR_0 |     // 
           SPI_CR1_MSTR |
           SPI_CR1_SSI 	|				 
					 SPI_CR1_SSM              
					          ;	
	SPI1-›CR2  = 0x700;   //  8 bit
        SPI1-›CR2 | =SPI_CR2_FRXTH;
	SPI1-›CR1 |= SPI_CR1_SPE;
}
uint8_t Spi_send(uint8_t data)
{
 SPI1-›SPI1_DR_8b = data;                       
        while (!(SPI1-›SR & SPI_SR_RXNE));    
        
        return (SPI1-›SPI1_DR_8b);
}
__________________
Осторожно , злой кот

Последний раз редактировалось dosikus; 01.10.2013 в 16:29.
dosikus вне форума  
Непрочитано 01.10.2013, 16:31  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: STM32F030C8T6 пролема с SPI1

Сообщение от alexdos Посмотреть сообщение
Какие могут быть этому причины ? вроде как бы не нужно мастеру такты внешние чтоб "дотикать". По логике он после передачи через короткую паузу должен стать "1".
В даташите все есть.
В SPL еще долго искать будешь...
Миниатюры:
Нажмите на изображение для увеличения
Название: frxth.png
Просмотров: 117
Размер:	55.3 Кб
ID:	52669  
__________________
Осторожно , злой кот

Последний раз редактировалось dosikus; 01.10.2013 в 16:39.
dosikus вне форума  
Сказали "Спасибо" dosikus
alexdos (01.10.2013)
Непрочитано 01.10.2013, 17:08  
alexdos
Временная регистрация
 
Регистрация: 21.01.2010
Сообщений: 36
Сказал спасибо: 2
Сказали Спасибо 14 раз(а) в 3 сообщении(ях)
alexdos на пути к лучшему
По умолчанию Re: STM32F030C8T6 пролема с SPI1

Сообщение от dosikus Посмотреть сообщение
В даташите все есть.
В SPL еще долго искать будешь...
SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);

Громадное спасибо.
alexdos вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пролема симуляции через SIMATIC MANAGER. SIMATIC S7-300 Rybilka Производственное оборудование 3 07.12.2012 10:13
Помогите с Touch Screen на ADS7843 Sergey8870 Микроконтроллеры, АЦП, память и т.д 108 30.08.2012 14:42


Часовой пояс GMT +4, время: 13:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot