|
|
  |
помогите с spi |
|
|
|
Dec 1 2017, 16:27
|
Группа: Участник
Сообщений: 13
Регистрация: 29-10-17
Пользователь №: 99 973

|
Недавно начал заниматься программированием микроконтроллеров 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, прошу
Эскизы прикрепленных изображений
|
|
|
|
|
Dec 1 2017, 17:37
|
Группа: Участник
Сообщений: 13
Регистрация: 29-10-17
Пользователь №: 99 973

|
Цитата(Lmx2315 @ Dec 1 2017, 18:24)  а что конкретно не работает? ну собственно, не знаю что дальше делать а в чем проблема куба?
|
|
|
|
|
Dec 1 2017, 17:44
|

отэц
    
Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684

|
Цитата(evgenabaqus @ Dec 1 2017, 20:37)  ну собственно, не знаю что дальше делать
а в чем проблема куба? Проблема куба в том что вы так и не научитесь сами разбираться, что у вас не работает. Вот я для вас поискал пример - http://easystm32.ru/interfaces/45-spi-interface-part-2 , там нет куба , но имхо всё понятно и без него . Заодно узнаете из скольких сигналов шина SPI состоит.
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Dec 2 2017, 15:16
|
Частый гость
 
Группа: Участник
Сообщений: 138
Регистрация: 27-12-11
Пользователь №: 69 107

|
Цитата(evgenabaqus @ Dec 1 2017, 18:27)  SCK—SCK, MOSI—MOSI, MISO—MISO Что-то мне кажется, что должно быть SCK—SCK, MOSI—MISO MISO—MOSI
|
|
|
|
|
Dec 2 2017, 20:10
|

отэц
    
Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684

|
Цитата(A.Lex @ Dec 2 2017, 18:16)  Что-то мне кажется, что должно быть MOSI—MISO MISO—MOSI  нет , так быть не должно.
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Dec 3 2017, 10:47
|
Частый гость
 
Группа: Участник
Сообщений: 138
Регистрация: 27-12-11
Пользователь №: 69 107

|
Цитата(Lmx2315 @ Dec 2 2017, 22:10)  нет , так быть не должно. Да, тупанул, извиняюсь Проверьте,есть ли в void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle) строка __HAL_I2C_ENABLE(i2cHandle);
Сообщение отредактировал A.Lex - Dec 3 2017, 13:33
|
|
|
|
|
Dec 3 2017, 19:18
|
Группа: Участник
Сообщений: 13
Регистрация: 29-10-17
Пользователь №: 99 973

|
подскажите почему не работает все выходные читал интернет это я пытаюсь spi2 c spi3 соединить! CODE /* 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).
Сообщение отредактировал IgorKossak - Dec 4 2017, 08:36
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!
|
|
|
|
|
Dec 3 2017, 20:16
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(evgenabaqus @ Dec 3 2017, 20:18)  подскажите почему не работает все выходные читал интернет вы что, мазохист ? вам же сказано - убейте куб и нагуглите исходники на spl Цитата(evgenabaqus @ Dec 3 2017, 20:18)  это я пытаюсь spi2 c spi3 соединить! соедините для начала spi2 с spi2
|
|
|
|
|
Dec 4 2017, 05:16
|
Группа: Новичок
Сообщений: 2
Регистрация: 3-12-17
Пользователь №: 100 475

|
Цитата(evgenabaqus @ Dec 4 2017, 02:18)  ... HAL_SPI_Receive_DMA(&hspi3,&receive_data,1); ... HAL_SPI_Transmit_IT(&hspi2,&receive_data,1); ... передача и прием одного и того же буфера, логично что он не будет изменяться. Цитата(evgenabaqus @ Dec 4 2017, 02:18)  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); Цитата(evgenabaqus @ Dec 4 2017, 02:18)  Symbol HAL_SPI_MspInit multiply defined (by stm32f4xx_hal_msp.o and main.o). HAL_SPI_MspInit имеет множественное определение... а именно в файлах stm32f4xx_hal_msp и main. что то нужно удалить) В каком режиме работает ДМА? нормальный или циркулярный? Цитата(Огурцов @ Dec 4 2017, 03:16)  вы что, мазохист ? вам же сказано - убейте куб и нагуглите исходники на spl ну не знаю... по моему мазохизм это настраивать всю периферию через регистры
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|