Я утверждал что Куб генерит нерабочий код. Вот он сгенерированный нерабочий код:


Т.е. видно что эти выводы должны быть сконфигурированы. А теперь смотрим конфигуратор выводов:
Код
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
/*Configure GPIO pin : PA5 */
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
Про SPI выводы ни строчки. Собственно у меня в этом Кубе и светодиод тоже не работает. Но разбираться почему в и так нерабочем коде - лень.
SPI програмный написал ручками. Работает идеально. Жаль что аппаратный SPI так и не удалось запустить. Может кто нибудь сгенерит мне в Кубе подобный код - буду благодарен. Мой вариант Куба - дерьмовый программист.
Кстати, почему в Full Duplex варианте вывод MISO называется Alternate Function Push Pull я так и не понял. Это же вход в конце концов.
В итоге средство, сделанное для сокращения времени программирования выполняет прямо противоположную функцию.
Еще бОльший маразм виден при детальном рассмотрении кода. Как известно, переключение входов на аналоговые рекомендуется для снижения потребления. Могучий Куб же для того, чтобы сконфигурировать ненужные мне выводы, включает тактирование всех GPIO:
Код
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
Щас прямо столько энергии сохранится, аж жуть!
А теперь взглянем на функцию, которая конфигурирует (т.е должна) GPIO и тактирование:
Код
/* Init the low level hardware : GPIO, CLOCK, NVIC... */
HAL_SPI_MspInit(hspi);
Вот она:
Код
__weak void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(hspi);
/* NOTE : This function should not be modified, when the callback is needed,
the HAL_SPI_MspInit should be implemented in the user file
*/
}
Теперь понятно почему не работает SPI.
Сообщение отредактировал Димон Безпарольный - May 16 2016, 09:12