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

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

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

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

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

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


 
Опции темы

STM32F030C8T6 пролема с SPI1

Непрочитано 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
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
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
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: STM32F030C8T6 пролема с SPI1

Пины кроме CS конфигурируем как AF PP .
По умолчанию SPI1 весит на PA5-PA7 и это соответствует AF0 - то есть ни ремапить ни
конфигурировать AF не надо. Если конечно те же пины юзаем.
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 01.10.2013, 15:29  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
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
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
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
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
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
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
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, время: 10:37.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.