evgenabaqus 0 1 декабря, 2017 Опубликовано 1 декабря, 2017 (изменено) · Жалоба Недавно начал заниматься программированием микроконтроллеров stm32 приобрел плату discovery f4 (STM32F411VET6U) использую stm32cube и uVision 5 пытаюсь разобраться с SPI, хочу для начала научится передавать и принимать, использую встроенные spi1,2 как master и slave понял что нужно соединить между собой SCK—SCK, MOSI—MOSI, MISO—MISO ___ в кубе активизировал SPi1 Full-Duplex Master и SPi2 Full-Duplex Slave 1- подскажите что еще в кубе выбрать для правильной генерации кода? (рис1) 2- нужно что-то менять в clock configuration или оставить все по default? (рис2) 3- а в самих настройках SPi1 Master и Slave нужно что-то менять ? (рис3,4) помогите пожалуйста разобраться с stm32cube чтобы перейти дальше к uVision 5 мне реально нужно за пару дней освоить spi, прошу Изменено 16 ноября, 2022 пользователем haker_fox Уточнил название темы, добавил теги, переместил в нужный раздел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 1 декабря, 2017 Опубликовано 1 декабря, 2017 · Жалоба а что конкретно не работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 1 декабря, 2017 Опубликовано 1 декабря, 2017 · Жалоба пытаюсь разобраться с SPI, хочу для начала научится передавать и принимать, использую встроенные spi1,2 как master и slave хотите разобраться - разбирайтесь, примеров для 4 полно и самое главное, вначале удалите с компьютера куб Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgenabaqus 0 1 декабря, 2017 Опубликовано 1 декабря, 2017 · Жалоба а что конкретно не работает? ну собственно, не знаю что дальше делать а в чем проблема куба? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 1 декабря, 2017 Опубликовано 1 декабря, 2017 · Жалоба ну собственно, не знаю что дальше делать а в чем проблема куба? Проблема куба в том что вы так и не научитесь сами разбираться, что у вас не работает. Вот я для вас поискал пример - http://easystm32.ru/interfaces/45-spi-interface-part-2 , там нет куба , но имхо всё понятно и без него . Заодно узнаете из скольких сигналов шина SPI состоит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 1 декабря, 2017 Опубликовано 1 декабря, 2017 · Жалоба а в чем проблема куба? не получится научиться ходить, а тем более бегать на костылях Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A.Lex 0 2 декабря, 2017 Опубликовано 2 декабря, 2017 · Жалоба SCK—SCK, MOSI—MOSI, MISO—MISO Что-то мне кажется, что должно быть SCK—SCK, MOSI—MISO MISO—MOSI :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sadat 0 2 декабря, 2017 Опубликовано 2 декабря, 2017 · Жалоба Наверное, еще и CS добавить, иначе как синхронизировать? Хотя вот это: "Недавно начал заниматься программированием микроконтроллеров stm32 ....мне реально нужно за пару дней освоить spi, прошу" очень напрягает, т.к. без вдумчивого понимания происходящих процессов что-то более-менее работоспособное сделать, имхо, невозможно. Или это очередной студент и а-ля курсовая по информатике? Для таких в библиотеках от STM есть уже готовые примеры прошивок и кода для обмена между двумя процессорами на демобоардах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 2 декабря, 2017 Опубликовано 2 декабря, 2017 · Жалоба Что-то мне кажется, что должно быть MOSI—MISO MISO—MOSI :rolleyes: нет , так быть не должно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A.Lex 0 3 декабря, 2017 Опубликовано 3 декабря, 2017 (изменено) · Жалоба нет , так быть не должно. Да, тупанул, извиняюсь Проверьте,есть ли в void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle) строка __HAL_I2C_ENABLE(i2cHandle); Изменено 3 декабря, 2017 пользователем A.Lex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgenabaqus 0 3 декабря, 2017 Опубликовано 3 декабря, 2017 (изменено) · Жалоба подскажите почему не работает все выходные читал интернет это я пытаюсь spi2 c spi3 соединить! /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "stm32f4xx_hal.h" /* USER CODE BEGIN Includes */ #define spi_enable HAL_GPIO_WritenPin(GPIOC, GPIO_PIN_RESET) #define spi_disable HAL_GPIO_WritenPin(GPIOC, GPIO_PIN_SET) /* USER CODE END Includes */ /* Private variables ---------------------------------------------------------*/ SPI_HandleTypeDef hspi2; SPI_HandleTypeDef hspi3; DMA_HandleTypeDef hdma_spi3_rx; /* USER CODE BEGIN PV */ /* Private variables ---------------------------------------------------------*/ /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_DMA_Init(void); static void MX_SPI2_Init(void); static void MX_SPI3_Init(void); uint8_t send_data=32, receive_data=0; /* USER CODE BEGIN PFP */ /* Private function prototypes -----------------------------------------------*/ /* USER CODE END PFP */ /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_DMA_Init(); MX_SPI2_Init(); MX_SPI3_Init(); /* USER CODE BEGIN 2 */ HAL_SPI_Receive_DMA(&hspi3,&receive_data,1); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ spi_enable; HAL_SPI_Transmit_IT(&hspi2,&receive_data,1); send_data++; HAL_Delay (100); /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) { if (hspi->Instance==hspi2.Instance) { spi_disable; } } /** System Clock Configuration */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; /**Configure the main internal regulator output voltage */ __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); /**Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 8; RCC_OscInitStruct.PLL.PLLN = 336; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; RCC_OscInitStruct.PLL.PLLQ = 8; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } /**Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } /**Configure the Systick interrupt time */ HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); /**Configure the Systick */ HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); /* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } /* SPI2 init function */ static void MX_SPI2_Init(void) { /* SPI2 parameter configuration*/ hspi2.Instance = SPI2; hspi2.Init.Mode = SPI_MODE_MASTER; hspi2.Init.Direction = SPI_DIRECTION_2LINES; hspi2.Init.DataSize = SPI_DATASIZE_8BIT; hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; hspi2.Init.NSS = SPI_NSS_SOFT; hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi2.Init.TIMode = SPI_TIMODE_DISABLE; hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi2.Init.CRCPolynomial = 10; if (HAL_SPI_Init(&hspi2) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } } /* SPI3 init function */ static void MX_SPI3_Init(void) { /* SPI3 parameter configuration*/ hspi3.Instance = SPI3; hspi3.Init.Mode = SPI_MODE_SLAVE; hspi3.Init.Direction = SPI_DIRECTION_2LINES; hspi3.Init.DataSize = SPI_DATASIZE_8BIT; hspi3.Init.CLKPolarity = SPI_POLARITY_LOW; hspi3.Init.CLKPhase = SPI_PHASE_1EDGE; hspi3.Init.NSS = SPI_NSS_HARD_INPUT; hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi3.Init.TIMode = SPI_TIMODE_DISABLE; hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi3.Init.CRCPolynomial = 10; if (HAL_SPI_Init(&hspi3) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } } /** * Enable DMA controller clock */ static void MX_DMA_Init(void) { /* DMA controller clock enable */ __HAL_RCC_DMA1_CLK_ENABLE(); /* DMA interrupt init */ /* DMA1_Stream0_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn); } /** Configure pins as * Analog * Input * Output * EVENT_OUT * EXTI */ static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET); /*Configure GPIO pin : PC6 */ GPIO_InitStruct.Pin = GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); } /* USER CODE BEGIN 4 */ /* USER CODE END 4 */ /** * @brief This function is executed in case of error occurrence. * @param None * @retval None */ void _Error_Handler(char * file, int line) { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ while(1) { } /* USER CODE END Error_Handler_Debug */ } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t* file, uint32_t line) { /* USER CODE BEGIN 6 */ /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END 6 */ } #endif там где spi_enable; стоит предупреждение warning: implicit declaration of function "HAL_GPIO_WritenPin" is invalid in C99 а потом ошибку SPI2\SPI2.axf: Error: L6200E: Symbol HAL_SPI_MspInit multiply defined (by stm32f4xx_hal_msp.o and main.o). Изменено 4 декабря, 2017 пользователем IgorKossak [codebox] для длинного кода. [code]-для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 3 декабря, 2017 Опубликовано 3 декабря, 2017 · Жалоба подскажите почему не работает все выходные читал интернет вы что, мазохист ? вам же сказано - убейте куб и нагуглите исходники на spl это я пытаюсь spi2 c spi3 соединить! соедините для начала spi2 с spi2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Angry.Minion 0 4 декабря, 2017 Опубликовано 4 декабря, 2017 · Жалоба ... HAL_SPI_Receive_DMA(&hspi3,&receive_data,1); ... HAL_SPI_Transmit_IT(&hspi2,&receive_data,1); ... передача и прием одного и того же буфера, логично что он не будет изменяться. warning: implicit declaration of function "HAL_GPIO_WritenPin" is invalid in C99 смотрим заголовочный файл stm32f4x_hal_gpio.h, функция записи пина выглядит несколько иначе: void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); Symbol HAL_SPI_MspInit multiply defined (by stm32f4xx_hal_msp.o and main.o). HAL_SPI_MspInit имеет множественное определение... а именно в файлах stm32f4xx_hal_msp и main. что то нужно удалить) В каком режиме работает ДМА? нормальный или циркулярный? вы что, мазохист ? вам же сказано - убейте куб и нагуглите исходники на spl ну не знаю... по моему мазохизм это настраивать всю периферию через регистры Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 8 декабря, 2017 Опубликовано 8 декабря, 2017 · Жалоба подскажите почему не работает все выходные читал интернет это я пытаюсь spi2 c spi3 соединить!\ Откройте описание регистров и посмотрите настроено ли все так как нужно. Запустите циклическую передачу и посмотрите осциллографом сигналы. Ну курочка по зернышку клюет... так и Вы по шажкам. А там и понимание придет. Думаю за час-два... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться