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

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

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

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

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

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


 
Опции темы
Непрочитано 20.10.2014, 10:25  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
eddy на пути к лучшему
По умолчанию STM32F103 проблема с SPI [решено]

Я столкнулся со странной проблемой: не работают ни SPI1, ни SPI2.
На макетке я инициализировал SPI1 так:
Код:
void SPI1_init(){
	rcc_periph_clock_enable(RCC_SPI1);
	rcc_periph_clock_enable(RCC_GPIOA); // PA5..7
	// PA5 - SCK, PA6 - MISO, PA7 - MOSI
	gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ,
		GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO5 | GPIO7 );
	gpio_set_mode(GPIOA, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO6);

	spi_reset(SPI1);
	spi_init_master(SPI1, SPI_CR1_BAUDRATE_FPCLK_DIV_128, SPI_CR1_CPOL_CLK_TO_1_WHEN_IDLE,
		SPI_CR1_CPHA_CLK_TRANSITION_2, SPI_CR1_DFF_8BIT, SPI_CR1_MSBFIRST);
	nvic_enable_irq(NVIC_SPI1_IRQ); // enable SPI interrupt

}
и все работало нормально. В изделии SPI1 я вывел на ноги PB3..PB5, поэтому инициализацию делаю с remap'ом:
Код:
void SPI1_init(){
	// enable AFIO & other clocking
	rcc_peripheral_enable_clock(&RCC_APB2ENR,
			RCC_APB2ENR_SPI1EN | RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPBEN);
	// remap SPI1 (change pins from PA5..7 to PB3..5); also turn off JTAG
	gpio_primary_remap(AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_O  N, AFIO_MAPR_SPI1_REMAP);
	// ?? this code don't work
	//gpio_primary_remap(AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_O  FF, AFIO_MAPR_SPI1_REMAP);
	// SCK, MOSI - push-pull output
	gpio_set_mode(GPIO_BANK_SPI1_RE_SCK, GPIO_MODE_OUTPUT_50_MHZ,
		GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO_SPI1_SCK);
	gpio_set_mode(GPIO_BANK_SPI1_RE_MOSI, GPIO_MODE_OUTPUT_50_MHZ,
		GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO_SPI1_MOSI);
	// MISO - opendrain in
	gpio_set_mode(GPIO_BANK_SPI1_RE_MISO, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO_SPI1_MISO);
	spi_reset(SPI1);
	spi_init_master(SPI1, SPI_CR1_BAUDRATE_FPCLK_DIV_128, SPI_CR1_CPOL_CLK_TO_1_WHEN_IDLE,
		SPI_CR1_CPHA_CLK_TRANSITION_2, SPI_CR1_DFF_8BIT, SPI_CR1_MSBFIRST);
	nvic_enable_irq(NVIC_SPI1_IRQ); // enable SPI interrupt
}
Однако, на выходах тишина...

С SPI2 тоже проблема. Инициализирую так:
Код:
void SPI2_init(){
	// turn on clocking
	rcc_peripheral_enable_clock(&RCC_APB1ENR, RCC_APB1ENR_SPI2EN);
	rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPBEN);
	// SCK, MOSI - push-pull output
	gpio_set_mode(GPIO_BANK_SPI2_SCK, GPIO_MODE_OUTPUT_50_MHZ,
		GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO_SPI2_SCK);
	gpio_set_mode(GPIO_BANK_SPI2_MOSI, GPIO_MODE_OUTPUT_50_MHZ,
		GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO_SPI2_MOSI );
	// MISO - opendrain in
	gpio_set_mode(GPIO_BANK_SPI2_MISO, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO_SPI2_MISO);
	spi_reset(SPI2);
	spi_init_master(SPI2, SPI_CR1_BAUDRATE_FPCLK_DIV_128, SPI_CR1_CPOL_CLK_TO_1_WHEN_IDLE,
		SPI_CR1_CPHA_CLK_TRANSITION_2, SPI_CR1_DFF_8BIT, SPI_CR1_MSBFIRST);
	nvic_enable_irq(NVIC_SPI2_IRQ); // enable SPI interrupt
}
Вроде бы, никаких ремапов и т.п., но почему-то на MOSI нет сигнала. Посылаю в качестве теста последовательность 0xff, на SCK вижу меандр, на MOSI нули.

Вот как такое может быть?
Реклама:
__________________
Союз Советских Социалистических Округов Северной Америки

Последний раз редактировалось eddy; 20.10.2014 в 12:36.
eddy вне форума  
Непрочитано 20.10.2014, 10:46  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: STM32F103 проблема с SPI

Ерунда какая-то: на SPI1 есть сигнал на MOSI, но нет на SCK; на SPI2 — наоборот, есть SCK, но нет MOSI. Что за чертовщина?
Думал, хреновый контакт дорожки, но при измерении сигнала непосредственно с ноги МК картина не меняется.
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума  
Непрочитано 20.10.2014, 11:46  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: STM32F103 проблема с SPI

