cancel
Showing results for 
Search instead for 
Did you mean: 

nucleo L476RG and AD9834

Seth1er
Associate II

hello,

I try to use the AD9834 with the nucleo L476RG and I have some issue.

I use Spi 1 , send that I think good, but it's not work.

here are my code, I hope someone can help.

thanks and sorry for my english

int PINSW = 1;
 
//int led = GPIO_PIN_5;
int AD_reset = GPIO_PIN_15;
int AD_SDA = GPIO_PIN_14;
int AD_SLK = GPIO_PIN_13;
int AD_FSY = GPIO_PIN_12;
int AD_CSK = GPIO_PIN_5;
 
uint8_t spitx[2];
 
void AD9834_Reset(int value){
    if(PINSW){
        if(value)   HAL_GPIO_WritePin(GPIOB, AD_reset,1);
        else        HAL_GPIO_WritePin(GPIOB, AD_reset,0);
    }else{
        if(value)   AD9834_CONTROL |= 0x0100;
        else        AD9834_CONTROL &= ~0x0100;
        //AD9834_SendWord(AD9834_CONTROL);
    }
}
 
 
 
 
 
 
 
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART2_UART_Init();
  MX_SPI2_Init();
  MX_SPI1_Init();
  /* USER CODE BEGIN 2 */
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
  //AD9834_Reset(0);
  HAL_Delay(2000);
  //AD9834_Reset(1);
 
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
  HAL_Delay(100);
 
  spitx[0]=0x00;
  spitx[1]=0x21;
  HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
  HAL_Delay(100);
 
  spitx[0]=0xC7;
  spitx[1]=0x50;
  HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
  HAL_Delay(100);
 
  //freq
  spitx[0]=0xFB;
  spitx[1]=0x0E;
  HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
  HAL_Delay(100);
 
  spitx[0]=0x00;
  spitx[1]=0x40;
  HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
  HAL_Delay(100);
 
  spitx[0]=0x00;
  spitx[1]=0x00;
  HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
  HAL_Delay(100);
 
  spitx[0]=0x00;
  spitx[1]=0xC0;
  HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
  HAL_Delay(100);
 
  spitx[0]=0x00;
  spitx[1]=0x00;
  HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
  HAL_Delay(100);
 
  spitx[0]=0x00;
  spitx[1]=0x20;
  HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
 
 
 
 
 
  /* USER CODE END 2 */
 
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
 
    //HAL_GPIO_TogglePin(GPIOA, led);
   // HAL_GPIO_TogglePin(GPIOB, AD_FSY);
	  //spitx[1]=0x00;
	  //HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
  // HAL_Delay(2000);
    /* USER CODE END WHILE */
 
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
 
/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
 
  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLM = 1;
  RCC_OscInitStruct.PLL.PLLN = 10;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
  RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
  RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB buses 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_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
 
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
  {
    Error_Handler();
  }
  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2;
  PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  {
    Error_Handler();
  }
  /** Configure the main internal regulator output voltage
  */
  if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
  {
    Error_Handler();
  }
}
 
/**
  * @brief SPI1 Initialization Function
  * @param None
  * @retval None
  */
static void MX_SPI1_Init(void)
{
 
  /* USER CODE BEGIN SPI1_Init 0 */
 
  /* USER CODE END SPI1_Init 0 */
 
  /* USER CODE BEGIN SPI1_Init 1 */
 
  /* USER CODE END SPI1_Init 1 */
  /* SPI1 parameter configuration*/
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 7;
  hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI1_Init 2 */
 
  /* USER CODE END SPI1_Init 2 */
 
}
 
/**
  * @brief SPI2 Initialization Function
  * @param None
  * @retval None
  */
static void MX_SPI2_Init(void)
{
 
  /* USER CODE BEGIN SPI2_Init 0 */
 
  /* USER CODE END SPI2_Init 0 */
 
  /* USER CODE BEGIN SPI2_Init 1 */
 
  /* USER CODE END SPI2_Init 1 */
  /* SPI2 parameter configuration*/
  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_MASTER;
  hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  hspi2.Init.DataSize = SPI_DATASIZE_16BIT;
  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 = 7;
  hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi2.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
  if (HAL_SPI_Init(&hspi2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI2_Init 2 */
 
  /* USER CODE END SPI2_Init 2 */
 
}
 
/**
  * @brief USART2 Initialization Function
  * @param None
  * @retval None
  */
static void MX_USART2_UART_Init(void)
{
 
  /* USER CODE BEGIN USART2_Init 0 */
 
  /* USER CODE END USART2_Init 0 */
 
  /* USER CODE BEGIN USART2_Init 1 */
 
  /* USER CODE END USART2_Init 1 */
  huart2.Instance = USART2;
  huart2.Init.BaudRate = 115200;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART2_Init 2 */
 
  /* USER CODE END USART2_Init 2 */
 
}
 
/**
  * @brief GPIO Initialization Function
  * @param None
  * @retval None
  */
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
 
  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
 
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
 
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_RESET);
 
  /*Configure GPIO pin : B1_Pin */
  GPIO_InitStruct.Pin = B1_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);

4 REPLIES 4
Seth1er
Associate II

o

Imen.D
ST Employee

Hello @Seth1er​  and welcome to the STM32 Community 😊 ,

Please share your ioc file and more details to help you solve your issue :

Which version of CubeL4 and CubeMx are you using ?

In the debug, where the code hangs/stop ? Do you get an error message ?  

Imen

When your question is answered, please close this topic by clicking "Accept as Solution".
Thanks
Imen
Seth1er
Associate II

hello,

here are the ioc file.

cubeide version :

Version: 1.5.1

Build: 9029_20201210_1234 (UTC)

I don't know what is CubeL4 sorry. if it's the nucle version, i don't know how to check.

In fact I don't have any arror message. the code is load, I send some data on the SPI to the AD9834 but I don't have any signal.

after some try I have one success, with code below( with luck) I have a 6,25MHz signal. I don't understand why, because it doesn't correspond to the 9834 formula.

If I try an other value, I don't have any signal.

I don't know if it's an SPI issue, a sequence issue .

I don't found any exemple on net between SMT32 and AD9834. a lot with arduino, but all exemple don't use the SPI, they make they own one.

I hope someone can help me. it seem to be easy but i can't .

The AD9834 is on a "eval" board with the clk inside a 75MHz.

BR,

 HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);

  HAL_Delay(100);

  spitx[0]=0x00;

  spitx[1]=0x21;

  HAL_SPI_Transmit(&hspi1, spitx, 1, 100);

  HAL_Delay(100);

  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);

  HAL_Delay(100);

  HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);

  HAL_Delay(100);

  spitx[0]=0xC7;

  spitx[1]=0x50;

  HAL_SPI_Transmit(&hspi1, spitx, 1, 100);

  HAL_Delay(100);

  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);

  HAL_Delay(100);

  HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);

  HAL_Delay(100);

  //freq

  spitx[0]=0xFB;

  spitx[1]=0x0E;

  HAL_SPI_Transmit(&hspi1, spitx, 1, 100);

  HAL_Delay(100);

  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);

Seth1er
Associate II

just a up,

if someone can help me on this please. or give me a simple code to set a freq with STM32 and AD9834, I will understand

BR