[uquote="RoboC",url="/forum/viewtopic.php?p=3800264#p3800264"]Чтение BSRR влияет на настройку таймера или на поднятие флага TIM_SR_CC1IF?[/uquote]Нет, но это как грязной лапой потрогать Такой код и читать дальше не хочется.
Ошибка в приоритете операций & и ==. Правильно будет
[uquote="WiseLord",url="/forum/viewtopic.php?p=3800329#p3800329"]2) читать BSRR вообще нельзя, а Вы это в обоих случаях делаете?[/uquote]Да можно. Только зачем и что он оттуда прочтёт.
[uquote="WiseLord",url="/forum/viewtopic.php?p=3800329#p3800329"]1) код "поднятия" и "опускания" ножки у Вас в обработчике абсолютно одинаковый,[/uquote]И всё таки он разный.
[uquote="Oxford",url="/forum/viewtopic.php?p=3800305#p3800305"]кварц 4-16mhz, Pll/2 выводиться, SYSCLK должен быть меньше или равно 50 mhz[/uquote]
Не понял.
RCC->CFGR |= RCC_CFGR_MCO_SYSCLK - Выводит установленную вами системную частоту. Не больше не меньше, а именно ту, что вы установили после всех делителей/множетелей, после System Clock Mux на AHB Prescaler.
к примеру параметры RCC->CFGR из stm32f10x.h
#define RCC_CFGR_MCO_SYSCLK ((uint32_t)0x04000000) /*!< System clock selected as MCO source */
#define RCC_CFGR_MCO_HSI ((uint32_t)0x05000000) /*!< HSI clock selected as MCO source */
#define RCC_CFGR_MCO_HSE ((uint32_t)0x06000000) /*!< HSE clock selected as MCO source */
#define RCC_CFGR_MCO_PLLCLK_Div2 ((uint32_t)0x07000000) /*!< PLL clock divided by 2 selected as MCO source */
Добавлено after 12 minutes 37 seconds:
То есть записывая бит в нужный регистр RCC->CFGR вы можете просмотреть (осциллографом или анализатором) верно ли вы настроили всю цепочку делителей/множителей.
Если птичка уже в одном прыжке от тебя, всё-таки побереги свой нос, может она за оконным стеклом???
Чёрт, только сейчас, хорошо присмотревшись, вижу разницу BS/BR.
Тогда да, код в части GPIO потенциально рабочий, т.к. читается BSRR всегда как нули, но из-за read-modify-write обработчик будет дольше выполняться, что на высоких частотах критично.
[uquote="VladislavS",url="/forum/viewtopic.php?p=3800423#p3800423"]Читаем RM, ибо он рулез![/uquote] Не попадалось. Работал исключительно с мк до 50мгц.
Добавлено after 27 minutes 8 seconds:
К с тате. Не знаю в какой теме задать вопрос.
Сделал на STM32f042 ЩИМ на таймере с управляемым заполнением импульса для регулировки мощности на нагрузке. Там много еще чего, по этому тактирывал от внутреннего RC-генератора, экономил ножки. ШИМ вывел на оптрон. И с него управление на затвор мосфета. То есть полная развязка по питанию - микруха от одного источника питания, мосфет от другого. Обычную, активную нагрузку регулирует на ура. Стоит подключить коллекторный двигатель (для чего и делалось) все, хана, микруха сходит с ума, выдает какое то случайное заполнение импульса, ну и остальные блоки то же выходят из под контроля. Каких только фильтров ни делал по питанию двигателя ни чего не помогает. Пока грешу на тактовый RC-генератор микрухи, типа нестабильно работает в условиях помех....
Ни кто не сталкивался?
Если птичка уже в одном прыжке от тебя, всё-таки побереги свой нос, может она за оконным стеклом???
[uquote="passer_by",url="/forum/viewtopic.php?p=3800102#p3800102"][uquote="Frogfot",url="/forum/viewtopic.php?p=3797063#p3797063"]Или как-то можно вывести 72 МГц?[/uquote]На вывод PA8[/uquote]
Бдагодарю, буду знать.
Добавлено after 5 minutes 9 seconds:
Ещё вопросик знатокам - делаю захват значений таймера TIM4 CH4 по внешнему входу PB9 - захваты есть, прерывания идут, но читаю из TIM4->CCR4 и TIM4->CCR3 одни нули. Код инициализации:
Спойлер
TIM4->CCMR2 = TIM_CCMR2_OC3M_1 | // CC3 channel is configured as input, IC3 is mapped on TI4
TIM_CCMR2_CC4S_0; // CC4 channel is configured as input, IC4 is mapped on TI4
Друзья, у кого-нибудь есть макетка STM32F3 Discovery? Свою в 2018 последний раз использовал, а сейчас включаю - не работает ни одна моя программа. Как я выяснил, не заводится ни один осциллятор - ни внешний кварц на 8 МГц, ни внутренний HSI. При этом демо-программа мигалка от ST исправно работает от внешнего кварца. Варианта тут два - или я разучился и что-то забыл, или мой компилятор что-то мозги парит. Компилятор MikroC. Внизу прикрепляю скомпилированный своим компилятором hex - кто-нибудь может попробовать зашить в свою макетку (должен стоять внешний кварц X2)?
Здравствуйте! Разрешите ворваться в тему с вопросом по SPI STM32F103C8.
В одной из веток на форуме я задавал вопрос по SI4463, но проблема оказалась в SPI (https://www.radiokot.ru/forum/viewtopic ... 6#p3785086)
Проблема в том, что CS поднимается раньше чем закончилась транзакция по SPI.
Не смотря на ожидание флагов TXE и BSY согласно п. 25.3.8 референс мануала, чип селект упорно поднимается раньше на 1/4 тактового сигнала (см. прикрепление).
[uquote="WiseLord",url="/forum/viewtopic.php?p=3803581#p3803581"]А где в самом коде вся эта настройка тактирования, множителей и т.п.?[/uquote]
Микроси автоматически вставляет в итоговый хекс те настройки, которые указываешь в свойствах проекта. Скриншот есть во вложении. Здесь не нужно отдельно настраивать тактирование.
Попробовал вручную указать настройки тактирования - все равно не работает. Внешний кварц не заводится. При этом, подчеркиваю, мигалка-прошивка от ST работает и кварц заводится! Из чего я делаю вывод, что что-то не так именно с программой.
[uquote="Feruz",url="/forum/viewtopic.php?p=3803670#p3803670"]Не смотря на ожидание флагов TXE и BSY согласно п. 25.3.8 референс мануала, чип селект упорно поднимается раньше на 1/4 тактового сигнала (см. прикрепление).[/uquote]Поднимайте CS после RXNE.
[uquote="Lum1noFor",url="/forum/viewtopic.php?p=3803736#p3803736"]Микроси автоматически вставляет в итоговый хекс те настройки, которые указываешь в свойствах проекта.[/uquote]В топку такую среду разработки. Ну есть же вменяемые тулчейны, где абсолютно всё под контролем программиста.
[uquote="VladislavS",url="/forum/viewtopic.php?p=3803769#p3803769"]Поднимайте CS после RXNE.[/uquote]
Он проверяет даже больше необходимого, проблема в другом. Если менять делители для SPI и замерять время между фронтом защелкивающим данные на SCK и поднятием NSS, то оно не меняется, т.е. SPI считает этот фронт окончанием передачи. При относительно небольших делителях все нормально, но если делитель порядка 64 и больше, то уже могут быть проблемы, т.к. фиксированной задержки перед NSS начинает не хватать и он поднимается в середине последнего периода.
[uquote="Reflector",url="/forum/viewtopic.php?p=3803799#p3803799"][uquote="VladislavS",url="/forum/viewtopic.php?p=3803769#p3803769"]Поднимайте CS после RXNE.[/uquote]
Он проверяет даже больше необходимого, проблема в другом. Если менять делители для SPI и замерять время между фронтом защелкивающим данные на SCK и поднятием NSS, то оно не меняется, т.е. SPI считает этот фронт окончанием передачи. При относительно небольших делителях все нормально, но если делитель порядка 64 и больше, то уже могут быть проблемы, т.к. фиксированной задержки перед NSS начинает не хватать и он поднимается в середине последнего периода.[/uquote]
Все верно, когда частота SPI достаточно высока, тогда все нормально и клоки успевают закончится до подъема чип селекта.
Добавлено after 1 minute 27 seconds:
[uquote="DimAlt",url="/forum/viewtopic.php?p=3804006#p3804006"]Feruz а так пробовали?
uint8_t spi_trx(uint8_t to_send)
{
// while((SPI1->SR & SPI_SR_TXE)==0);//ждать освобождения буфера на передачу
while(SPI1->SR & SPI_SR_BSY);//ждать окончания передачи
SPI1->DR = to_send; //запустить передачу байта
while((SPI1->SR & SPI_SR_RXNE)==0);//ждать "Receive buffer Not Empty" окончание приема
return SPI1->DR;//clear SPI_SR_RXNE flag
}
[/uquote]
Попробовал. Вообще не работает - ожидание BSY никогда не закончится, так как SPI транзакция ни разу не инициировалась. <- Бред написал. По идее должно работать, но лог анализатор показывает тишину на линиях.