Перейти к содержанию
    

evgenabaqus

Участник
  • Постов

    13
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Посетители профиля

663 просмотра профиля
  1. подскажите почему не работает все выходные читал интернет это я пытаюсь 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).
  2. ну собственно, не знаю что дальше делать а в чем проблема куба?
  3. помогите с spi в STM32F411VET6U

    Недавно начал заниматься программированием микроконтроллеров 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, прошу
  4. АЦП + STM32

    да помочь с пониманием интересует считывания данных с внешних ацп с последующим отображением на экране! что в какой последовательности идет и нужно делать и тд..
  5. АЦП + STM32

    Хочу научится работать с внешними ацп (AD и TI) и программировать микроконтроллеры STM32 для считывания данных! как я вижу большинство ацп имеют интерфейс SPI - т.е нужно разобраться как я понял с ним по ацп для начала хочу задавать коэффициент усиления (где нужно), регулировать СПС, далее по МК, задача простая - считывать данные с ацп, задать калибровку, обнулить ну и на конец чтобы на компьютере это все отображалось из того, с чего начну- (что уже в наличии) ads1256 и плата nucleo-f103rb Помогите кто-нибудь пожалуйста!
  6. вроде, согласно таблице 12 все ок. идея про звуковую карту не лишена смысла конечно! однако на борту у ацп усилитель и звуковые карты для другого изначально были разработаны для другого да и программировать я что то что то не умею, пока ) STM32F103C8 справится с задачей ? при скорости 30 КСПС ну как на фотографии сверху, там все ок?
  7. скажите пожалуйста а для ads1256 при SPS 30 000 какой лучше взять микроконтроллер? мне нужно получать данные с тензодатчика со скоростью 1000 - 30000 SPS 1) чтобы я мог выбрать скорость выборки 2) и мне нада просто наблюдать за данными и чтобы я мог потом сохранить их в txt китаец предлагает взять еще такую плату - типо это облегчет подключение модуля с ацп к компьютеру скажите это так? нормальная плата? как посчитать сможет эта плата обеспечить мои потребности?
  8. подскажите, а как с этими проблемами обстоят дела у AD7190 есть еще готовый модуль с ад7190 и вообще что лучше ads1256 или ad7190 в плане шумов и капризности понимаю про удар можно забыть у ад7190 всего 4к sps не могу понять полосу, у 7190 что всего 10hz?? типа сигнал выше 10 hz поступать не будет?
  9. скажите пожалуйста, есть такой же модуль, но с другим питанием - посмотрите пожалуйста такое питание лучше? точность повысится?
  10. Спасибо за ответы! я только начинаю разбираться, поэтому такие нубские вопросы я читал что желательно частоту дискретизации выбирать в 2 меньше от максимально ацп , скажите что вы имеете виду под понятием полоса всего 6кГц Скажите еще пожалуйста правильно ли я понимаю принцип измерений допустим есть датчик 1000кг нужно мерить с точностью 0,1кг (0.01%) чувствительность датчика например 2мВ/В пусть питание будет 10в получаем выход 20мВ нужна точность 0.01% от 1000 это 0.1 кг и это 2мкВ от 20мВ далее как я понимаю нужно смотреть imput range самого АЦП если например 0-4.2В то считаем 4.2 В / 2 мкВ = 2.1 E6 отсчетов или ~ 21 чистый бит это если не используем усилитель усиление 10 раз и уже нужно 2.1 E5 отсчетов или 17.6 чистых бит чистый бит как я понял свободный от шума или эффективный?? правильны ли рассуждения изложенные выше? _________ и еще такой вопрос если нет сертификата о чувствительности датчика, то нужно самому откалибровать этот датчик (путем приложения различных нагрузок) и получить реальную чувствительность?
  11. Здравствуйте! Для экспериментальных исследований в университете мне нужно собрать систему сбора данных, которая будет считывать сигнал с тензодатчика (вначале с 1 но планируется применять в будущем 4) на который воздействует динамическая нагрузка (типа удар) Я не сильно разбираюсь в электронике... но гуглом пользоваться умею (т.к нашел сей чудесный сайт =)) так вот нашел я значит готовые модули у китайцев с ацп 1256 ну там 24 бит 30ksps , и значит мы к тензодатчику подключим усилитель ad620 тоже готовый модуль ну потом микроконтроллер итд китайский товарищ прислал схему платы с ацп и есть картинка усилителя ад620 посмотрите пожалуйста, все ли там правильно будет ли это работать... и на сколько точно? можно ли это определить?! на что еще нужно обратить внимание? спасибо ADS1256__22810___36890___36947___37319___38598___27169___22359_.pdf
  12. скажите, а 8 бит хватит? как количество бит будет влиять на сигнал? стоит ли использовать 8 бит осциллограф или лучше использовать 24бит sigma delta ADC?
  13. Здравствуйте, помогите советом в реализации проекта есть датчик силы + усилитель (AD620) на датчик установлена плита на которую прикладываются различные динамические воздействия нужно уловить сигнал в рамках 0,1-1мс Собственно вопрос, можно ли использовать осциллограф цифровой скажем 1МГц что из этого получится? Спасибо!
×
×
  • Создать...