ivainc1789 0 12 мая, 2021 Опубликовано 12 мая, 2021 · Жалоба Нарвался совершенно случайно на очередные грабли. Вот простая конфигурация для STM32F103VET6. Как видим, ремап сделан и для SPI1 и для TIM2CH1. В данной конфигурации был важен именно таймер, т. к. я планировал звук выводить на пищалку именно через него (пин 77). Куб ничего подозрительного не выдал, я естественно тоже никакого криминала не заметил, короче, плата была успешно сделана. Приступил к программированию и тут все порушилось: пин 77 не хотел делать НИЧЕГО! Висит в Hi-Z и все. Разбор полетов показал, что SPI1 не имеет частичного ремапа и переносятся не только пины SCK,MISO,MOSI но и NSS! И насколько показывают мои эксперименты, для данной конфигурации платы пин 77 потерян - нужно выбирать что-то одно, но нужен и SPI1 и таймер (звук). Была надежда, что пином будет управлять та периферия, которая инициализирует его последней. На практике вроде такое не подтвердилось... Вот решил посоветоваться, может что не так понимаю или есть еще варианты? TIM2CH1asA15.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 35 13 мая, 2021 Опубликовано 13 мая, 2021 · Жалоба 5 часов назад, ivainc1789 сказал: пин 77 не хотел делать НИЧЕГО! Висит в Hi-Z и все. Если 77-пин у вас носит имя PA15, то он у вас не работает исключительно потому, что занят под JTAG (это его default функция). Отключите полный JTАG (оставьте только двухпроводный SWD+SWCLK) после чего он у вас заработает. Лично у меня он импульсы считает :). В CubeMX это делается так: Pinout & Configuration -> System Core -> SYS -> Debug -> Serial Wire. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mcheb 0 13 мая, 2021 Опубликовано 13 мая, 2021 · Жалоба Как-то так надо 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 13 мая, 2021 Опубликовано 13 мая, 2021 · Жалоба 11 часов назад, ivainc1789 сказал: Разбор полетов показал, что SPI1 не имеет частичного ремапа и переносятся не только пины SCK,MISO,MOSI но и NSS! И насколько показывают мои эксперименты, для данной конфигурации платы пин 77 потерян - нужно выбирать что-то одно, но нужен и SPI1 и таймер (звук). Не знаю, как в ваших Кубах, но в регистре SPI_CR1 есть битик SSM. При его установке в 1 нога NSS заменяется битом SSI того же регистра. Очевидно, что после этого она может использоваться для другой периферии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivainc1789 0 13 мая, 2021 Опубликовано 13 мая, 2021 · Жалоба 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 и без оного... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться