STM32CubeIDE (вопросы и ответы)

у WeAct есть 411RE доска?

да, плохой пример привел))
там нада HAL_UART_Transmit_DMA использовать…

Я всё равно как доберусь до отладки буду повторно это всё спрашивать (так как пока сам руками не по делаю - часто забываю, это уже «профессиональное» после многих лет в браке).
Но Хотя бы понятно зачем оно и куды тулить. Потом правил но вопрос смогу задать (точнее более понятно :slight_smile: )

Я удивлен, что ты удивлен )))
Если уж на нонэйме за недорого (дешевле нано) есть оригинальные чипы RE….

После двух часов моргания Windows неожиданно разразился сообщением HID устройство готово к использованию. Вот теперь думаю что с этим делать?

Ничего, встали дрова))
HID BootLoader и COM, как правило.
В диспечер глянь.

нарисовал под 411 инициализацию в CMSIS + UART + TIMmillis, все норм, доже скучновато стало.

Но вопрос про CPP любопытный:
если компилировать main.cpp - Debug через PB3 перестает работать.
достаточно опять переименовать в main.c - все взлетает.

Линковска внешних функций в С и С++ происходит по разному, видимо дебаг должен линковаться как С-исходник

@andycat , а если просто функцию вынести в .c-файл и подключить в main.cpp?

попробую, попозже, но думаю все проще, достаточно добавить

extern "C" 

перед функцией

int __io_putchar(int ch)
{
  ITM_SendChar(ch);
  return ch;
}

на досуге поэкспериментирую.

да, оно, помогло

1 лайк

В CMSIS нет SysTick ?

Есть, я по привычке + передрал часть своего кода с stm32f303.
И сейчас уже не вспомню почему я systick не выбрал, вроде использовал его для микросекундных точных пауза.

код потянул на 3.5 это не много?

я не меряю размер, влазит и хорошо.
Пустой не проверял, а нынешний с дисплеем uart и прочим, elf файл уже 505 килобайт.

Я вот или туплю или что то криво настроил с тактированием :thinking:

st7735 128*160 SPI 1 на 50 МГц должно быть
а у меня 62 кадра в секунду :frowning:
62 * 128 * 160 * 16 = 20,316 МГц

	RCC->CFGR |= RCC_CFGR_SW_PLL; // 10: PLL selected as system clock
	//RCC->CFGR &= ~RCC_CFGR_HPRE_DIV1; // AHB -> 0xxx: system clock not divided -> 100MHz
	RCC->CFGR |= RCC_CFGR_PPRE1_DIV2; // APB1 -> 100: AHB clock divided by 2 -> 50MHz
	//RCC->CFGR &= ~RCC_CFGR_PPRE2_DIV1; // APB2 -> 0xx: AHB clock not divided -> 100MHz

вроде корректно вес настроено.

я пока только в кубе могу настройку проверить, если там 50 мегагерц, то должно вытягивать, я этот дисплей мог проверить только на 27 мегагерц, на этой частоте точно работает
А я жду правильный ST-LINK

выше же ссылка была, от того же WeAct брал, отлично работает, UART встроенный - как доп довесок.

уже отгрузили, я взял два разных, посмотрим
PS мне бы с редактором определиться ни VI ни VIM не зашёл, нужен что-то типа npp
не люблю я тёмные темы ещё со времён ес-1840, может просто привыкнуть надо

в результате оптимизации функции заполнения экрана добился 24.903 МГц SPI, но явно это не 50, где то косяк :thinking:

void f4st7735fillRect(unsigned short value, unsigned short x0, unsigned short y0, unsigned short x1, unsigned short y1) {
	tftCSenable(); // chip select on
	f4tftSetAddrWindow(x0, y0, x1, y1);
    // 16 bit transfer mode
	SPI1->CR1 &= ~SPI_CR1_SPE;
    GPIOB->BSRR |= GPIO_BSRR_BS0; // PB0 HIGH
	SPI1->CR1 |= SPI_CR1_DFF;
	SPI1->CR1 |= SPI_CR1_SPE;
	unsigned long countPix = (unsigned long)((x1-x0+1)*(y1-y0+1));
	while (countPix--) {
		while (!(SPI1->SR & SPI_SR_TXE));
		*(volatile uint16_t *)&(SPI1->DR) = value;
    }
    // wait end transfer
	while (!(SPI1->SR & SPI_SR_TXE) || (SPI1->SR & SPI_SR_BSY));
    // return 8bit transfer mode
	SPI1->CR1 &= ~SPI_CR1_SPE;
	tftCSdisable(); // chip select off
	SPI1->CR1 &= ~SPI_CR1_DFF;
	SPI1->CR1 |= SPI_CR1_SPE;
}

У меня вопросы по проще будут )))
Почему если я включаю SPI1, то он горит “ошибкой”?

А если SPI2 - то зеленая галочка (всё хорошо)…

Где-то какой-то “конфликт”? Или в чем причина?