Jump to content

    
ivainc1789

STM32F103VET6 тонкости ремапа пинов

Recommended Posts

Нарвался совершенно случайно на очередные грабли. Вот простая конфигурация для STM32F103VET6. Как видим, ремап сделан и для SPI1 и для TIM2CH1. В данной конфигурации был важен именно таймер, т. к. я планировал звук выводить на пищалку именно через него (пин 77).

STM32F1_RemappingConflict.thumb.jpg.0b77d99112fd921453afde74c161c9e7.jpg

Куб ничего подозрительного не выдал, я естественно тоже никакого криминала не заметил, короче, плата была успешно сделана. Приступил к программированию и тут все порушилось: пин 77 не хотел делать НИЧЕГО! Висит в Hi-Z и все.

Разбор полетов показал, что SPI1 не имеет частичного ремапа и переносятся не только пины SCK,MISO,MOSI но и NSS! И насколько показывают мои эксперименты, для данной конфигурации платы пин 77 потерян - нужно выбирать что-то одно, но нужен и SPI1 и таймер (звук).

Была надежда, что пином будет управлять та периферия, которая инициализирует его последней. На практике вроде такое не подтвердилось... Вот решил посоветоваться, может что не так понимаю или есть еще варианты?    

TIM2CH1asA15.rar

Share this post


Link to post
Share on other sites
5 часов назад, ivainc1789 сказал:

пин 77 не хотел делать НИЧЕГО! Висит в Hi-Z и все.

Если 77-пин у вас носит имя PA15, то он у вас не работает исключительно потому, что занят под JTAG (это его default функция).

Отключите полный JTАG (оставьте только двухпроводный SWD+SWCLK) после чего он у вас заработает. Лично у меня он импульсы считает :).

В CubeMX это делается так: Pinout & Configuration -> System Core -> SYS -> Debug -> Serial Wire.

Share this post


Link to post
Share on other sites

Как-то так надо

void initBoard(void)
{
    RCC->APB2ENR = RCC_APB2ENR_IOPAEN + 1*RCC_APB2ENR_IOPBEN +
                   1*RCC_APB2ENR_IOPCEN + 0*RCC_APB2ENR_IOPDEN +
                   0*RCC_APB2ENR_USART1EN + RCC_APB2ENR_AFIOEN;
    AFIO->MAPR = AFIO_MAPR_SWJ_CFG_JTAGDISABLE;

Share this post


Link to post
Share on other sites
11 часов назад, ivainc1789 сказал:

Разбор полетов показал, что SPI1 не имеет частичного ремапа и переносятся не только пины SCK,MISO,MOSI но и NSS! И насколько показывают мои эксперименты, для данной конфигурации платы пин 77 потерян - нужно выбирать что-то одно, но нужен и SPI1 и таймер (звук).

Не знаю, как в ваших Кубах, но в регистре SPI_CR1 есть битик SSM. При его установке в 1 нога NSS заменяется битом SSI того же регистра. Очевидно, что после этого она может использоваться для другой периферии.

Share this post


Link to post
Share on other sites
18 часов назад, Xenia сказал:

В CubeMX это делается так: Pinout & Configuration -> System Core -> SYS -> Debug -> Serial Wire.

Именно так и сделано, по рисунку же видно...

15 часов назад, mcheb сказал:

Как-то так надо

Проверил состояние битов, все верно указано, куб нагенерил именно так!

11 часов назад, Сергей Борщ сказал:

но в регистре SPI_CR1 есть битик SSM

А вот этот битик был в 1, т. е. NSS менеджмент разрешен. Я его скинул так 

#define BITCLR(REG,BIT) ((REG) &= ~(BIT))

BITCLR(SPI1->CR1,SPI_CR1_SSM);

Проверил в CubeIDE - состояние сбросилось.

Но все эти меры не привели состояние пина 77 к возможности переключаться. Помогает только если отменить ремап SPI1...

 

P.S. Попробовал сконфигурировать SPI1 в режим master с пином NSS в режиме hardware выхода. Передача байтов по линиям MOSI и SCK проходит как нужно, но NSS все время в низком уровне. Поведение одинаково и с ремапом SPI1 и без оного...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.