С SPI1 разобрался, когда решил просто ногами подрыгать. Здесь я - ССЗБ: хотел как лучше, а получилось как всегда (вместо явного указания портов и пинов взял макросы, но попутал GPIO_SPI1_RE_xx и GPIO_SPI1_xx). Вот так работает:
Код:
void SPI1_init(){
	// enable AFIO & other clocking
	rcc_peripheral_enable_clock(&RCC_APB2ENR,
			RCC_APB2ENR_SPI1EN | RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPBEN);
	// remap SPI1 (change pins from PA5..7 to PB3..5); also turn off JTAG
	gpio_primary_remap(AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_O  FF, AFIO_MAPR_SPI1_REMAP);
	// SCK, MOSI - push-pull output
	gpio_set_mode(GPIO_BANK_SPI1_RE_SCK, GPIO_MODE_OUTPUT_50_MHZ,
		GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO_SPI1_RE_SCK);
	gpio_set_mode(GPIO_BANK_SPI1_RE_MOSI, GPIO_MODE_OUTPUT_50_MHZ,
		GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO_SPI1_RE_MOSI);
	// MISO - opendrain in
	gpio_set_mode(GPIO_BANK_SPI1_RE_MISO, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO_SPI1_RE_MISO);
	spi_reset(SPI1);
	/* Set up SPI in Master mode with:
	 * Clock baud rate: 1/128 of peripheral clock frequency (APB2, 72MHz)
	 * Clock polarity: Idle High
	 * Clock phase: Data valid on 2nd clock pulse
	 * Data frame format: 8-bit
	 * Frame format: MSB First
	 */
	spi_init_master(SPI1, SPI_CR1_BAUDRATE_FPCLK_DIV_128, SPI_CR1_CPOL_CLK_TO_1_WHEN_IDLE,
		SPI_CR1_CPHA_CLK_TRANSITION_2, SPI_CR1_DFF_8BIT, SPI_CR1_MSBFIRST);
	nvic_enable_irq(NVIC_SPI1_IRQ); // enable SPI interrupt
}
Теперь остается разобраться, почему нет MOSI на SPI2.
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума  
Непрочитано 20.10.2014, 12:17  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: STM32F103 проблема с SPI

Решил "подергать" вручную ногой MOSI на SPI2. Несмотря на выставленный режим
Код:
gpio_set_mode(GPIO_BANK_SPI2_MOSI, GPIO_MODE_OUTPUT_2_MHZ,
	GPIO_CNF_OUTPUT_PUSHPULL, GPIO_SPI2_MOSI);
в 1 значение не устанавливается (у SCK все ОК). Но видно, что значение на ноге становится чуть больше 0. Т.е. либо она где-то коротит, либо я не знаю...
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума  
Непрочитано 20.10.2014, 12:38  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: STM32F103 проблема с SPI

Итак, в случае с SPI2 проблема оказалась в чипе (или моих кривых руках): я отпаял ногу PB15, но даже вися в воздухе она была закорочена на землю.
Т.е. где-то что-то в МК или я спалил, или производственный косяк какой самого конкретного чипа.
Наверное, все же спалил: видать, либо при пайке, либо при тестировании щелкнул статикой на порт, и нижний ключ пробил до стадии проводника. И теперь нога постоянно "висит" на земле.

Надеюсь, с другими чипами такого не случится.
__________________
Союз Советских Социалистических Округов Северной Америки

Последний раз редактировалось eddy; 20.10.2014 в 12:45.
eddy вне форума  
Непрочитано 20.10.2014, 21:58  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: STM32F103 проблема с SPI

полярность SPI на ней поменяй. чисто из интереса. и gpio на ней перед этим выключи
Hives вне форума  
Непрочитано 20.10.2014, 22:21  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: STM32F103 проблема с SPI

Сообщение от Hives Посмотреть сообщение
полярность SPI на ней поменяй. чисто из интереса. и gpio на ней перед этим выключи
Она физически на нуль замкнута, я ж писал: даже при отключенном всем отпаянная от макетки нога "звенит" на землю. Т.е. это либо заводское замыкание внутри чипа, либо (что значительно вероятней) я спалил n-мосфет и он "стал диодом".
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума  
Непрочитано 21.10.2014, 07:25  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: STM32F103 проблема с SPI

Феном надо паять... А не ЭПСНом
niXto вне форума  
Непрочитано 21.10.2014, 09:12  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: STM32F103 проблема с SPI

Сообщение от niXto Посмотреть сообщение
Феном надо паять... А не ЭПСНом
Была бы паяльная станция... Да и все равно, нужен навык же! Да и пасту паяльную наносить... Ну и непонятно, как феном паять, чтобы микросхему не перегреть?
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума  
Непрочитано 21.10.2014, 11:59  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: STM32F103 проблема с SPI

Да не слушай ты малознающих. Не тот корпус для фена. Это если сносить, то фен. А так - обычного паяльника вполне хватит, и быстрее будет.
STM32F0 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто-нибудь работал с RF модулями nRF2401A? Easyrider83 Автоматика и аппаратура связи 1481 04.09.2021 23:24
Отладка SPI Как правильно испльзовать SPI debugger Александр г Воркута Proteus 5 22.09.2014 21:53
Проблема с тактированием STM32F103 slavaplx ARM 33 22.05.2013 18:22
Помехозащищённость SPI Chudilo Микроконтроллеры, АЦП, память и т.д 16 02.10.2008 23:46
робота с SPI kviper Микроконтроллеры, АЦП, память и т.д 6 07.08.2007 10:05


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


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