20.10.2014, 10:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,637
Сказал спасибо: 116
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
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.
|
|
|
|
20.10.2014, 10:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,637
Сказал спасибо: 116
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: STM32F103 проблема с SPI
Ерунда какая-то: на SPI1 есть сигнал на MOSI, но нет на SCK; на SPI2 — наоборот, есть SCK, но нет MOSI. Что за чертовщина?
Думал, хреновый контакт дорожки, но при измерении сигнала непосредственно с ноги МК картина не меняется.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
20.10.2014, 11:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,637
Сказал спасибо: 116
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
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.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
20.10.2014, 12:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,637
Сказал спасибо: 116
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
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. Т.е. либо она где-то коротит, либо я не знаю...
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
20.10.2014, 12:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,637
Сказал спасибо: 116
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: STM32F103 проблема с SPI
Итак, в случае с SPI2 проблема оказалась в чипе (или моих кривых руках): я отпаял ногу PB15, но даже вися в воздухе она была закорочена на землю.
Т.е. где-то что-то в МК или я спалил, или производственный косяк какой самого конкретного чипа.
Наверное, все же спалил: видать, либо при пайке, либо при тестировании щелкнул статикой на порт, и нижний ключ пробил до стадии проводника. И теперь нога постоянно "висит" на земле.
Надеюсь, с другими чипами такого не случится.
__________________
Союз Советских Социалистических Округов Северной Америки
Последний раз редактировалось eddy; 20.10.2014 в 12:45.
|
|
|
|
20.10.2014, 21:58
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: STM32F103 проблема с SPI
полярность SPI на ней поменяй. чисто из интереса. и gpio на ней перед этим выключи
|
|
|
|
20.10.2014, 22:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,637
Сказал спасибо: 116
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: STM32F103 проблема с SPI
Сообщение от Hives
|
полярность SPI на ней поменяй. чисто из интереса. и gpio на ней перед этим выключи
|
Она физически на нуль замкнута, я ж писал: даже при отключенном всем отпаянная от макетки нога "звенит" на землю. Т.е. это либо заводское замыкание внутри чипа, либо (что значительно вероятней) я спалил n-мосфет и он "стал диодом".
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
21.10.2014, 07:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: STM32F103 проблема с SPI
Феном надо паять... А не ЭПСНом
|
|
|
|
21.10.2014, 09:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,637
Сказал спасибо: 116
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: STM32F103 проблема с SPI
Сообщение от niXto
|
Феном надо паять... А не ЭПСНом
|
Была бы паяльная станция... Да и все равно, нужен навык же! Да и пасту паяльную наносить... Ну и непонятно, как феном паять, чтобы микросхему не перегреть?
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
21.10.2014, 11:59
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: STM32F103 проблема с SPI
Да не слушай ты малознающих. Не тот корпус для фена. Это если сносить, то фен. А так - обычного паяльника вполне хватит, и быстрее будет.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:08.
|
|